2424 outputs :
2525 version : ${{ steps.version.outputs.version }}
2626 tag : ${{ steps.version.outputs.tag }}
27+ major_minor : ${{ steps.version.outputs.major_minor }}
28+ is_prerelease : ${{ steps.version.outputs.is_prerelease }}
2729 steps :
2830 - name : Extract version
2931 id : version
@@ -34,11 +36,27 @@ jobs:
3436 if [ "$EVENT_NAME" = "workflow_dispatch" ]; then
3537 echo "tag=" >> "$GITHUB_OUTPUT"
3638 echo "version=manual-${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
39+ echo "major_minor=" >> "$GITHUB_OUTPUT"
40+ echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
3741 exit 0
3842 fi
3943
44+ if [[ ! "$REF_NAME" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)(-rc\.[0-9]+)?$ ]]; then
45+ echo "Unsupported release tag format: $REF_NAME" >&2
46+ exit 1
47+ fi
48+
49+ version="${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
50+ major_minor="${BASH_REMATCH[1]%.*}"
51+ is_prerelease=false
52+ if [ -n "${BASH_REMATCH[2]}" ]; then
53+ is_prerelease=true
54+ fi
55+
4056 echo "tag=${REF_NAME}" >> "$GITHUB_OUTPUT"
41- echo "version=${REF_NAME#v}" >> "$GITHUB_OUTPUT"
57+ echo "version=${version}" >> "$GITHUB_OUTPUT"
58+ echo "major_minor=${major_minor}" >> "$GITHUB_OUTPUT"
59+ echo "is_prerelease=${is_prerelease}" >> "$GITHUB_OUTPUT"
4260
4361 build-frontend :
4462 name : Build Frontend
@@ -226,6 +244,7 @@ jobs:
226244 tag_name : ${{ needs.prepare.outputs.tag }}
227245 name : ${{ needs.prepare.outputs.tag }}
228246 generate_release_notes : true
247+ prerelease : ${{ needs.prepare.outputs.is_prerelease == 'true' }}
229248 files : artifacts/*
230249
231250 build-push :
@@ -301,7 +320,7 @@ jobs:
301320 retention-days : 1
302321
303322 merge-images :
304- name : Publish Stable Image Tags
323+ name : Publish Release Image Tags
305324 needs : [prepare, build-push]
306325 if : github.event_name != 'workflow_dispatch'
307326 runs-on : ubuntu-latest
@@ -336,17 +355,28 @@ jobs:
336355 working-directory : /tmp/digests
337356 run : |
338357 version="${{ needs.prepare.outputs.version }}"
339- major_minor=$(echo "$version" | cut -d. -f1,2)
358+ if [ "${{ needs.prepare.outputs.is_prerelease }}" = "true" ]; then
359+ docker buildx imagetools create \
360+ -t "neosmemo/memos:${version}" \
361+ -t "ghcr.io/usememos/memos:${version}" \
362+ $(printf 'neosmemo/memos@sha256:%s ' *)
363+ exit 0
364+ fi
365+
340366 docker buildx imagetools create \
341367 -t "neosmemo/memos:${version}" \
342- -t "neosmemo/memos:${major_minor}" \
368+ -t "neosmemo/memos:${{ needs.prepare.outputs. major_minor } }" \
343369 -t "neosmemo/memos:stable" \
344370 -t "ghcr.io/usememos/memos:${version}" \
345- -t "ghcr.io/usememos/memos:${major_minor}" \
371+ -t "ghcr.io/usememos/memos:${{ needs.prepare.outputs. major_minor } }" \
346372 -t "ghcr.io/usememos/memos:stable" \
347373 $(printf 'neosmemo/memos@sha256:%s ' *)
348374
349375 - name : Inspect images
350376 run : |
351377 docker buildx imagetools inspect neosmemo/memos:${{ needs.prepare.outputs.version }}
378+ if [ "${{ needs.prepare.outputs.is_prerelease }}" = "true" ]; then
379+ exit 0
380+ fi
381+
352382 docker buildx imagetools inspect neosmemo/memos:stable
0 commit comments