test(v2r1c6): cover release controller contracts

This commit is contained in:
chatgpt-final-release-writer
2026-08-07 02:22:42 +08:00
parent 60bb95d48c
commit 3a4c748124
@@ -0,0 +1,56 @@
from __future__ import annotations
import argparse
import json
from pathlib import Path
from .manifest import (
ManifestValidationError,
build_approval_request,
validate_release_request,
validate_source_manifest,
)
def main() -> int:
parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest="command", required=True)
source = sub.add_parser("validate-source")
source.add_argument("manifest", type=Path)
source.add_argument("--base-oid", required=True)
release = sub.add_parser("validate-release")
release.add_argument("source_manifest", type=Path)
release.add_argument("request", type=Path)
release.add_argument("--main-oid")
approval = sub.add_parser("approval-request")
approval.add_argument("source_manifest", type=Path)
approval.add_argument("--target-oid", required=True)
approval.add_argument("--artifact-uri", required=True)
approval.add_argument("--artifact-sha256", required=True)
approval.add_argument("--artifact-size", required=True, type=int)
approval.add_argument("--evidence-closure-oid", required=True)
approval.add_argument("--rollback-metadata", required=True)
approval.add_argument("--current-tag-oid", required=True)
args = parser.parse_args()
try:
if args.command == "validate-source":
result = validate_source_manifest(args.manifest, args.base_oid)
elif args.command == "validate-release":
source_data = json.loads(args.source_manifest.read_text(encoding="utf-8"))
source = validate_source_manifest(args.source_manifest, source_data["base_oid"])
result = validate_release_request(source, args.request, args.main_oid)
else:
result = build_approval_request(
source_manifest_path=args.source_manifest,
target_oid=args.target_oid,
artifact_uri=args.artifact_uri,
artifact_sha256=args.artifact_sha256,
artifact_size=args.artifact_size,
evidence_closure_oid=args.evidence_closure_oid,
rollback_metadata=args.rollback_metadata,
current_tag_oid=args.current_tag_oid,
)
print(json.dumps(result, sort_keys=True))
return 0
except (ManifestValidationError, OSError, ValueError, KeyError) as exc:
code = exc.code if isinstance(exc, ManifestValidationError) else "VALIDATION_ERROR"