From 4a7b0e7365856282ae2926fed7f199246d73a6b4 Mon Sep 17 00:00:00 2001 From: Julian Dominguez-Schatz Date: Thu, 6 Feb 2025 08:37:42 -0500 Subject: [PATCH] Add an action to automatically generate release PRs (#4306) * Add an action to automatically generate release PRs * Add release notes * PR feedback: error handling --- .github/actions/bump-package-versions | 26 +++++++++++++++++ .github/workflows/generate-release-pr.yml | 35 +++++++++++++++++++++++ upcoming-release-notes/4306.md | 6 ++++ 3 files changed, 67 insertions(+) create mode 100755 .github/actions/bump-package-versions create mode 100644 .github/workflows/generate-release-pr.yml create mode 100644 upcoming-release-notes/4306.md diff --git a/.github/actions/bump-package-versions b/.github/actions/bump-package-versions new file mode 100755 index 0000000000..5249e7064f --- /dev/null +++ b/.github/actions/bump-package-versions @@ -0,0 +1,26 @@ +#!/bin/bash +set -euo pipefail + +version="${1#v}" + +files_to_bump=( + packages/api/package.json + packages/desktop-client/package.json + packages/desktop-electron/package.json +) + +for file in "${files_to_bump[@]}"; do + if [ -z "$version" ]; then + # version format: YY.MM.patch + # logic: if before the 25th, bump patch, else set minor/major to next month + version="$(jq -r .version "$file" | perl -e '($y,$m,$p)=split/\./,<>;$d=(localtime)[3];$d>25?($p=0,++$m,$m>12&&($m=1,++$y)):$p++;print"$y.$m.$p\n"')" + if [ -z "$version" ]; then + echo "Error: Failed to calculate new version" >&2 + exit 1 + fi + fi + + echo "Bumping $file to version $version" + jq '.version = "'"$version"'"' "$file" > "$file.tmp" + mv "$file.tmp" "$file" +done diff --git a/.github/workflows/generate-release-pr.yml b/.github/workflows/generate-release-pr.yml new file mode 100644 index 0000000000..4665f4690d --- /dev/null +++ b/.github/workflows/generate-release-pr.yml @@ -0,0 +1,35 @@ +name: Generate release PR + +on: + workflow_dispatch: + inputs: + ref: + description: 'Commit or branch to release' + required: true + default: 'master' + version: + description: 'Version number for the release (optional)' + required: false + default: '' + +jobs: + generate-release-pr: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event.inputs.ref }} + - name: Bump package versions + id: bump_package_versions + shell: bash + run: | + .github/actions/bump-package-versions ${{ github.event.inputs.version }} + echo "version=$(jq -r .version packages/desktop-client/package.json)" > $GITHUB_OUTPUT + - name: Create PR + uses: peter-evans/create-pull-request@v7 + with: + commit-message: '🔖 (${{ steps.bump_package_versions.outputs.version }})' + title: '🔖 (${{ steps.bump_package_versions.outputs.version }})' + body: 'Generated by [generate-release-pr.yml](../tree/master/.github/workflows/generate-release-pr.yml)' + branch: 'release/v${{ steps.bump_package_versions.outputs.version }}' diff --git a/upcoming-release-notes/4306.md b/upcoming-release-notes/4306.md new file mode 100644 index 0000000000..277bfa812d --- /dev/null +++ b/upcoming-release-notes/4306.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [jfdoming] +--- + +Add an action to automatically generate release PRs