|
32 | 32 |
|
33 | 33 | - name: Run Tests |
34 | 34 | run: yarn test |
| 35 | + |
| 36 | + version-check: |
| 37 | + name: Version Bump Check |
| 38 | + runs-on: ubuntu-latest |
| 39 | + steps: |
| 40 | + - name: Checkout Repo |
| 41 | + uses: actions/checkout@v4 |
| 42 | + with: |
| 43 | + fetch-depth: 0 |
| 44 | + |
| 45 | + - name: Check for source changes requiring version bump |
| 46 | + id: changes |
| 47 | + run: | |
| 48 | + CHANGED_FILES=$(git diff --name-only origin/main...HEAD) |
| 49 | + echo "Changed files:" |
| 50 | + echo "$CHANGED_FILES" |
| 51 | +
|
| 52 | + NEEDS_BUMP=false |
| 53 | + while IFS= read -r file; do |
| 54 | + case "$file" in |
| 55 | + src/*|tsconfig.build.json|tsconfig.base.json) |
| 56 | + NEEDS_BUMP=true |
| 57 | + break |
| 58 | + ;; |
| 59 | + package.json) |
| 60 | + # Check if anything other than "version" changed |
| 61 | + OTHER_CHANGES=$(git diff origin/main...HEAD -- package.json | grep -E '^[+-]\s' | grep -v -E '^\+\+\+|^---' | grep -v '"version"' || true) |
| 62 | + if [ -n "$OTHER_CHANGES" ]; then |
| 63 | + NEEDS_BUMP=true |
| 64 | + break |
| 65 | + fi |
| 66 | + ;; |
| 67 | + esac |
| 68 | + done <<< "$CHANGED_FILES" |
| 69 | +
|
| 70 | + echo "needs_bump=$NEEDS_BUMP" >> "$GITHUB_OUTPUT" |
| 71 | +
|
| 72 | + - name: Verify version bump and changelog |
| 73 | + if: steps.changes.outputs.needs_bump == 'true' |
| 74 | + run: | |
| 75 | + PR_VERSION=$(node -p "require('./package.json').version") |
| 76 | + MAIN_VERSION=$(git show origin/main:package.json | node -p "JSON.parse(require('fs').readFileSync('/dev/stdin','utf8')).version") |
| 77 | +
|
| 78 | + echo "Main version: $MAIN_VERSION" |
| 79 | + echo "PR version: $PR_VERSION" |
| 80 | +
|
| 81 | + if [ "$PR_VERSION" = "$MAIN_VERSION" ]; then |
| 82 | + echo "::error::Source files or dependencies changed but package version was not bumped. Please update the version in package.json." |
| 83 | + exit 1 |
| 84 | + fi |
| 85 | +
|
| 86 | + HIGHER=$(node -e " |
| 87 | + const [a, b] = ['$PR_VERSION', '$MAIN_VERSION'].map(v => v.split('.').map(Number)); |
| 88 | + const isHigher = a[0] > b[0] || (a[0] === b[0] && a[1] > b[1]) || (a[0] === b[0] && a[1] === b[1] && a[2] > b[2]); |
| 89 | + process.exit(isHigher ? 0 : 1); |
| 90 | + " && echo "true" || echo "false") |
| 91 | +
|
| 92 | + if [ "$HIGHER" != "true" ]; then |
| 93 | + echo "::error::PR version ($PR_VERSION) must be higher than main version ($MAIN_VERSION)." |
| 94 | + exit 1 |
| 95 | + fi |
| 96 | +
|
| 97 | + echo "Version bumped from $MAIN_VERSION to $PR_VERSION" |
| 98 | +
|
| 99 | + CHANGELOG_CHANGED=$(git diff --name-only origin/main...HEAD -- docs/changelog.md) |
| 100 | + if [ -z "$CHANGELOG_CHANGED" ]; then |
| 101 | + echo "::error::Version was bumped but docs/changelog.md was not updated. Please add a changelog entry for version $PR_VERSION." |
| 102 | + exit 1 |
| 103 | + fi |
| 104 | + echo "Changelog updated for version bump" |
0 commit comments