Open Release PR for review #124
Workflow file for this run
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: | |
create: | |
branches: | |
name: Open Release PR for review | |
jobs: | |
# This job is necessary because GitHub does not (yet) support | |
# filtering `create` triggers by branch name. | |
# See: https://github.saobby.my.eu.orgmunity/t/trigger-job-on-branch-created/16878/5 | |
should_create_pr: | |
name: Check if PR for branch already exists | |
runs-on: ubuntu-latest | |
outputs: | |
result: ${{ steps.is_release_branch_without_pr.outputs.result }} | |
steps: | |
- id: is_release_branch_without_pr | |
name: Find matching PR | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
// Search for an existing PR with head & base | |
// that match the created branch | |
const [releaseBranchName] = context.ref.match("release/v[0-9]+\.[0-9]+\.[0-9]+") || [] | |
if(!releaseBranchName) { return false } | |
const {data: prs} = await github.rest.pulls.list({ | |
...context.repo, | |
state: 'open', | |
head: `1Password:${releaseBranchName}`, | |
base: context.payload.master_branch | |
}) | |
return prs.length === 0 | |
create_pr: | |
needs: should_create_pr | |
if: needs.should_create_pr.outputs.result == 'true' | |
name: Create Release Pull Request | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Parse release version | |
id: get_version | |
run: echo "::set-output name=version::`echo "${GITHUB_REF}" | sed 's|^refs/heads/release/v?*||g'`" | |
- name: Prepare Pull Request | |
id: prep_pr | |
run: | | |
CHANGELOG_PATH=$(printf "%s/CHANGELOG.md" "${GITHUB_WORKSPACE}") | |
LOG_ENTRY=$(awk '/START\/v[0-9]+\.[0-9]+\.[0-9]+*/{f=1; next} /---/{if (f == 1) exit} f' "${CHANGELOG_PATH}") | |
export PR_BODY=$(cat <<EOF | |
This is an automated PR for a new release. | |
Please check the following before approving: | |
- [ ] Changelog is accurate. The documented changes for this release are printed below. | |
- [ ] Any files referencing a version number. Confirm it matches the version number in the branch name. | |
--- | |
## Release Changelog Preview | |
${LOG_ENTRY} | |
EOF | |
) | |
# Sanitizes multiline strings for action outputs (https://medium.com/agorapulse-stories/23f56447d209) | |
PR_BODY="${PR_BODY//'%'/'%25'}" | |
PR_BODY="${PR_BODY//$'\n'/'%0A'}" | |
PR_BODY="${PR_BODY//$'\r'/'%0D'}" | |
echo "::set-output name=pr_body::$(echo "$PR_BODY")" | |
- name: Create Pull Request via API | |
id: post_pr | |
uses: octokit/request-action@v2.x | |
with: | |
route: POST /repos/${{ github.repository }}/pulls | |
title: ${{ format('Prepare Release - v{0}', steps.get_version.outputs.version) }} | |
head: ${{ github.ref }} | |
base: ${{ github.event.master_branch }} | |
body: ${{ toJson(steps.prep_pr.outputs.pr_body) }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |