fix(release): dispatch trigger should succeed when tag already exists
This commit is contained in:
@@ -54,27 +54,33 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
if [ "${GITHUB_EVENT_NAME}" = "push" ]; then
|
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}"
|
tag="${GITHUB_REF_NAME}"
|
||||||
ver="${tag#v}"
|
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
|
else
|
||||||
# Manual dispatch: validate input, stamp, verify tag doesn't exist yet
|
# Manual dispatch from Gitea UI: use the input version
|
||||||
ver="${VERSION#v}"
|
ver="${VERSION#v}"
|
||||||
|
tag="v${ver}"
|
||||||
if ! printf '%s' "$ver" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.-]+)?$'; then
|
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)"
|
echo "::error::'$ver' is not a semver version (expected e.g. 0.4.0)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
tag="v$ver"
|
# If the tag already exists locally, skip version stamping.
|
||||||
if git rev-parse -q --verify "refs/tags/$tag" >/dev/null \
|
# This covers the case where the tag was created outside this
|
||||||
|| git ls-remote --exit-code --tags origin "$tag" >/dev/null 2>&1; then
|
# workflow — we just need the version number for downstream jobs.
|
||||||
echo "::error::tag $tag already exists"
|
if git rev-parse -q --verify "refs/tags/$tag" >/dev/null && \
|
||||||
exit 1
|
! 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
|
||||||
bash scripts/set-version.sh "$ver"
|
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
|
fi
|
||||||
echo "version=$ver" >> "$GITHUB_OUTPUT"
|
echo "version=$ver" >> "$GITHUB_OUTPUT"
|
||||||
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
echo "tag=$tag" >> "$GITHUB_OUTPUT"
|
||||||
|
|||||||
Reference in New Issue
Block a user