-
Notifications
You must be signed in to change notification settings - Fork 48
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add release.yml for automated version bumping (#530)
- Loading branch information
1 parent
2d625a5
commit 06cfdb5
Showing
4 changed files
with
108 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Purpose: | ||
# Automatically bumps the project's patch version bi-weekly on Tuesdays. | ||
# | ||
# Details: | ||
# - Triggered at 00:00 UTC every Tuesday; runs on even weeks of the year. | ||
# - Sets up the environment by checking out the repo and setting up Node.js. | ||
# - Bumps patch version using `npm version patch`, then creates a new branch 'release/x.x.x'. | ||
# - Pushes changes and creates a PR to `main` using GitHub CLI. | ||
# - Can also be triggered manually via `workflow_dispatch`. | ||
name: Version Bump | ||
|
||
on: | ||
workflow_dispatch: # Allow to manually trigger the workflow | ||
schedule: | ||
- cron: '0 0 * * 2' # At 00:00 UTC every Tuesday | ||
|
||
jobs: | ||
version-bump: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
# Since cronjob syntax doesn't support bi-weekly schedule, we need to check if it's an even week or not | ||
- name: Check if it's an even week | ||
run: | | ||
WEEK_NUM=$(date +'%V') | ||
if [ $((WEEK_NUM % 2)) -eq 0 ]; then | ||
echo "RUN_JOB=true" >> $GITHUB_ENV | ||
else | ||
echo "RUN_JOB=false" >> $GITHUB_ENV | ||
fi | ||
- name: Check out the repository | ||
uses: actions/checkout@v4 | ||
|
||
- name: Set up Node.js | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: '18' | ||
|
||
- name: Configure Git | ||
run: | | ||
git config --local user.email "[email protected]" | ||
git config --local user.name "GitHub Action" | ||
- name: Bump patch version | ||
if: ${{ env.RUN_JOB }} == 'true' | ||
run: | | ||
git fetch --prune --unshallow | ||
NEW_VERSION=$(npm version patch) | ||
echo "New version: $NEW_VERSION" | ||
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV | ||
- name: Install npm dependencies | ||
run: npm install | ||
|
||
- name: Update CHANGELOG.md | ||
run: | | ||
npm run update-changelog | ||
git add CHANGELOG.md | ||
git commit -m "Update CHANGELOG for new version $NEW_VERSION" | ||
- name: Create new release branch | ||
run: | | ||
NEW_BRANCH="release/${NEW_VERSION}" | ||
git checkout -b $NEW_BRANCH | ||
git push -u origin $NEW_BRANCH | ||
git push --tags | ||
gh pr create --base main --head $NEW_BRANCH --title "Release $NEW_VERSION" --body "This is an automated PR to update to version $NEW_VERSION" | ||
env: | ||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#!/bin/bash | ||
|
||
# Step 1: Capture the latest version | ||
latest_version=$(grep -oP '\[\K[0-9]+\.[0-9]+\.[0-9]+(?=\])' CHANGELOG.md | head -1) | ||
echo "Latest version: $latest_version" | ||
|
||
# Step 2: Bump the patch version | ||
IFS='.' read -r -a version_parts <<< "$latest_version" | ||
let version_parts[2]+=1 | ||
new_version="${version_parts[0]}.${version_parts[1]}.${version_parts[2]}" | ||
echo "New version: $new_version" | ||
|
||
# Step 3: Capture the current date | ||
current_date=$(date +%Y-%m-%d) | ||
echo "Current date: $current_date" | ||
|
||
# Step 4: Update the CHANGELOG | ||
# Insert a new version section with an additional newline for spacing | ||
sed -i "/## Unreleased/a \\\n## [$new_version] - $current_date" CHANGELOG.md | ||
|
||
echo "CHANGELOG updated with version $new_version" |