|
| 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 | + |
1 | 4 | name: Check Version Bump |
2 | 5 |
|
3 | 6 | on: |
@@ -26,26 +29,21 @@ jobs: |
26 | 29 | exit 0 |
27 | 30 | fi |
28 | 31 |
|
29 | | - is_ignored_change() { |
| 32 | + is_production_source_change() { |
30 | 33 | 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/* ]] |
37 | 35 | } |
38 | 36 |
|
39 | | - has_release_impact=false |
| 37 | + has_source_changes=false |
40 | 38 | 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 |
43 | 41 | break |
44 | 42 | fi |
45 | 43 | done |
46 | 44 |
|
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." |
49 | 47 | exit 0 |
50 | 48 | fi |
51 | 49 |
|
|
78 | 76 | [ -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; } |
79 | 77 | [ "$CHANGELOG_HEAD" = "$head_version" ] || { echo "::error::$CHANGELOG_FILE top release version ($CHANGELOG_HEAD) does not match project version ($head_version)."; exit 1; } |
80 | 78 |
|
81 | | - base_version=$(git show "$BASE_SHA:$VERSION_FILE" | extract_version) |
82 | 79 | latest_tag=$(git tag --list 'v*' --sort=-version:refname | sed -n '1p') |
83 | 80 | latest_version="${latest_tag#v}" |
84 | 81 | [ -n "$latest_version" ] || latest_version="0.0.0" |
|
87 | 84 | 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" |
88 | 85 | } |
89 | 86 |
|
90 | | - [ "$(version_gt "$head_version" "$base_version")" = "true" ] || { echo "Version must be greater than base version ($base_version). Found $head_version."; exit 1; } |
91 | 87 | [ "$(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