55 types :
66 - published
77 workflow_dispatch :
8+ inputs :
9+ use_latest_tag :
10+ description : ' Tag as latest (only applies when running from a tag)'
11+ required : false
12+ type : boolean
13+ default : false
814
915env :
1016 REGISTRY : ghcr.io
@@ -44,26 +50,54 @@ jobs:
4450 if [ "${{ github.event_name }}" == "release" ]; then
4551 RELEASE_VERSION="${{ github.event.release.tag_name }}"
4652 echo "VERSION=${RELEASE_VERSION}" >> $GITHUB_ENV
53+ echo "IS_TAG=true" >> $GITHUB_ENV
4754 elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
48- BRANCH_NAME="${{ github.ref_name }}"
49- echo "VERSION=${BRANCH_NAME}" >> $GITHUB_ENV
55+ REF_NAME="${{ github.ref_name }}"
56+ echo "VERSION=${REF_NAME}" >> $GITHUB_ENV
57+
58+ # Check if we're running from a tag (version tag pattern)
59+ if [[ "${REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+.*$ ]]; then
60+ echo "IS_TAG=true" >> $GITHUB_ENV
61+ echo "📋 Running from tag: ${REF_NAME}"
62+ else
63+ echo "IS_TAG=false" >> $GITHUB_ENV
64+ echo "📋 Running from branch: ${REF_NAME}"
65+ fi
5066 fi
5167
5268 - name : Generate Docker tags
5369 run : |
5470 BASE_TAG="${{ env.REGISTRY }}/${{ env.LOWER_CASE_REPO_NAME }}:${{ env.VERSION }}"
5571
72+ # Determine if we should add latest tag
73+ ADD_LATEST=false
74+
5675 if [ "${{ github.event_name }}" == "release" ]; then
57- # For releases: add both version tag and latest
76+ # Always add latest for published releases
77+ ADD_LATEST=true
78+ TRIGGER_INFO="published release"
79+ elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
80+ if [ "${{ env.IS_TAG }}" == "true" ] && [ "${{ github.event.inputs.use_latest_tag }}" == "true" ]; then
81+ # Add latest for manual dispatch from tag when requested
82+ ADD_LATEST=true
83+ TRIGGER_INFO="manual dispatch from tag (with latest)"
84+ elif [ "${{ env.IS_TAG }}" == "true" ]; then
85+ TRIGGER_INFO="manual dispatch from tag (no latest)"
86+ else
87+ TRIGGER_INFO="manual dispatch from branch (no latest)"
88+ fi
89+ fi
90+
91+ if [ "$ADD_LATEST" == "true" ]; then
5892 TAGS="${BASE_TAG},${{ env.REGISTRY }}/${{ env.LOWER_CASE_REPO_NAME }}:latest"
59- echo "DOCKER_TAGS=${TAGS}" >> $GITHUB_ENV
60- echo "TAGGING_MODE=release (with latest)" >> $GITHUB_ENV
93+ echo "WILL_TAG_LATEST=true" >> $GITHUB_ENV
6194 else
62- # For manual dispatch: only version tag (branch name)
6395 TAGS="${BASE_TAG}"
64- echo "DOCKER_TAGS=${TAGS}" >> $GITHUB_ENV
65- echo "TAGGING_MODE=manual dispatch (no latest)" >> $GITHUB_ENV
96+ echo "WILL_TAG_LATEST=false" >> $GITHUB_ENV
6697 fi
98+
99+ echo "DOCKER_TAGS=${TAGS}" >> $GITHUB_ENV
100+ echo "TRIGGER_INFO=${TRIGGER_INFO}" >> $GITHUB_ENV
67101
68102 - name : Extract metadata (tags, labels) for Docker
69103 id : meta
73107 tags : |
74108 type=ref,event=branch
75109 type=ref,event=tag
76- type=raw,value=latest,enable=${{ github.event_name == 'release ' }}
110+ type=raw,value=latest,enable=${{ env.WILL_TAG_LATEST == 'true ' }}
77111
78112 - name : Build and push Docker image
79113 uses : docker/build-push-action@v5
@@ -90,14 +124,13 @@ jobs:
90124 run : |
91125 echo "✅ Docker images built and pushed successfully!"
92126 echo "🐋 Images built:"
93- if [ "${{ github.event_name }}" == "release" ]; then
94- echo " - ${{ env.REGISTRY }}/${{ env.LOWER_CASE_REPO_NAME }}:${{ env.VERSION }}"
127+ echo " - ${{ env.REGISTRY }}/${{ env.LOWER_CASE_REPO_NAME }}:${{ env.VERSION }}"
128+
129+ if [ "${{ env.WILL_TAG_LATEST }}" == "true" ]; then
95130 echo " - ${{ env.REGISTRY }}/${{ env.LOWER_CASE_REPO_NAME }}:latest"
96- echo "📝 Triggered by release: ${{ github.event.release.tag_name }}"
97- echo "🏷️ Tagged as 'latest' because this is a published release"
98- else
99- echo " - ${{ env.REGISTRY }}/${{ env.LOWER_CASE_REPO_NAME }}:${{ env.VERSION }}"
100- echo "📝 Triggered by manual workflow dispatch on branch: ${{ github.ref_name }}"
101- echo "🏷️ No 'latest' tag for manual builds"
102131 fi
103- echo "🔧 Tagging mode: ${{ env.TAGGING_MODE }}"
132+
133+ echo "📝 Trigger: ${{ env.TRIGGER_INFO }}"
134+ echo "🏷️ Version: ${{ env.VERSION }}"
135+ echo "🏷️ Is tag: ${{ env.IS_TAG }}"
136+ echo "🏷️ Tagged as latest: ${{ env.WILL_TAG_LATEST }}"
0 commit comments