From c49b881ab213b24f1e910d6c32e03801a1dabce5 Mon Sep 17 00:00:00 2001 From: bearomorphism Date: Fri, 8 May 2026 16:20:44 +0800 Subject: [PATCH] docs(examples): gracefully handle no bump-eligible commits Update both bump-release.yaml examples so that pushing only commits which do not trigger a version bump (e.g. docs:, ci:, build(deps):) does not fail the workflow with exit code 21. The bump step now passes `--no-raise 21` to cz bump and detects whether HEAD changed; if not, it sets `bumped=false` and exits 0. Subsequent steps (changelog, release, trigger-other-workflow) are guarded by `steps.bump-version.outputs.bumped == 'true'` so they are skipped on no-op runs. This mirrors the same pattern already used in commitizen's own bumpversion.yml workflow (see commitizen-tools/commitizen#1950). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- examples/bump-release.yaml | 15 ++++++++++++++- .../.github/workflows/bump-release.yaml | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/examples/bump-release.yaml b/examples/bump-release.yaml index cb8699c..4297dd8 100644 --- a/examples/bump-release.yaml +++ b/examples/bump-release.yaml @@ -22,18 +22,31 @@ jobs: python-version: "3.x" - id: bump-version run: | - cz bump --yes --annotated-tag + old_sha="$(git rev-parse HEAD)" + # Pass --no-raise 21 so that pushing only non-bump-eligible commits + # (e.g. docs:, ci:, build(deps):) does not fail the workflow. + cz bump --yes --annotated-tag --no-raise 21 + + if [ "$(git rev-parse HEAD)" = "$old_sha" ]; then + echo "No bump-eligible commits found, skipping release." + echo "bumped=false" >> $GITHUB_OUTPUT + exit 0 + fi + + echo "bumped=true" >> $GITHUB_OUTPUT git push --follow-tags new_version="$(cz version -p)" echo "new_version=$new_version" >> $GITHUB_OUTPUT new_version_tag="$(cz version -p --tag)" echo "new_version_tag=$new_version_tag" >> $GITHUB_OUTPUT - name: Build changelog for Release + if: steps.bump-version.outputs.bumped == 'true' env: NEW_VERSION: ${{ steps.bump-version.outputs.new_version }} run: | cz changelog --dry-run "${NEW_VERSION}" > .changelog.md - name: Release + if: steps.bump-version.outputs.bumped == 'true' env: GH_TOKEN: ${{ github.token }} NEW_VERSION_TAG: ${{ steps.bump-version.outputs.new_version_tag }} diff --git a/examples/trigger-other-job/.github/workflows/bump-release.yaml b/examples/trigger-other-job/.github/workflows/bump-release.yaml index f6db9d6..c4604de 100644 --- a/examples/trigger-other-job/.github/workflows/bump-release.yaml +++ b/examples/trigger-other-job/.github/workflows/bump-release.yaml @@ -23,7 +23,18 @@ jobs: - id: bump-version run: | old_version="$(cz version -p)" - cz bump --yes --annotated-tag + old_sha="$(git rev-parse HEAD)" + # Pass --no-raise 21 so that pushing only non-bump-eligible commits + # (e.g. docs:, ci:, build(deps):) does not fail the workflow. + cz bump --yes --annotated-tag --no-raise 21 + + if [ "$(git rev-parse HEAD)" = "$old_sha" ]; then + echo "No bump-eligible commits found, skipping release." + echo "bumped=false" >> $GITHUB_OUTPUT + exit 0 + fi + + echo "bumped=true" >> $GITHUB_OUTPUT git push --follow-tags new_version="$(cz version -p)" new_version_tag="$(cz version -p --tag)" @@ -32,17 +43,20 @@ jobs: echo "new_version=$new_version" >> $GITHUB_OUTPUT echo "new_version_tag=$new_version_tag" >> $GITHUB_OUTPUT - name: Build changelog for Release + if: steps.bump-version.outputs.bumped == 'true' env: NEW_VERSION: ${{ steps.bump-version.outputs.new_version }} run: | cz changelog --dry-run "${NEW_VERSION}" > .changelog.md - name: Release + if: steps.bump-version.outputs.bumped == 'true' env: GH_TOKEN: ${{ github.token }} NEW_VERSION_TAG: ${{ steps.bump-version.outputs.new_version_tag }} run: | gh release create "${NEW_VERSION_TAG}" --notes-file .changelog.md - name: trigger other workflow + if: steps.bump-version.outputs.bumped == 'true' env: GH_TOKEN: ${{ github.token }} run: |