feat(release): build verified full-registry catalog candidates

This commit is contained in:
2026-09-08 02:26:19 +02:00
parent 32fe4b7238
commit 6bcb75f577
13 changed files with 1338 additions and 11 deletions
+31
View File
@@ -21,6 +21,22 @@ def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
subparsers = parser.add_subparsers(dest="command", required=True)
full = subparsers.add_parser("full-registry", help="Build a strict full-profile candidate from verified registry artifacts.")
full.add_argument("--workspace-root", type=Path, default=DEFAULT_WORKSPACE_ROOT)
full.add_argument("--package-set", type=Path, required=True)
full.add_argument("--package-lock", type=Path, required=True)
full.add_argument("--wheelhouse", type=Path, required=True)
full.add_argument("--webui-packages", type=Path, required=True)
full.add_argument("--output-dir", type=Path, required=True)
full.add_argument("--selected-repository", action="append", required=True)
full.add_argument("--catalog-signing-key", action="append", required=True)
full.add_argument("--channel", default="stable")
full.add_argument("--source-remote", default="origin")
full.add_argument("--public-base-url", default="https://govoplan.add-ideas.de")
full.add_argument("--expires-days", type=int, default=90)
full.add_argument("--sequence", type=int)
full.add_argument("--json", action="store_true")
selective = subparsers.add_parser(
"selective", help="Build a signed selective channel catalog candidate."
)
@@ -143,6 +159,21 @@ def main() -> int:
)
args = parser.parse_args()
if args.command == "full-registry":
require_release_runtime_trust()
from govoplan_release.full_catalog import build_full_registry_candidate
result = build_full_registry_candidate(
package_set_path=args.package_set, package_lock_path=args.package_lock,
wheelhouse=args.wheelhouse, webui_packages=args.webui_packages,
output_dir=args.output_dir, selected_repositories=tuple(args.selected_repository),
signing_keys=tuple(args.catalog_signing_key), workspace_root=args.workspace_root,
channel=args.channel, source_remote=args.source_remote,
public_base_url=args.public_base_url, expires_days=args.expires_days,
sequence=args.sequence,
)
print(json.dumps(result, indent=2, sort_keys=True))
return 0
if args.command == "selective":
require_release_runtime_trust()
result = build_selective_catalog_candidate(