From 84d3b034857da791b1ee2c48798d6fcfedb24ddd Mon Sep 17 00:00:00 2001 From: gffranco Date: Wed, 24 Jun 2026 01:29:44 +0000 Subject: [PATCH] fix(release): use single stamp step for both push and dispatch triggers --- .gitea/workflows/release.yaml | 51 ++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index a24b2bd..45d6a60 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -29,8 +29,8 @@ jobs: name: bump + tag runs-on: ubuntu-latest outputs: - version: ${{ steps.tag.outputs.tag_prefix }} - tag: ${{ steps.tag.outputs.tag_full }} + version: ${{ steps.stamp.outputs.version }} + tag: ${{ steps.stamp.outputs.tag }} steps: - uses: actions/checkout@v4 with: @@ -49,34 +49,37 @@ jobs: restore-keys: | ${{ runner.os }}-cargo-prepare- - - name: Extract version from tag (push trigger) - if: github.event_name == 'push' - id: tag - run: | - echo "tag_prefix=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" - echo "tag=${GITHUB_REF_NAME}" >> "$GITHUB_OUTPUT" - - - name: Validate version + stamp - if: github.event_name == 'workflow_dispatch' + - name: Stamp version + tag id: stamp - env: - VERSION: ${{ inputs.version }} run: | set -euo pipefail - ver="${VERSION#v}" # tolerate a leading v - if ! printf '%s' "$ver" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.-]+)?$'; then - echo "::error::'$ver' is not a semver version (expected e.g. 0.4.0)" - exit 1 + if [ "${GITHUB_EVENT_NAME}" = "push" ]; then + # Tag push from local: tag already exists, just verify + extract version + tag="${GITHUB_REF_NAME}" + ver="${tag#v}" + if ! printf '%s' "$ver" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.-]+)?$'; then + echo "::error::'$ver' is not a semver version (expected e.g. 0.4.0)" + exit 1 + fi + else + # Manual dispatch: validate input, stamp, verify tag doesn't exist yet + ver="${VERSION#v}" + if ! printf '%s' "$ver" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.-]+)?$'; then + echo "::error::'$ver' is not a semver version (expected e.g. 0.4.0)" + exit 1 + fi + tag="v$ver" + if git rev-parse -q --verify "refs/tags/$tag" >/dev/null \ + || git ls-remote --exit-code --tags origin "$tag" >/dev/null 2>&1; then + echo "::error::tag $tag already exists" + exit 1 + fi + bash scripts/set-version.sh "$ver" fi - tag="v$ver" - if git rev-parse -q --verify "refs/tags/$tag" >/dev/null \ - || git ls-remote --exit-code --tags origin "$tag" >/dev/null 2>&1; then - echo "::error::tag $tag already exists" - exit 1 - fi - bash scripts/set-version.sh "$ver" echo "version=$ver" >> "$GITHUB_OUTPUT" echo "tag=$tag" >> "$GITHUB_OUTPUT" + env: + VERSION: ${{ inputs.version }} # Gate: never tag code that doesn't build/test. If this fails nothing # is committed or pushed, so the release simply doesn't happen.