Synchronize public module directory publication
Dependency Audit / dependency-audit (push) Successful in 1m50s
Deployment Installer / deployment-installer (push) Successful in 6s
Security Audit / security-audit (push) Successful in 11m58s

This commit is contained in:
2026-08-06 22:42:25 +02:00
parent 09046e6e62
commit 78811f7f6e
8 changed files with 197 additions and 10 deletions
+29 -2
View File
@@ -28,6 +28,7 @@ from govoplan_release.catalog_entry_synthesis import ( # noqa: E402
synthesize_repository_catalog_entries,
validate_initial_entry_closure,
)
from govoplan_release.module_directory import write_module_directory # noqa: E402
SHA256 = re.compile(r"^[0-9a-f]{64}$")
@@ -44,6 +45,11 @@ def main() -> int:
parser.add_argument("--expires-days", type=int, default=90)
parser.add_argument("--catalog-output", type=Path, required=True)
parser.add_argument("--keyring-output", type=Path)
parser.add_argument(
"--module-directory-output",
type=Path,
help="Catalog v1 root under which the browsable modules directory is synchronized.",
)
parser.add_argument(
"--catalog-signing-key",
action="append",
@@ -84,17 +90,32 @@ def main() -> int:
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text(json.dumps(catalog, indent=2, sort_keys=True) + "\n", encoding="utf-8")
keyring = _keyring(signing_keys=signing_keys, generated_at=generated_at)
if args.keyring_output is not None:
keyring_output = args.keyring_output.expanduser()
keyring_output.parent.mkdir(parents=True, exist_ok=True)
keyring_output.write_text(
json.dumps(_keyring(signing_keys=signing_keys, generated_at=generated_at), indent=2, sort_keys=True) + "\n",
json.dumps(keyring, indent=2, sort_keys=True) + "\n",
encoding="utf-8",
)
module_directory_files: tuple[Path, ...] = ()
if args.module_directory_output is not None:
module_directory_files = write_module_directory(
catalog_payload=catalog,
keyring_payload=keyring,
output_root=args.module_directory_output.expanduser(),
channel=args.channel,
public_base_url=args.public_base_url,
prune=True,
)
print(f"catalog={output}")
if args.keyring_output is not None:
print(f"keyring={args.keyring_output.expanduser()}")
if args.module_directory_output is not None:
print(f"module_directory={args.module_directory_output.expanduser()}")
print(f"module_directory_files={len(module_directory_files)}")
print(f"channel={args.channel}")
print(f"sequence={sequence}")
print(f"version={version}")
@@ -164,11 +185,17 @@ def _catalog_payload(
for entry in entries:
python_ref = _python_ref(name, python_artifact)
entry["python_ref"] = python_ref
repository_url = f"https://git.add-ideas.de/GovOPlaN/{repository}"
source_commit = str(package["commit"])
entry["source"] = {
"repository": repository,
"tag": package["tag"],
"commit": package["commit"],
"commit": source_commit,
"repository_url": repository_url,
"revision_url": f"{repository_url}/commit/{source_commit}",
}
entry["availability"] = "available"
entry["release_notes_url"] = f"{repository_url}/releases/tag/{package['tag']}"
integrity: dict[str, object] = {
"python": _artifact_integrity(python_artifact, ref=python_ref),
}