Docker Release Runbook
Last updated: 2026-02-21
Scope
This runbook covers two independent GHCR publish lanes:
- Main API image
- tag format:
vX.Y.Z - moving tag:
latest - source Dockerfile:
/Users/lucio/Desktop/Aionis/Dockerfile - workflow:
/Users/lucio/Desktop/Aionis/.github/workflows/docker-publish.yml
- Standalone image
- tag format:
standalone-vX.Y.Z - moving tag:
standalone-latest - source Dockerfile:
/Users/lucio/Desktop/Aionis/Dockerfile.standalone - workflow:
/Users/lucio/Desktop/Aionis/.github/workflows/docker-standalone-publish.yml
Default image repo: ghcr.io/<owner>/aionis Production repo example: ghcr.io/cognary/aionis
Prerequisites
npm run buildpasses.- Core gate/health checks are green for target release.
- You have GHCR push permission.
- For local publish, set credentials:
GHCR_USERNAME(orGITHUB_ACTOR)GHCR_TOKEN(orGITHUB_TOKEN)
- For Actions publish, set repository/org secrets:
GHCR_USERNAMEGHCR_TOKEN(write:packagesscope)
Local publish commands
Main image dry run:
bash
cd /Users/lucio/Desktop/Aionis
npm run docker:publish:ghcr:dry-runStandalone image dry run:
bash
cd /Users/lucio/Desktop/Aionis
TAG=standalone-v0.1.8 npm run docker:publish:standalone:ghcr:dry-runMain image push:
bash
cd /Users/lucio/Desktop/Aionis
export GHCR_USERNAME=<your_github_user>
export GHCR_TOKEN=<your_ghcr_token>
IMAGE_REPO=ghcr.io/<owner>/aionis \
TAG=v0.1.8 \
PLATFORMS=linux/amd64,linux/arm64 \
PUBLISH_LATEST=true \
npm run docker:publish:ghcrStandalone image push:
bash
cd /Users/lucio/Desktop/Aionis
export GHCR_USERNAME=<your_github_user>
export GHCR_TOKEN=<your_ghcr_token>
IMAGE_REPO=ghcr.io/<owner>/aionis \
TAG=standalone-v0.1.8 \
PLATFORMS=linux/amd64,linux/arm64 \
PUBLISH_LATEST=true \
npm run docker:publish:standalone:ghcrGitHub Actions publish
Main lane auto trigger:
bash
git tag docker-v0.1.8
git push origin docker-v0.1.8Standalone lane auto trigger:
bash
git tag standalone-v0.1.8
git push origin standalone-v0.1.8You can also run each workflow via workflow_dispatch.
Credential behavior in both workflows:
- Prefer
GHCR_USERNAME+GHCR_TOKENsecrets. - Fallback to
$\\{\\{ github.actor \\}\\}+$\\{\\{ secrets.GITHUB_TOKEN \\}\\}. - If fallback gets
403 Forbidden, configure GHCR secrets explicitly.
Verification
Main image:
bash
docker pull ghcr.io/cognary/aionis:v0.1.8
docker pull ghcr.io/cognary/aionis:latest
docker manifest inspect ghcr.io/cognary/aionis:v0.1.8 | headStandalone image:
bash
docker pull ghcr.io/cognary/aionis:standalone-v0.1.8
docker pull ghcr.io/cognary/aionis:standalone-latest
docker manifest inspect ghcr.io/cognary/aionis:standalone-v0.1.8 | headRollback
- Re-point deployments to prior known-good immutable tag.
- Keep bad tag for audit; do not overwrite immutable versions.
- Publish patch version tag and move only floating tags (
latestorstandalone-latest).