diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f1c94c8..ba842e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,6 +26,54 @@ jobs: id: release uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 + merge-release-pr: + name: Merge Release PR + + runs-on: ubuntu-latest + + needs: [release-please] + + if: github.event_name == 'schedule' && needs.release-please.outputs.releases_created != 'true' + + permissions: + actions: write + contents: write + pull-requests: write + + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + + steps: + - name: Find pending release PR + id: pr + run: | + gh pr list --state open --label "autorelease: pending" --json number,headRefName,headRefOid \ + --jq '.[0] // empty | "number=\(.number)\nbranch=\(.headRefName)\nsha=\(.headRefOid)"' >> "$GITHUB_OUTPUT" + + # Pushes made with GITHUB_TOKEN don't trigger CI, so dispatch it to get the required checks + - name: Run Build & Test on release PR + if: steps.pr.outputs.number + env: + PR_NUMBER: ${{ steps.pr.outputs.number }} + PR_BRANCH: ${{ steps.pr.outputs.branch }} + run: | + gh workflow run build-test.yml --ref "$PR_BRANCH" + sleep 30 + gh pr checks "$PR_NUMBER" --required --watch --fail-fast --interval 30 + + - name: Merge release PR + if: steps.pr.outputs.number + env: + PR_NUMBER: ${{ steps.pr.outputs.number }} + PR_SHA: ${{ steps.pr.outputs.sha }} + run: gh pr merge "$PR_NUMBER" --squash --match-head-commit "$PR_SHA" + + # The merge push is made with GITHUB_TOKEN and won't start this workflow on its own + - name: Trigger release + if: steps.pr.outputs.number + run: gh workflow run release.yml --ref main + build-and-publish: name: Build & Publish