Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/workflows/reusable-release-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,21 @@ jobs:
run: |
set -euo pipefail

# Classify pre-release: a SemVer pre-release tag carries a hyphen segment
# (vX.Y.Z-rc.1, -beta, etc.). The tag regex above already guarantees a
# valid SemVer shape, so a hyphen here is unambiguously the pre-release
# delimiter (build metadata uses '+'). A pre-release must NOT become the
# repo's Latest release, otherwise an -rc silently supersedes the stable
# line. make_latest=false keeps the existing stable release as Latest.
if printf '%s' "$TAG" | grep -Eq '^v[0-9]+\.[0-9]+\.[0-9]+-'; then
PRERELEASE="true"
MAKE_LATEST="false"
else
PRERELEASE="false"
MAKE_LATEST="true"
fi
echo "Tag ${TAG}: prerelease=${PRERELEASE}, make_latest=${MAKE_LATEST}"

# Look up existing release for this tag (--paginate handles repos with many releases)
# jq -rs: slurp multiple page arrays into one outer array, then flatten with [][]
release_id=$(gh api "repos/${{ github.repository }}/releases" --paginate \
Expand All @@ -132,6 +147,8 @@ jobs:
--method PATCH \
--field draft="${DRAFT}" \
--field tag_name="${TAG}" \
--field prerelease="${PRERELEASE}" \
--raw-field make_latest="${MAKE_LATEST}" \
| jq -r '.html_url')
else
echo "Creating new release for tag ${TAG}"
Expand All @@ -140,6 +157,8 @@ jobs:
--field tag_name="${TAG}" \
--field name="${TAG}" \
--field draft="${DRAFT}" \
--field prerelease="${PRERELEASE}" \
--raw-field make_latest="${MAKE_LATEST}" \
--field generate_release_notes=true \
| jq -r '.html_url')
fi
Expand Down