mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-10 23:19:09 +02:00
fix(pr-title): stop duplicating the version prefix on bare-version titles
A title that was nothing but a version ("v1.2.3" — the form ship uses for
version-only bumps) matched neither the "v<NEW_VERSION> " literal case nor
the trailing-space strip regex, fell through to the prepend path, and came
out as "v1.2.3.4 v1.2.3" — which pr-title-sync.yml then wrote back via
gh pr edit. Handle the bare form in both the no-change case and the
prefix-strip regex, and emit a bare new version when nothing follows.
Closes #1886.
Contributed by @jbetala7 (PR #1887).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
85ab953cc9
commit
3853cd470d
@@ -5,10 +5,18 @@
|
||||
# Output: corrected title on stdout.
|
||||
#
|
||||
# Rule: PR titles MUST start with v<NEW_VERSION>. Three cases:
|
||||
# 1. Already starts with "v<NEW_VERSION> " -> no change.
|
||||
# 2. Starts with a different "v<digits and dots> " prefix -> replace prefix.
|
||||
# 1. Already starts with "v<NEW_VERSION>" -> no change.
|
||||
# 2. Starts with a different "v<digits and dots>" prefix -> replace prefix.
|
||||
# 3. No version prefix -> prepend "v<NEW_VERSION> ".
|
||||
#
|
||||
# Each version prefix may be followed by a space (then a description) OR sit at
|
||||
# the end of the title as a bare version with no description (e.g. "v1.2.3", the
|
||||
# format ship/CHANGELOG uses for version-only bumps). Both forms must be handled
|
||||
# in cases 1 and 2, otherwise a bare version falls through to case 3 and gets a
|
||||
# second prefix prepended, e.g. "v1.2.3" -> "v1.2.3.4 v1.2.3". The CI workflow
|
||||
# .github/workflows/pr-title-sync.yml feeds real PR titles through this and then
|
||||
# `gh pr edit`s the result, so the duplicated title would be written back.
|
||||
#
|
||||
# The version-prefix regex matches two or more dot-separated digit segments
|
||||
# (covers v1.2, v1.2.3, v1.2.3.4) so the rule is portable across repos that
|
||||
# use 3-part or 4-part versions, but does NOT strip plain words like
|
||||
@@ -33,12 +41,20 @@ fi
|
||||
|
||||
# Literal prefix match (case statement is glob-quoted by bash, but our
|
||||
# regex-validated NEW_VERSION has no glob metacharacters so this is safe).
|
||||
# Match both "v<NEW_VERSION> <description>" and a bare "v<NEW_VERSION>" title.
|
||||
case "$TITLE" in
|
||||
"v$NEW_VERSION "*)
|
||||
"v$NEW_VERSION "*|"v$NEW_VERSION")
|
||||
printf '%s\n' "$TITLE"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
REST=$(printf '%s' "$TITLE" | sed -E 's/^v[0-9]+(\.[0-9]+)+ //')
|
||||
printf 'v%s %s\n' "$NEW_VERSION" "$REST"
|
||||
# Strip an existing different version prefix whether it is followed by a space
|
||||
# (then a description) or sits at the end of the title (bare version).
|
||||
REST=$(printf '%s' "$TITLE" | sed -E 's/^v[0-9]+(\.[0-9]+)+( |$)//')
|
||||
if [ -n "$REST" ]; then
|
||||
printf 'v%s %s\n' "$NEW_VERSION" "$REST"
|
||||
else
|
||||
# Title was nothing but a (different) version prefix; emit the bare new one.
|
||||
printf 'v%s\n' "$NEW_VERSION"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user