Enable arm64 runtime smoke execution
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user