Skip to content

Commit 91b2703

Browse files
committed
added github workflow to automate version bumping
1 parent 908e068 commit 91b2703

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed

.github/workflows/version-bump.yml

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
name: Version Bump
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version_type:
7+
description: 'Version bump type'
8+
required: true
9+
default: 'patch'
10+
type: choice
11+
options:
12+
- patch
13+
- minor
14+
- major
15+
custom_version:
16+
description: 'Custom version (optional, overrides version_type)'
17+
required: false
18+
type: string
19+
20+
jobs:
21+
version-bump:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
with:
27+
token: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Setup Node.js
30+
uses: actions/setup-node@v4
31+
with:
32+
node-version: '24'
33+
cache: 'npm'
34+
35+
- name: Install dependencies
36+
run: npm ci
37+
38+
- name: Configure git
39+
run: |
40+
git config --local user.email "action@github.com"
41+
git config --local user.name "GitHub Action"
42+
43+
- name: Get current version
44+
id: current_version
45+
run: |
46+
CURRENT_VERSION=$(node -p "require('./package.json').version")
47+
echo "current=$CURRENT_VERSION" >> $GITHUB_OUTPUT
48+
49+
- name: Bump version
50+
id: bump_version
51+
run: |
52+
if [ -n "${{ github.event.inputs.custom_version }}" ]; then
53+
# Use custom version
54+
CUSTOM_VERSION="${{ github.event.inputs.custom_version }}"
55+
# Remove 'v' prefix if present
56+
CUSTOM_VERSION=${CUSTOM_VERSION#v}
57+
58+
# Basic version validation (semver format)
59+
if ! echo "$CUSTOM_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?(\+[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*)?$'; then
60+
echo "Error: Custom version '$CUSTOM_VERSION' is not a valid semver format"
61+
exit 1
62+
fi
63+
64+
NEW_VERSION="$CUSTOM_VERSION"
65+
npm version $NEW_VERSION --no-git-tag-version
66+
echo "new=$NEW_VERSION" >> $GITHUB_OUTPUT
67+
else
68+
# Use version type bump
69+
NEW_VERSION=$(npm version ${{ github.event.inputs.version_type }} --no-git-tag-version)
70+
# Remove 'v' prefix if present
71+
NEW_VERSION=${NEW_VERSION#v}
72+
echo "new=$NEW_VERSION" >> $GITHUB_OUTPUT
73+
fi
74+
75+
- name: Create pull request branch
76+
run: |
77+
BRANCH_NAME="version-bump/v${{ steps.bump_version.outputs.new }}"
78+
git checkout -b $BRANCH_NAME
79+
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV
80+
81+
- name: Commit changes
82+
run: |
83+
git add package.json package-lock.json
84+
git commit -m "chore: bump version to v${{ steps.bump_version.outputs.new }}"
85+
86+
- name: Push branch
87+
run: |
88+
git push origin $BRANCH_NAME
89+
90+
- name: Create Pull Request
91+
uses: actions/github-script@v7
92+
with:
93+
script: |
94+
const { data: pullRequest } = await github.rest.pulls.create({
95+
owner: context.repo.owner,
96+
repo: context.repo.repo,
97+
title: `chore: bump version to v${{ steps.bump_version.outputs.new }}`,
98+
head: process.env.BRANCH_NAME,
99+
base: 'main',
100+
body: `
101+
## Version Bump
102+
103+
This PR updates the package version from \`${{ steps.current_version.outputs.current }}\` to \`${{ steps.bump_version.outputs.new }}\`.
104+
105+
### Changes
106+
- 📦 Updated \`package.json\` version
107+
- 🔒 Updated \`package-lock.json\` (if applicable)
108+
109+
### Next Steps
110+
1. Review and merge this PR
111+
2. Create a GitHub release with tag \`v${{ steps.bump_version.outputs.new }}\`
112+
3. The publish workflow will automatically run and deploy to npm
113+
114+
---
115+
116+
*This PR was created automatically by the Version Bump workflow.*
117+
`
118+
});
119+
120+
console.log(`Pull request created: ${pullRequest.html_url}`);
121+
122+
// Add labels if they exist
123+
try {
124+
await github.rest.issues.addLabels({
125+
owner: context.repo.owner,
126+
repo: context.repo.repo,
127+
issue_number: pullRequest.number,
128+
labels: ['version-bump', 'chore']
129+
});
130+
} catch (error) {
131+
console.log('Could not add labels (they may not exist):', error.message);
132+
}
133+
134+
- name: Summary
135+
run: |
136+
echo "## Version Bump Summary" >> $GITHUB_STEP_SUMMARY
137+
echo "- **Previous version:** ${{ steps.current_version.outputs.current }}" >> $GITHUB_STEP_SUMMARY
138+
echo "- **New version:** ${{ steps.bump_version.outputs.new }}" >> $GITHUB_STEP_SUMMARY
139+
echo "- **Branch:** $BRANCH_NAME" >> $GITHUB_STEP_SUMMARY
140+
echo "- **Type:** ${{ github.event.inputs.version_type }}" >> $GITHUB_STEP_SUMMARY
141+
if [ -n "${{ github.event.inputs.custom_version }}" ]; then
142+
echo "- **Custom version used:** Yes" >> $GITHUB_STEP_SUMMARY
143+
fi

0 commit comments

Comments
 (0)