ci: build and push multi-arch docker image on merge to main #4

Merged
w33ble merged 2 commits from ci/docker-image into main 2026-09-02 11:40:00 -06:00
Collaborator

Adds a Forgejo Actions workflow that runs on pushes to main and publishes git.w33ble.com/w33ble/pipit:latest for linux/amd64 + linux/arm64.

  • follows the lagom pattern: cross-compile Go (amd64/arm64) outside Docker and build the client bundle once with bun, then buildx a thin final image (Dockerfile.ci) with --platform linux/amd64,linux/arm64 --push
  • Dockerfile.ci has no RUN steps — arm64 layers are assembled via QEMU, which cannot execute apk; alpine:3.21 ships its own CA bundle
  • final image matches the source-build Dockerfile (non-root 1000:1000, same env/expose)

Checks: cross-compile, client build, multi-arch buildx build, and an amd64 container smoke test (/api/health ok, UI 200) all pass locally.

Requires repo secrets REGISTRY_USER and REGISTRY_TOKEN (same names as lagom).

Adds a Forgejo Actions workflow that runs on pushes to `main` and publishes `git.w33ble.com/w33ble/pipit:latest` for linux/amd64 + linux/arm64. - follows the lagom pattern: cross-compile Go (amd64/arm64) outside Docker and build the client bundle once with bun, then buildx a thin final image (`Dockerfile.ci`) with `--platform linux/amd64,linux/arm64 --push` - `Dockerfile.ci` has no RUN steps — arm64 layers are assembled via QEMU, which cannot execute `apk`; alpine:3.21 ships its own CA bundle - final image matches the source-build Dockerfile (non-root 1000:1000, same env/expose) Checks: cross-compile, client build, multi-arch buildx build, and an amd64 container smoke test (`/api/health` ok, UI 200) all pass locally. Requires repo secrets `REGISTRY_USER` and `REGISTRY_TOKEN` (same names as lagom).
ci: build and push multi-arch docker image on merge to main
All checks were successful
test / client (pull_request) Successful in 26s
test / server (pull_request) Successful in 1m22s
65f15a799a
w33ble requested changes 2026-09-02 11:36:37 -06:00
Dismissed
@ -0,0 +8,4 @@
docker:
runs-on: ubuntu-latest
steps:
- uses: https://data.forgejo.org/actions/checkout@v7
Owner

you don't need the full data.forgejo.org url, you can just use 'actions/checkout', 'actions/setup-go', etc.

you don't need the full data.forgejo.org url, you can just use 'actions/checkout', 'actions/setup-go', etc.
Dockerfile.ci Outdated
@ -0,0 +6,4 @@
# No RUN steps: arm64 layers are emulated via QEMU, which cannot execute apk.
# Alpine ships its own CA bundle at /etc/ssl/certs/ca-certificates.crt.
FROM alpine:3.21
Owner

lets just use alpine:latest

lets just use alpine:latest
ci: address review feedback
All checks were successful
test / client (pull_request) Successful in 27s
test / server (pull_request) Successful in 48s
e6e1d87fe2
w33ble approved these changes 2026-09-02 11:39:24 -06:00
w33ble merged commit ec54b93667 into main 2026-09-02 11:40:00 -06:00
w33ble deleted branch ci/docker-image 2026-09-02 11:40:00 -06:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
w33ble/pipit!4
No description provided.