|
| 1 | +# Runs only when production code under src/ changes. Version must be > latest v* tag (not vs base branch). |
| 2 | + |
1 | 3 | name: Check Version Bump |
2 | 4 |
|
3 | 5 | on: |
@@ -26,26 +28,21 @@ jobs: |
26 | 28 | exit 0 |
27 | 29 | fi |
28 | 30 |
|
29 | | - is_ignored_change() { |
| 31 | + is_production_source_change() { |
30 | 32 | 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/* ]] |
37 | 34 | } |
38 | 35 |
|
39 | | - has_release_impact=false |
| 36 | + has_source_changes=false |
40 | 37 | 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 |
43 | 40 | break |
44 | 41 | fi |
45 | 42 | done |
46 | 43 |
|
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." |
49 | 46 | exit 0 |
50 | 47 | fi |
51 | 48 |
|
|
68 | 65 | [ -n "$CHANGELOG_HEAD" ] || { echo "::error::Could not find a top changelog heading like '## vX.Y.Z' in $CHANGELOG_FILE."; exit 1; } |
69 | 66 | [ "$CHANGELOG_HEAD" = "$head_version" ] || { echo "::error::$CHANGELOG_FILE top version ($CHANGELOG_HEAD) does not match project version ($head_version)."; exit 1; } |
70 | 67 |
|
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));") |
72 | 68 | latest_tag=$(git tag --list 'v*' --sort=-version:refname | sed -n '1p') |
73 | 69 | latest_version="${latest_tag#v}" |
74 | 70 | [ -n "$latest_version" ] || latest_version="0.0.0" |
|
77 | 73 | 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" |
78 | 74 | } |
79 | 75 |
|
80 | | - [ "$(version_gt "$head_version" "$base_version")" = "true" ] || { echo "Version must be greater than base version ($base_version). Found $head_version."; exit 1; } |
81 | 76 | [ "$(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