Enable arm64 runtime smoke execution

This commit is contained in:
2026-08-03 19:11:45 +02:00
parent af27b9fbdf
commit 017aa7a702
3 changed files with 21 additions and 0 deletions
+11
View File
@@ -39,6 +39,10 @@ on:
description: Digest-pinned GreenMail image description: Digest-pinned GreenMail image
required: true required: true
type: string type: string
binfmt_image:
description: Digest-pinned tonistiigi/binfmt image for arm64 CI execution
required: true
type: string
jobs: jobs:
publish-runtime: publish-runtime:
@@ -64,6 +68,7 @@ jobs:
MANAGED_INGRESS_IMAGE: ${{ inputs.managed_ingress_image }} MANAGED_INGRESS_IMAGE: ${{ inputs.managed_ingress_image }}
GARAGE_IMAGE: ${{ inputs.garage_image }} GARAGE_IMAGE: ${{ inputs.garage_image }}
TEST_MAIL_IMAGE: ${{ inputs.test_mail_image }} TEST_MAIL_IMAGE: ${{ inputs.test_mail_image }}
BINFMT_IMAGE: ${{ inputs.binfmt_image }}
run: | run: |
python - <<'PY' python - <<'PY'
import os import os
@@ -82,6 +87,7 @@ jobs:
"MANAGED_INGRESS_IMAGE", "MANAGED_INGRESS_IMAGE",
"GARAGE_IMAGE", "GARAGE_IMAGE",
"TEST_MAIL_IMAGE", "TEST_MAIL_IMAGE",
"BINFMT_IMAGE",
): ):
if image_pattern.fullmatch(os.environ[name]) is None: if image_pattern.fullmatch(os.environ[name]) is None:
raise SystemExit(f"{name} must be an exact sha256 image reference") raise SystemExit(f"{name} must be an exact sha256 image reference")
@@ -213,6 +219,11 @@ jobs:
--index-digest "${REDIS_IMAGE##*@}" \ --index-digest "${REDIS_IMAGE##*@}" \
--index runtime-output/redis-index.json \ --index runtime-output/redis-index.json \
--output runtime-output/redis-metadata.json --output runtime-output/redis-metadata.json
- name: Register arm64 execution for runtime smoke
working-directory: govoplan
env:
BINFMT_IMAGE: ${{ inputs.binfmt_image }}
run: docker run --privileged --rm "$BINFMT_IMAGE" --install arm64
- name: Exercise amd64 and arm64 runtime images - name: Exercise amd64 and arm64 runtime images
working-directory: govoplan working-directory: govoplan
run: | run: |
@@ -160,6 +160,10 @@ as immutable release assets.
PostgreSQL and Redis indexes are resolved to untagged platform-child digests PostgreSQL and Redis indexes are resolved to untagged platform-child digests
before each smoke run. This keeps the evidence architecture-specific and before each smoke run. This keeps the evidence architecture-specific and
avoids retargeting one local Docker tag between incompatible platforms. avoids retargeting one local Docker tag between incompatible platforms.
The CI host registers arm64 execution with an explicitly supplied,
digest-pinned `tonistiigi/binfmt` image immediately before the smoke. This
privileged helper is confined to the release runner and is never part of a
GovOPlaN target deployment or its runtime image set.
The smoke also proves a bounded post-migration table contract and aborts as The smoke also proves a bounded post-migration table contract and aborts as
soon as a required container exits, rather than allowing a dead process to soon as a required container exits, rather than allowing a dead process to
consume the full readiness timeout. consume the full readiness timeout.
+6
View File
@@ -92,6 +92,7 @@ class RuntimeDistributionBuildTests(unittest.TestCase):
"managed_ingress_image", "managed_ingress_image",
"garage_image", "garage_image",
"test_mail_image", "test_mail_image",
"binfmt_image",
): ):
self.assertIn(f"inputs.{input_name}", workflow) self.assertIn(f"inputs.{input_name}", workflow)
@@ -148,6 +149,11 @@ class RuntimeDistributionBuildTests(unittest.TestCase):
self.assertIn("Resolve managed dependency platform images", workflow) self.assertIn("Resolve managed dependency platform images", workflow)
self.assertIn("--postgres-metadata", workflow) self.assertIn("--postgres-metadata", workflow)
self.assertIn("--redis-metadata", workflow) self.assertIn("--redis-metadata", workflow)
self.assertIn("Register arm64 execution for runtime smoke", workflow)
self.assertIn(
'docker run --privileged --rm "$BINFMT_IMAGE" --install arm64',
workflow,
)
self.assertIn("runtime-smoke-amd64.json", workflow) self.assertIn("runtime-smoke-amd64.json", workflow)
self.assertIn("runtime-smoke-arm64.json", workflow) self.assertIn("runtime-smoke-arm64.json", workflow)