#!/usr/bin/env python3 """Generate the external schema-1 release manifest for an existing archive.""" from __future__ import annotations import argparse from pathlib import Path import sys if __package__: from .repository_paths import ensure_project_imports else: from repository_paths import ensure_project_imports ensure_project_imports() from scripts.release_lib import ( # noqa: E402 ReleaseToolError, generate_manifest, load_config, ) def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--version", required=True) parser.add_argument("--channel", required=True) parser.add_argument("--tag", required=True) parser.add_argument("--commit", required=True) parser.add_argument("--file-root", required=True, type=Path) parser.add_argument("--archive", required=True, type=Path) parser.add_argument("--output", required=True, type=Path) parser.add_argument("--repository-url", required=True) parser.add_argument("--published-at", required=True) parser.add_argument("--release-title") parser.add_argument("--release-summary-file", type=Path) parser.add_argument("--release-notes-url") parser.add_argument("--archive-layout", choices=("flat", "wrapped")) parser.add_argument("--minimum-updater-version") return parser def main() -> int: arguments = build_parser().parse_args() release_notes = "" if arguments.release_summary_file is not None: try: release_notes = arguments.release_summary_file.read_text(encoding="utf-8") except (OSError, UnicodeError) as exc: print(f"Manifest generation failed: {exc}", file=sys.stderr) return 1 try: generate_manifest( arguments.output, config=load_config(), file_root=arguments.file_root, archive=arguments.archive, version=arguments.version, channel=arguments.channel, tag=arguments.tag, commit=arguments.commit, repository_url=arguments.repository_url, release_timestamp=arguments.published_at, release_notes=release_notes, release_title=arguments.release_title, release_notes_url=arguments.release_notes_url, archive_layout=arguments.archive_layout, minimum_updater_version=arguments.minimum_updater_version, ) except (OSError, ValueError, ReleaseToolError) as exc: print(f"Manifest generation failed: {exc}", file=sys.stderr) return 1 print(arguments.output) return 0 if __name__ == "__main__": raise SystemExit(main())