ci: multi-arch (amd64+arm64) publish for whp-default #2

Merged
jknapp merged 1 commits from feat/multiarch-publish into main 2026-11-12 02:02:59 +00:00
Owner

What

Multi-arch (linux/amd64 + linux/arm64) publishing for whp-default, applying the template proven in haproxy-manager-base PR #17 (run 5159). Plan: whp repo docs/arm64/IMAGE-PIPELINE-PLAN.md sections 1.1 / 4.1 / 5 (T7).

  • One job on the x86 runner: amd64 + arm64 (QEMU, already set up in this workflow) each pushed by digest to the existing registry only (Gitea; no new registry/secret), then scripts/assemble-multiarch-index.sh creates :latest.
  • The arm64 step is continue-on-error; its digest comes only from this run's step output, so a failed arm64 leg publishes the usual amd64-only :latest and a stale arm64 is never re-attached.
  • Only one tag/variant exists here (:latest); covered.
  • No Dockerfile change: httpd:alpine publishes arm64; the Dockerfile only uses sed and COPY.
  • Added workflow_dispatch. Triggers otherwise unchanged (push to the default branch only; no schedule; a push to this branch does not publish).
  • scripts/test-assemble-multiarch-index.py: the template's script tests plus workflow-wiring tests (triggers, arm64 non-fatal, push-by-digest, identical build args, single registry/tag). Run: python3 scripts/test-assemble-multiarch-index.py.

Owner note: merge and first run

Merging to the default branch itself triggers a publish (push trigger). Merge with [skip ci] in the merge commit title, then run workflow_dispatch manually. Before the first run record rollback digests:

docker buildx imagetools inspect repo.anhonesthost.net/cloud-hosting-platform/whp-default:latest   # note the index Digest and the linux/amd64 manifest digest

Rollback: re-tag the recorded amd64 manifest digest as latest (docker buildx imagetools create -t repo.anhonesthost.net/cloud-hosting-platform/whp-default:latest repo.anhonesthost.net/cloud-hosting-platform/whp-default@sha256:<recorded>), or revert this PR. Not verified locally: real Gitea/GHCR push of the index, CI runner timing.

🤖 Generated with Claude Code

https://claude.ai/code/session_0185ukXjXyosSkunDsdWz3mb

## What Multi-arch (linux/amd64 + linux/arm64) publishing for `whp-default`, applying the template proven in haproxy-manager-base PR #17 (run 5159). Plan: whp repo `docs/arm64/IMAGE-PIPELINE-PLAN.md` sections 1.1 / 4.1 / 5 (T7). - One job on the x86 runner: amd64 + arm64 (QEMU, already set up in this workflow) each pushed **by digest** to the existing registry only (Gitea; no new registry/secret), then `scripts/assemble-multiarch-index.sh` creates `:latest`. - The arm64 step is `continue-on-error`; its digest comes only from this run's step output, so a failed arm64 leg publishes the usual amd64-only `:latest` and a stale arm64 is never re-attached. - Only one tag/variant exists here (`:latest`); covered. - No Dockerfile change: `httpd:alpine` publishes arm64; the Dockerfile only uses `sed` and `COPY`. - Added `workflow_dispatch`. Triggers otherwise unchanged (push to the default branch only; no schedule; a push to this branch does not publish). - `scripts/test-assemble-multiarch-index.py`: the template's script tests plus workflow-wiring tests (triggers, arm64 non-fatal, push-by-digest, identical build args, single registry/tag). Run: `python3 scripts/test-assemble-multiarch-index.py`. ## Owner note: merge and first run Merging to the default branch **itself triggers a publish** (push trigger). Merge with `[skip ci]` in the merge commit title, then run `workflow_dispatch` manually. Before the first run record rollback digests: ``` docker buildx imagetools inspect repo.anhonesthost.net/cloud-hosting-platform/whp-default:latest # note the index Digest and the linux/amd64 manifest digest ``` Rollback: re-tag the recorded amd64 manifest digest as latest (`docker buildx imagetools create -t repo.anhonesthost.net/cloud-hosting-platform/whp-default:latest repo.anhonesthost.net/cloud-hosting-platform/whp-default@sha256:<recorded>`), or revert this PR. Not verified locally: real Gitea/GHCR push of the index, CI runner timing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_0185ukXjXyosSkunDsdWz3mb
jknapp added 1 commit 2026-11-12 01:27:32 +00:00
One job on the trusted x86 runner builds amd64 and arm64 (QEMU), pushes each
platform by digest, then scripts/assemble-multiarch-index.sh creates :latest.
arm64 is continue-on-error: a failed arm64 leg publishes the usual amd64-only
tag. No Dockerfile change (both base images publish arm64). Adds
workflow_dispatch and an offline test for the assemble script and workflow
wiring.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0185ukXjXyosSkunDsdWz3mb
jknapp merged commit 156e9eae8b into main 2026-11-12 02:02:59 +00:00
jknapp deleted branch feat/multiarch-publish 2026-11-12 02:02:59 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cloud-hosting-platform/whp-default-container#2