Repository navigation
Build each architecture on a native runner instead of QEMU - #107
Merged
Merged
Conversation
The arm64 images were built under QEMU on an amd64 runner. The ZoneMinder install alone took about 11 minutes there, and only amd64 ran the smoke test. images.yml now has three jobs: - prep resolves the ZoneMinder version and tags once per channel, so both architectures install the same build. - build runs per channel and architecture on ubuntu-24.04 or ubuntu-24.04-arm. It runs the smoke test, then on master pushes zm, zm-es and pyzm-serve by digest. - merge joins the two digests into multi-arch indexes under every tag in both repos. It runs even if the other channel failed, so a broken nightly doesn't hold back the release tags. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKoPm5qySMSsCYJmCo8r2J
zmrepo builds each architecture's nightly separately. On 25 Oct, build .212 existed for amd64 but not arm64, so the arm64 job couldn't install the version prep chose. zm-version.sh now accepts a comma-separated list of architectures. It returns the newest version present for all of them, and a ZM_PIN that apt can install on each. The prep job uses amd64,arm64. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CKoPm5qySMSsCYJmCo8r2J
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The arm64 images were built under QEMU on an amd64 runner. The ZoneMinder install step alone took about 11 minutes there, and only amd64 ran the smoke test. GitHub's free
ubuntu-24.04-armrunners remove both problems.images.ymlnow has three jobs, following Docker's multi-runner pattern:tests/smoke.shnatively, so arm64 is now smoke-tested too. On master it then pusheszm,zm-esandpyzm-serveuntagged, by digest. Each architecture has its own build cache scope.zoneminder/zoneminderandzoneminderhq/zoneminder. It runs even if the other channel failed, so a broken nightly doesn't hold backlatest. If a channel is missing a digest, its own merge fails.The QEMU setup step is gone. #106's daily no-cache rebuild stays, and it now costs about a minute on arm64 instead of 11.
Tested:
zoneminderhqcopy holds both architectures with the right image in each. With a digest removed, the merge fails with the error message.workflow_dispatchwithtest_push, which pushes to the-testrepos.Fix found by the first run: the arm64 nightly job failed. zmrepo had nightly build
.212for amd64 but not yet for arm64, because each architecture's nightly is built separately. The old QEMU push would have failed the same way.zm-version.shnow acceptsamd64,arm64and returns the newest build that both have (here.210), plus the apt pin. I tested it under dash for nightly and release on trixie and noble, plus an architecture zmrepo doesn't have, which fails with a clear message.Pushing to Docker Hub also leaves untagged per-arch manifests in
zoneminder/zoneminderandzoneminder/pyzm-serve, because the merged tags point at them. This is the standard pattern.🤖 Generated with Claude Code
https://claude.ai/code/session_01CKoPm5qySMSsCYJmCo8r2J