fix(release): dispatch trigger should succeed when tag already exists
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user