diff --git a/.github/workflow/bump-version.yml b/.github/workflow/bump-version.yml new file mode 100644 index 0000000..d270058 --- /dev/null +++ b/.github/workflow/bump-version.yml @@ -0,0 +1,56 @@ +name: Bump Patch Version on Merge to Main + +on: + push: + branches: + - main + +jobs: + bump-version: + runs-on: ubuntu-latest + # Skip if this push was itself the version bump commit (prevents infinite loop) + if: "!contains(github.event.head_commit.message, '[skip ci]')" + + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + # Need full git history and ability to push + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Bump patch version in pyproject.toml + id: bump + run: | + # Read current version + CURRENT=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/') + echo "Current version: $CURRENT" + + # Split into parts and increment patch + MAJOR=$(echo $CURRENT | cut -d. -f1) + MINOR=$(echo $CURRENT | cut -d. -f2) + PATCH=$(echo $CURRENT | cut -d. -f3) + NEW_PATCH=$((PATCH + 1)) + NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH" + echo "New version: $NEW_VERSION" + + # Write back to pyproject.toml + sed -i "s/^version = \"$CURRENT\"/version = \"$NEW_VERSION\"/" pyproject.toml + + # Export for later steps + echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT + + - name: Commit and push bumped version + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add pyproject.toml + git commit -m "chore: bump version to ${{ steps.bump.outputs.new_version }} [skip ci]" + git push + - name: Tag the release + run: | + git tag "v${{ steps.bump.outputs.new_version }}" + git push origin "v${{ steps.bump.outputs.new_version }}"