ci: publish multi-arch image to GHCR + self-host compose#7
Merged
Conversation
A new GitHub Actions workflow builds Stagecue as a multi-arch container
(linux/amd64 + linux/arm64) and pushes it to GitHub Container Registry
on every push to main and on every v*.*.* tag. Adds a separate
docker-compose.yml under deploy/ that pulls the published image so
self-hosters never have to clone the repo.
Workflow (.github/workflows/publish.yml)
- Triggers: push to main → :edge + :sha-<short>; v*.*.* tag → semver
fan-out (:1.2.3, :1.2, :1, :latest) + :sha-<short>; manual dispatch
for testing the pipeline.
- Buildx + QEMU for the two-arch build, GHCR login via the workflow's
built-in GITHUB_TOKEN (packages:write), `type=gha` cache so repeat
builds reuse layers.
- concurrency.group prevents overlapping pushes for the same ref;
cancel-in-progress is off so we don't waste a half-finished
multi-arch build.
Consumer compose (deploy/)
- docker-compose.yml references ghcr.io/expertslive/stagecue:${STAGECUE_TAG:-latest}
(no build context), restarts the app + db `unless-stopped`, persists
uploads + sqldata to named volumes, and exposes only the app port —
the SQL Server port stays inside the network.
- .env.example documents the four env vars: SA_PASSWORD, APP_BASE_URL
(required) plus STAGECUE_TAG and APP_PORT (optional).
- README.md walks through curl-based quick start, image-tag reference,
upgrade steps, and the most common failure modes.
Root README
- Adds a "Self-host from a pre-built image" section above the existing
build-from-source instructions, linking to deploy/README.md.
- Renames the build-from-source section header to make the split
obvious.
Verification
- Workflow YAML and compose schema both validate.
- Dockerfile unchanged; image already builds locally via the dev
compose.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
publish-imageworkflow builds Stagecue as a multi-arch container (linux/amd64+linux/arm64) and pushes toghcr.io/expertslive/stagecueon every push tomain(:edge+:sha-<short>) and on everyv*.*.*tag (full semver fan-out +:latest). Uses Buildx + QEMU, the workflow's built-inGITHUB_TOKEN, and the GitHub Actions cache backend.deploy/docker-compose.ymlthat pulls the published image instead of building locally — self-hosters cancurltwo files anddocker compose upwithout ever cloning the repo. App and SQL Server restartunless-stopped, uploads + db persist on named volumes, SQL port stays inside the network.deploy/.env.exampleanddeploy/README.mdcovering required env vars (SA_PASSWORD,APP_BASE_URL), optional pinning (STAGECUE_TAG,APP_PORT), image-tag reference, upgrade steps, and the common failure modes.deploy/README.md.Test plan
publish-imageworkflow onmainand producesghcr.io/expertslive/stagecue:edgeplus:sha-<short>. Verify both tags appear on https://github.com/expertslive/stagecue/pkgs/container/stagecue.deploy/README.mdand confirm the stack comes up and the app is reachable onAPP_BASE_URL.v0.1.0-rc1) and confirm the semver fan-out tags (0.1.0-rc1andlatestif non-prerelease) appear.linux/arm64variant on Apple Silicon and run it.🤖 Generated with Claude Code