Skip to content

Commit 03d9889

Browse files
committed
ci: gate version-bump on src paths; validate semver vs latest tag only
1 parent 779f922 commit 03d9889

1 file changed

Lines changed: 10 additions & 14 deletions

File tree

.github/workflows/check-version-bump.yml

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# Runs only when production code under src/main/ changes. Version must be > latest v* tag
2+
# (not compared to the base branch, so rebases onto an already-bumped main still pass when tag requires a new release).
3+
14
name: Check Version Bump
25

36
on:
@@ -26,26 +29,21 @@ jobs:
2629
exit 0
2730
fi
2831
29-
is_ignored_change() {
32+
is_production_source_change() {
3033
local f="$1"
31-
[[ "$f" =~ ^docs/ ]] && return 0
32-
[[ "$f" =~ ^\.github/ ]] && return 0
33-
[[ "$f" =~ (^|/)tests?/ ]] && return 0
34-
[[ "$f" =~ (^|/)src/test/ ]] && return 0
35-
[[ "$f" =~ \.md$ ]] && [[ ! "$f" =~ (^|/)CHANGELOG\.md$ ]] && return 0
36-
return 1
34+
[[ "$f" == src/main/* ]]
3735
}
3836
39-
has_release_impact=false
37+
has_source_changes=false
4038
for file in "${CHANGED_FILES[@]}"; do
41-
if ! is_ignored_change "$file"; then
42-
has_release_impact=true
39+
if is_production_source_change "$file"; then
40+
has_source_changes=true
4341
break
4442
fi
4543
done
4644
47-
if [ "$has_release_impact" = false ]; then
48-
echo "Skipping docs/test-only PR."
45+
if [ "$has_source_changes" = false ]; then
46+
echo "Skipping: no src/main/ production code changes."
4947
exit 0
5048
fi
5149
@@ -78,7 +76,6 @@ jobs:
7876
[ -n "$CHANGELOG_HEAD" ] || { echo "::error::Could not find a version in $CHANGELOG_FILE (expected '#### vX.Y.Z' under a date section or legacy '## vX.Y.Z')."; exit 1; }
7977
[ "$CHANGELOG_HEAD" = "$head_version" ] || { echo "::error::$CHANGELOG_FILE top release version ($CHANGELOG_HEAD) does not match project version ($head_version)."; exit 1; }
8078
81-
base_version=$(git show "$BASE_SHA:$VERSION_FILE" | extract_version)
8279
latest_tag=$(git tag --list 'v*' --sort=-version:refname | sed -n '1p')
8380
latest_version="${latest_tag#v}"
8481
[ -n "$latest_version" ] || latest_version="0.0.0"
@@ -87,5 +84,4 @@ jobs:
8784
python3 -c 'import sys;v=lambda s:[int(x) if x.isdigit() else 0 for x in (s.strip().lstrip("v").split("-",1)[0].split("+",1)[0].split(".")+["0","0","0"])[:3]];print("true" if v(sys.argv[1])>v(sys.argv[2]) else "false")' "$1" "$2"
8885
}
8986
90-
[ "$(version_gt "$head_version" "$base_version")" = "true" ] || { echo "Version must be greater than base version ($base_version). Found $head_version."; exit 1; }
9187
[ "$(version_gt "$head_version" "$latest_version")" = "true" ] || { echo "Version must be greater than latest tag version ($latest_version). Found $head_version."; exit 1; }

0 commit comments

Comments
 (0)