diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..0398ce32 --- /dev/null +++ b/.github/workflows/release.yml @@ -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 "action@github.com" + 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}} diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b229ce5..9a759369 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,21 @@ # Changelog -All notable changes to this project will be documented in this file. +All notable changes to this project are documented in this file. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + + +## Unreleased ## [0.15.1] - 2023-11-29 @@ -354,13 +366,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed bug with CI not cleaning up node_modules after testing. [#219](https://github.com/o1-labs/zkapp-cli/pull/219) ## [0.3.7] - 2021-06-03 - - diff --git a/package.json b/package.json index 1ba5219b..e8a88af9 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,8 @@ "prettier": "prettier --no-editorconfig --write \"**/*.{js,ts}\"", "e2e:install": "npx playwright-core install --with-deps", "e2e:test": "npm run clean && npx playwright test --workers=1", - "e2e:test:smoke": "npm run e2e:test -- --grep '@on-chain @interaction'" + "e2e:test:smoke": "npm run e2e:test -- --grep '@on-chain @interaction'", + "update-changelog": "./update-changelog.sh" }, "lint-staged": { "**/*": [ diff --git a/update-changelog.sh b/update-changelog.sh new file mode 100755 index 00000000..c03fb92c --- /dev/null +++ b/update-changelog.sh @@ -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"