build: add a workflow to automatically open release PRs #19
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
on: | |
push: | |
branches: [main] | |
name: Open a PR to bump the version | |
jobs: | |
open_pr: | |
strategy: | |
matrix: | |
component: ["server", "client"] | |
name: Open PR | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: write | |
contents: write | |
steps: | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: x86_64-unknown-linux-gnu | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: swatinem/rust-cache@v2 | |
- run: cargo install git-cliff@^2.2 cargo-edit@^0.12 | |
# If there's an existing PR, it has the next tag on it, which messes with | |
# git-cliff. | |
- name: delete temporary tag | |
continue-on-error: true | |
run: | | |
git tag -l --contains $(git rev-parse origin/auto-bump-${{ matrix.component }}) | xargs git tag -d | |
- name: determine version | |
run: | | |
echo "COMPONENT=${{ matrix.component }}" | tee -a "$GITHUB_ENV" | |
comp_dir="mm-${{ matrix.component }}" | |
echo "COMPONENT_DIR=$comp_dir" | tee -a "$GITHUB_ENV" | |
version=$( git cliff -c .github/workflows/cliff.toml \ | |
--bumped-version --unreleased \ | |
--tag-pattern "${{ matrix.component }}" \ | |
--include-path "$comp_dir/**/*" ) | |
echo "BUMPED_VERSION=$version" | tee -a "$GITHUB_ENV" | |
echo "BUMPED_VERSION_SHORT=$( echo $version | sed -E 's/^[a-z]+-v(.*)/\1/' )" | tee -a "$GITHUB_ENV" | |
- name: replace version in files | |
if: ${{ env.BUMPED_VERSION != '' }} | |
run: git ls-files | xargs sed -i -E "s/mm$COMPONENT-v[0-9]+\.[0-9]+\.[0-9]+/$BUMPED_VERSION/g" | |
- name: replace version in Cargo.toml | |
if: ${{ env.BUMPED_VERSION != '' }} | |
run: (cd $COMPONENT_DIR && cargo set-version --offline $BUMPED_VERSION_SHORT) | |
- name: update BUSL change date | |
if: ${{ env.BUMPED_VERSION != '' && matrix.component == 'server' }} | |
run: | | |
change_date=$(date -d "4 years hence" +%Y-%m-01) # Round down to the 1st of the month | |
sed -i -E "/Change/s/[0-9]{4}-[0-9]{2}-[0-9]{2}/$change_date/" LICENSES/BUSL-1.1.txt | |
- name: update CHANGELOG.md | |
if: ${{ env.BUMPED_VERSION != '' }} | |
run: | | |
git cliff -c .github/workflows/cliff.toml \ | |
--include-path "$COMPONENT_DIR/**/*" \ | |
--tag-pattern "$COMPONENT" \ | |
-t "$BUMPED_VERSION" -u \ | |
-p CHANGELOG.md | |
- name: generate PR body | |
if: ${{ env.BUMPED_VERSION != '' }} | |
run: | | |
git cliff -c .github/workflows/cliff.toml \ | |
--include-path "$COMPONENT_DIR/**/*" \ | |
--tag-pattern "$COMPONENT" \ | |
-t "$BUMPED_VERSION" -u > "$RUNNER_TEMP/pr-body.txt" | |
- name: open PR | |
if: ${{ env.BUMPED_VERSION != '' }} | |
id: cpr | |
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e | |
with: | |
draft: true | |
branch: "auto-bump-${{ matrix.component }}" | |
title: ":robot: bump mm${{ matrix.component }} to ${{ env.BUMPED_VERSION }}" | |
commit-message: "chore: bump mm${{ matrix.component }} to ${{ env.BUMPED_VERSION }}" | |
body-path: "${{ runner.temp }}/pr-body.txt" | |
- name: tag branch commit | |
if: ${{ steps.cpr.outputs.pull-request-head-sha }} | |
run: | | |
git tag --force "$BUMPED_VERSION" ${{ steps.cpr.outputs.pull-request-head-sha }} | |
git push origin tag "$BUMPED_VERSION" --force |