feat(deploy): build+push release image on every merge to main
Was tag-push-or-manual-dispatch only. Adds a push:main trigger so main stays continuously deployable without needing a version tag for every change. Also fixes a real bug this surfaced while testing the D17 registry-TLS fix: the old tag logic unconditionally retagged :latest on every run, including manual test dispatches off a feature branch — one such dispatch, done while verifying the previous commit, silently overwrote :latest with a feature-branch build. Tag resolution now only moves :latest on an actual main push or a version tag; a manual dispatch gets its own manual-<timestamp>-<sha> tag and leaves :latest alone. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R2ZKeWkZV7ehf7fivrAkkG
This commit is contained in:
@@ -2,6 +2,7 @@ name: Release image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags: ['v*']
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -36,20 +37,36 @@ jobs:
|
||||
username: BBergle
|
||||
password: ${{ secrets.REGISTRY_TOKEN }}
|
||||
|
||||
- name: Resolve image tag
|
||||
# `latest` should only ever mean "what's actually on main" (or a tagged release) — not
|
||||
# whatever a manual test dispatch off some feature branch happened to build. Learned the
|
||||
# hard way: a manual dispatch off this very branch, while verifying the fix above, silently
|
||||
# overwrote `latest` under the old unconditional-tags logic. Building the full tag list here
|
||||
# in bash (rather than a conditional expression inline in the tags: block below) means there's
|
||||
# never a blank line for build-push-action to choke on when latest isn't included.
|
||||
- name: Resolve image tags
|
||||
id: tag
|
||||
run: |
|
||||
IMG=registry.bbergle.com:9537/bbergle/bike-app
|
||||
if [ "${{ gitea.ref_type }}" = "tag" ]; then
|
||||
echo "value=${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT"
|
||||
VALUE="${{ gitea.ref_name }}"
|
||||
UPDATE_LATEST=true
|
||||
elif [ "${{ gitea.ref_name }}" = "main" ] && [ "${{ gitea.event_name }}" = "push" ]; then
|
||||
VALUE="main-$(git rev-parse --short HEAD)"
|
||||
UPDATE_LATEST=true
|
||||
else
|
||||
echo "value=manual-$(date -u +%Y%m%d%H%M%S)" >> "$GITHUB_OUTPUT"
|
||||
VALUE="manual-$(date -u +%Y%m%d%H%M%S)-$(git rev-parse --short HEAD)"
|
||||
UPDATE_LATEST=false
|
||||
fi
|
||||
{
|
||||
echo "tags<<EOF"
|
||||
echo "$IMG:$VALUE"
|
||||
[ "$UPDATE_LATEST" = true ] && echo "$IMG:latest"
|
||||
echo "EOF"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
file: Dockerfile
|
||||
push: true
|
||||
tags: |
|
||||
registry.bbergle.com:9537/bbergle/bike-app:latest
|
||||
registry.bbergle.com:9537/bbergle/bike-app:${{ steps.tag.outputs.value }}
|
||||
tags: ${{ steps.tag.outputs.tags }}
|
||||
|
||||
Reference in New Issue
Block a user