Add signed runtime distribution pipeline
Dependency Audit / dependency-audit (push) Successful in 1m39s
Deployment Installer / deployment-installer (push) Successful in 5s
Security Audit / security-audit (push) Successful in 10m3s

This commit is contained in:
2026-08-03 00:54:06 +02:00
parent 29acb55b7c
commit 43380eb068
24 changed files with 3371 additions and 54 deletions
+33
View File
@@ -77,6 +77,9 @@ class ReleaseConfig:
version: str
manifest_url: str
manifest_sha256: str
manifest_keyring_sha256: str
manifest_signature_key_id: str
composition_sha256: str
api_image: str
web_image: str
@@ -178,6 +181,9 @@ def default_spec(
"version": version,
"manifest_url": manifest_url,
"manifest_sha256": manifest_sha256,
"manifest_keyring_sha256": "",
"manifest_signature_key_id": "",
"composition_sha256": "",
"api_image": api_image,
"web_image": web_image,
},
@@ -314,6 +320,9 @@ def _release(raw: object) -> ReleaseConfig:
"version",
"manifest_url",
"manifest_sha256",
"manifest_keyring_sha256",
"manifest_signature_key_id",
"composition_sha256",
"api_image",
"web_image",
},
@@ -335,6 +344,27 @@ def _release(raw: object) -> ReleaseConfig:
raise SpecError(
"release.manifest_sha256 must be a lowercase SHA-256 hex digest"
)
manifest_keyring_sha256 = _optional_string(
value, "manifest_keyring_sha256"
).lower()
if manifest_keyring_sha256 and not SHA256_PATTERN.fullmatch(
manifest_keyring_sha256
):
raise SpecError(
"release.manifest_keyring_sha256 must be a lowercase SHA-256 hex digest"
)
manifest_signature_key_id = _optional_string(
value, "manifest_signature_key_id"
)
if manifest_signature_key_id and not re.fullmatch(
r"[A-Za-z0-9][A-Za-z0-9._:-]{0,127}", manifest_signature_key_id
):
raise SpecError("release.manifest_signature_key_id is invalid")
composition_sha256 = _optional_string(value, "composition_sha256").lower()
if composition_sha256 and not SHA256_PATTERN.fullmatch(composition_sha256):
raise SpecError(
"release.composition_sha256 must be a lowercase SHA-256 hex digest"
)
api_image = _image(_string(value, "api_image"), "release.api_image")
web_image = _image(_string(value, "web_image"), "release.web_image")
return ReleaseConfig(
@@ -342,6 +372,9 @@ def _release(raw: object) -> ReleaseConfig:
version=version,
manifest_url=manifest_url,
manifest_sha256=manifest_sha256,
manifest_keyring_sha256=manifest_keyring_sha256,
manifest_signature_key_id=manifest_signature_key_id,
composition_sha256=composition_sha256,
api_image=api_image,
web_image=web_image,
)