Skip to content

Commit 8d73365

Browse files
committed
ci: gate version-bump on src paths; validate semver vs latest tag only
1 parent 2108ce0 commit 8d73365

1 file changed

Lines changed: 9 additions & 14 deletions

File tree

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# Runs only when production code under src/ changes. Version must be > latest v* tag (not vs base branch).
2+
13
name: Check Version Bump
24

35
on:
@@ -26,26 +28,21 @@ jobs:
2628
exit 0
2729
fi
2830
29-
is_ignored_change() {
31+
is_production_source_change() {
3032
local f="$1"
31-
[[ "$f" =~ ^docs/ ]] && return 0
32-
[[ "$f" =~ ^\.github/ ]] && return 0
33-
[[ "$f" =~ (^|/)tests?/ ]] && return 0
34-
[[ "$f" =~ (^|/)__tests__/ ]] && return 0
35-
[[ "$f" =~ \.md$ ]] && [[ ! "$f" =~ (^|/)CHANGELOG\.md$ ]] && return 0
36-
return 1
33+
[[ "$f" == src/* ]]
3734
}
3835
39-
has_release_impact=false
36+
has_source_changes=false
4037
for file in "${CHANGED_FILES[@]}"; do
41-
if ! is_ignored_change "$file"; then
42-
has_release_impact=true
38+
if is_production_source_change "$file"; then
39+
has_source_changes=true
4340
break
4441
fi
4542
done
4643
47-
if [ "$has_release_impact" = false ]; then
48-
echo "Skipping docs/test-only PR."
44+
if [ "$has_source_changes" = false ]; then
45+
echo "Skipping: no src/ production code changes."
4946
exit 0
5047
fi
5148
@@ -68,7 +65,6 @@ jobs:
6865
[ -n "$CHANGELOG_HEAD" ] || { echo "::error::Could not find a top changelog heading like '## vX.Y.Z' in $CHANGELOG_FILE."; exit 1; }
6966
[ "$CHANGELOG_HEAD" = "$head_version" ] || { echo "::error::$CHANGELOG_FILE top version ($CHANGELOG_HEAD) does not match project version ($head_version)."; exit 1; }
7067
71-
base_version=$(git show "$BASE_SHA:$VERSION_FILE" | node -e "let d=''; process.stdin.on('data', c => d += c); process.stdin.on('end', () => console.log(JSON.parse(d).version));")
7268
latest_tag=$(git tag --list 'v*' --sort=-version:refname | sed -n '1p')
7369
latest_version="${latest_tag#v}"
7470
[ -n "$latest_version" ] || latest_version="0.0.0"
@@ -77,5 +73,4 @@ jobs:
7773
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"
7874
}
7975
80-
[ "$(version_gt "$head_version" "$base_version")" = "true" ] || { echo "Version must be greater than base version ($base_version). Found $head_version."; exit 1; }
8176
[ "$(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)