Add channel-aware release tooling and updater recovery
This commit is contained in:
75
scripts/generate-manifest.py
Executable file
75
scripts/generate-manifest.py
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/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
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
||||
if str(PROJECT_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
|
||||
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())
|
||||
Reference in New Issue
Block a user