1010# Usage:
1111# 1. Go to Actions > Create Release > Run workflow
1212# 2. Enter the tag (e.g., v1.0.0)
13- # 3. Optionally enable "Allow overwriting existing tag" (only for pre-release iterations)
14- # 4. Optionally enable "Create GitHub release"
13+ # 3. Optionally enable "Pre-release" to skip updating the docs 'latest' alias
14+ # 4. Optionally enable "Allow overwriting existing tag" (only for pre-release iterations)
15+ # 5. Optionally enable "Create GitHub release"
1516#
1617# The workflow will:
1718# - Extract minor version (e.g., v1.0.0 -> v1.x)
3031 description : ' Release tag (e.g., v1.0.0)'
3132 required : true
3233 type : string
34+ prerelease :
35+ description : ' Pre-release (will not update the docs "latest" alias)'
36+ required : false
37+ type : boolean
38+ default : false
3339 allow_tag_overwrite :
3440 description : ' Allow overwriting existing tag (use only for pre-release iterations)'
3541 required : false
5864 version_tag : ${{ steps.set_vars.outputs.version_tag }}
5965 minor_release_branch : ${{ steps.set_vars.outputs.minor_release_branch }}
6066 minor_version : ${{ steps.set_vars.outputs.minor_version }}
61-
67+ is_prerelease : ${{ steps.prerelease.outputs.is_prerelease }}
68+
6269 steps :
6370 - name : Checkout code
6471 uses : actions/checkout@v6
@@ -95,6 +102,11 @@ jobs:
95102 echo "Minor version: $MINOR_VERSION"
96103 echo "Release branch: $MINOR_BRANCH"
97104
105+ - name : Set unified prerelease flag
106+ id : prerelease
107+ run : |
108+ echo "is_prerelease=${{ inputs.prerelease || contains(inputs.tag, '-') || contains(inputs.tag, 'alpha') || contains(inputs.tag, 'beta') || contains(inputs.tag, 'rc') }}" >> "$GITHUB_OUTPUT"
109+
98110 - name : Validate tag format
99111 run : |
100112 TAG="${{ inputs.tag }}"
@@ -110,6 +122,7 @@ jobs:
110122 outputs :
111123 version_tag : ${{ needs.prepare-release.outputs.version_tag }}
112124 minor_release_branch : ${{ needs.prepare-release.outputs.minor_release_branch }}
125+ is_prerelease : ${{ needs.prepare-release.outputs.is_prerelease }}
113126
114127 steps :
115128 - name : Checkout code
@@ -176,6 +189,7 @@ jobs:
176189 needs : create-release-branch
177190 outputs :
178191 version_tag : ${{ needs.create-release-branch.outputs.version_tag }}
192+ is_prerelease : ${{ needs.create-release-branch.outputs.is_prerelease }}
179193
180194 steps :
181195 - name : Checkout release branch
@@ -191,13 +205,15 @@ jobs:
191205 git config user.email "${{ env.GH_USER_EMAIL }}"
192206
193207 - name : Create and push git tag
208+ env :
209+ ALLOW_TAG_OVERWRITE : ${{ inputs.allow_tag_overwrite }}
194210 run : |
195211 TAG="${{ needs.create-release-branch.outputs.version_tag }}"
196212 BRANCH="${{ needs.create-release-branch.outputs.minor_release_branch }}"
197213
198214 # Check if tag already exists
199215 if git rev-parse "$TAG" >/dev/null 2>&1; then
200- if [ "${{ inputs.allow_tag_overwrite }} " != "true" ]; then
216+ if [ "$ALLOW_TAG_OVERWRITE " != "true" ]; then
201217 echo "❌ Error: Tag $TAG already exists!"
202218 echo ""
203219 echo "Tags should be immutable once released. To overwrite an existing tag:"
@@ -241,7 +257,7 @@ jobs:
241257
242258 > Note: Release notes can be edited after creation.
243259 draft : false
244- prerelease : ${{ contains(inputs.tag, '-') || contains(inputs.tag, 'alpha') || contains(inputs.tag, 'beta') || contains(inputs.tag, 'rc') }}
260+ prerelease : ${{ needs.create-release-branch.outputs.is_prerelease == 'true' }}
245261
246262 build-and-push-image :
247263 name : Build and Push Image
@@ -278,22 +294,26 @@ jobs:
278294 id : build_image
279295 env :
280296 QUAY_REPO : ${{ secrets.APP_QUAY_REPO }}
297+ VERSION_TAG : ${{ needs.create-tag.outputs.version_tag }}
281298 run : |
282299 if [ -n "$QUAY_REPO" ]; then
283300 echo "Using custom repository from secret: $QUAY_REPO"
284301 echo "repo=$QUAY_REPO" >> $GITHUB_OUTPUT
285- make build-push-image REPO="$QUAY_REPO" TAG=${{ needs.create-tag.outputs.version_tag }} CONTAINER_ENGINE=docker
302+ make build-push-image REPO="$QUAY_REPO" TAG="$VERSION_TAG" CONTAINER_ENGINE=docker
286303 else
287304 echo "Using Makefile default repository: quay.io/opendatahub/maas-api"
288305 echo "repo=quay.io/opendatahub/maas-api" >> $GITHUB_OUTPUT
289- make build-push-image TAG=${{ needs.create-tag.outputs.version_tag }} CONTAINER_ENGINE=docker
306+ make build-push-image TAG="$VERSION_TAG" CONTAINER_ENGINE=docker
290307 fi
291308
292309 deploy-documentation :
293310 name : Deploy Documentation
294311 runs-on : ubuntu-latest
295312 needs : create-tag
296-
313+ concurrency :
314+ group : pages
315+ cancel-in-progress : false
316+
297317 steps :
298318 - name : Checkout version tag
299319 uses : actions/checkout@v6
@@ -326,13 +346,18 @@ jobs:
326346 git config --global user.email "${{ env.GH_USER_EMAIL }}"
327347
328348 - name : Deploy versioned docs with mike
349+ env :
350+ PRERELEASE : ${{ needs.create-tag.outputs.is_prerelease }}
351+ VERSION_TAG : ${{ needs.create-tag.outputs.version_tag }}
329352 run : |
330353 cd docs
331- # Deploy the new version and update latest
332- # Note: mike will automatically create the gh-pages branch if it doesn't exist
333- mike deploy --push --update-aliases ${{ needs.create-tag.outputs.version_tag }} latest
334- # Set latest as the default version
335- mike set-default --push latest
354+ if [ "$PRERELEASE" = "true" ]; then
355+ echo "Pre-release: deploying docs version without updating 'latest' alias"
356+ mike deploy --push "$VERSION_TAG"
357+ else
358+ mike deploy --push --update-aliases "$VERSION_TAG" latest
359+ mike set-default --push latest
360+ fi
336361
337362 summary :
338363 name : Release Summary
@@ -342,27 +367,37 @@ jobs:
342367
343368 steps :
344369 - name : Summary
370+ env :
371+ VERSION_TAG : ${{ needs.create-tag.outputs.version_tag }}
372+ MINOR_BRANCH : ${{ needs.create-release-branch.outputs.minor_release_branch }}
373+ IMAGE_REPO : ${{ needs.build-and-push-image.outputs.image_repo }}
374+ IS_PRERELEASE : ${{ needs.prepare-release.outputs.is_prerelease }}
375+ CREATE_RELEASE : ${{ inputs.create_release }}
345376 run : |
346377 {
347378 echo "## Release Summary"
348379 echo ""
349- echo "✅ **Tag**: \`${{ needs.create-tag.outputs.version_tag }} \`"
350- echo "✅ **Release Branch**: \`${{ needs.create-release-branch.outputs.minor_release_branch }} \`"
380+ echo "✅ **Tag**: \`$VERSION_TAG \`"
381+ echo "✅ **Release Branch**: \`$MINOR_BRANCH \`"
351382 echo "✅ **Git Tag**: Created and pushed from release branch"
352- echo "✅ **Image Built & Pushed**: \`${{ needs.build-and-push-image.outputs.image_repo }}:${{ needs.create-tag.outputs.version_tag }} \`"
353- echo "✅ **Documentation Deployed**: \`${{ needs.create-tag.outputs.version_tag }} \`"
354- if [ "${{ inputs.create_release }}" = = "true" ]; then
383+ echo "✅ **Image Built & Pushed**: \`$IMAGE_REPO:$VERSION_TAG \`"
384+ echo "✅ **Documentation Deployed**: \`$VERSION_TAG \`"
385+ if [ "$CREATE_RELEASE" = "true" ]; then
355386 echo "✅ **GitHub Release**: Created"
356387 fi
357388 echo ""
358389 echo "### Updated Files"
359390 echo "- \`deployment/base/maas-api/kustomization.yaml\`"
360391 echo "- \`maas-api/deploy/overlays/dev/kustomization.yaml\`"
361392 echo "- \`maas-api/deploy/overlays/odh/params.env\`"
362- echo "- MAAS_REF references updated to use \`${{ needs.create-tag.outputs.version_tag }} \`"
393+ echo "- MAAS_REF references updated to use \`$VERSION_TAG \`"
363394 echo ""
364395 echo "### Documentation"
365- echo "- Docs Version: \`${{ needs.create-tag.outputs.version_tag }}\`"
366- echo "- Docs Alias: \`latest\`"
396+ echo "- Docs Version: \`$VERSION_TAG\`"
397+ if [ "$IS_PRERELEASE" = "true" ]; then
398+ echo "- Docs Alias: _(not updated — pre-release)_"
399+ else
400+ echo "- Docs Alias: \`latest\`"
401+ fi
367402 echo "- Docs URL: https://opendatahub-io.github.io/models-as-a-service/"
368403 } >> "$GITHUB_STEP_SUMMARY"
0 commit comments