Skip to content

Commit 27d45ca

Browse files
Automate version bump validation, changelog enforcement, and NPM publ… (#58)
* Automate version bump validation, changelog enforcement, and NPM publish on merge * Automate version bump validation, changelog enforcement, and NPM publish on merge
1 parent 0d3e851 commit 27d45ca

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

.github/workflows/pr-build-and-check.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,73 @@ jobs:
3232

3333
- name: Run Tests
3434
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"

.github/workflows/publish-npm.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,44 @@
11
name: Publish package to NPM
22

33
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- "package.json"
49
workflow_dispatch:
510

611
jobs:
12+
check-version:
13+
name: Check Version
14+
runs-on: ubuntu-latest
15+
outputs:
16+
should_publish: ${{ steps.version-check.outputs.should_publish }}
17+
steps:
18+
- name: Checkout Repo
19+
uses: actions/checkout@v4
20+
21+
- name: Check if version changed
22+
id: version-check
23+
run: |
24+
CURRENT_VERSION=$(node -p "require('./package.json').version")
25+
PUBLISHED_VERSION=$(npm view @red-hat-developer-hub/e2e-test-utils version 2>/dev/null || echo "0.0.0")
26+
27+
echo "Current version: $CURRENT_VERSION"
28+
echo "Published version: $PUBLISHED_VERSION"
29+
30+
if [ "$CURRENT_VERSION" = "$PUBLISHED_VERSION" ]; then
31+
echo "should_publish=false" >> "$GITHUB_OUTPUT"
32+
echo "Version $CURRENT_VERSION is already published. Skipping."
33+
else
34+
echo "should_publish=true" >> "$GITHUB_OUTPUT"
35+
echo "New version $CURRENT_VERSION will be published."
36+
fi
37+
738
publish:
839
name: Publish to NPM
40+
needs: check-version
41+
if: needs.check-version.outputs.should_publish == 'true'
942
runs-on: ubuntu-latest
1043
permissions:
1144
contents: read

0 commit comments

Comments
 (0)