#!/usr/bin/env -S uv run --quiet --script # /// script # requires-python = ">=3.10" # /// import subprocess import sys def get_release_notes(version): with open("CHANGELOG.md", "r") as f: content = f.read() sections = content.split("\n## ") # First section won't start with ## since it's split on that sections = ["## " + s if i > 0 else s for i, s in enumerate(sections)] for section in sections: if section.startswith(f"## {version}"): install_instructions = f"""## Installation You can install krayt using one of these methods: > !krayt requires [uv](https://docs.astral.sh/uv/getting-started/installation/) to be installed ### Using i.jpillora.com (recommended) ``` bash curl https://i.jpillora.com/waylonwalker/krayt | bash ``` ### Direct install script ``` bash curl -fsSL https://github.com/waylonwalker/krayt/releases/download/v{version}/install.sh | bash ``` ### Manual download You can also manually download the archive for your platform from the releases page: - [x86_64-unknown-linux-gnu](https://github.com/waylonwalker/krayt/releases/download/v{version}/krayt-{version}-x86_64-unknown-linux-gnu.tar.gz) - [aarch64-unknown-linux-gnu](https://github.com/waylonwalker/krayt/releases/download/v{version}/krayt-{version}-aarch64-unknown-linux-gnu.tar.gz)""" # Get help output for main command and all subcommands try: help_outputs = [] # Get main help output main_help = subprocess.check_output( ["./krayt.py", "--help"], stderr=subprocess.STDOUT, universal_newlines=True, ) help_outputs.append(("Main Command", main_help)) # Get help for each subcommand subcommands = ["create", "exec", "clean", "version"] for cmd in subcommands: cmd_help = subprocess.check_output( ["./krayt.py", cmd, "--help"], stderr=subprocess.STDOUT, universal_newlines=True, ) help_outputs.append((f"Subcommand: {cmd}", cmd_help)) # Format all help outputs help_text = "\n\n".join( f"### {title}\n\n``` bash\n{output}```" for title, output in help_outputs ) return f"{section.strip()}\n\n{install_instructions.format(version=version)}\n\n## Command Line Usage\n\n{help_text}" except subprocess.CalledProcessError as e: return f"{section.strip()}\n\n{install_instructions.format(version=version)}\n\n## Command Line Usage\n\nError getting help: {e.output}" return None if __name__ == "__main__": if len(sys.argv) != 2: print("Usage: get_release_notes.py VERSION", file=sys.stderr) sys.exit(1) version = sys.argv[1] notes = get_release_notes(version) if notes: print(notes) else: print(f"Error: No release notes found for version {version}", file=sys.stderr) sys.exit(1)