fix(release): dispatch trigger should succeed when tag already exists
CI / cargo fmt --check (push) Successful in 33s
CI / cargo clippy (push) Successful in 37s
CI / cargo test (push) Successful in 39s

This commit is contained in:
gffranco
2026-06-24 01:38:39 +00:00
parent 84d3b03485
commit 2c835120f8
+18 -12
View File
@@ -54,28 +54,34 @@ jobs:
run: |
set -euo pipefail
if [ "${GITHUB_EVENT_NAME}" = "push" ]; then
# Tag push from local: tag already exists, just verify + extract version
# Tag pushed locally: tag already exists, just 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
# Manual dispatch from Gitea UI: use the input version
ver="${VERSION#v}"
tag="v${ver}"
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
# If the tag already exists locally, skip version stamping.
# This covers the case where the tag was created outside this
# workflow — we just need the version number for downstream jobs.
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 "Tag already exists locally — skipping version stamp."
else
echo "Stamping version $ver …"
bash scripts/set-version.sh "$ver"
fi
fi
# Verify the Cargo.toml version matches so downstream jobs are safe.
manifest_ver=$(grep '^version' Cargo.toml | head -1 | sed 's/version = "//;s/"//')
if [ "$ver" != "$manifest_ver" ]; then
echo "::error::version mismatch: step says $ver but Cargo.toml says $manifest_ver"
exit 1
fi
echo "version=$ver" >> "$GITHUB_OUTPUT"
echo "tag=$tag" >> "$GITHUB_OUTPUT"
env: