Skip to content

Commit

Permalink
Add new workflow to fixup backports for release notes (backport #3252) (
Browse files Browse the repository at this point in the history
#3253)

* Add new workflow to fixup backports for release notes (#3252)

The Mergify-generated backports do not currently include the information
needed by the release notes generation automation. This new workflow
will copy such information over to backport PRs.

(cherry picked from commit 86ccd1b)

* Fix backport-fixup for labels with spaces (#3255)

(cherry picked from commit 8f7e7e6)

---------

Co-authored-by: Jack Koenig <koenig@sifive.com>
  • Loading branch information
mergify[bot] and jackkoenig committed May 5, 2023
1 parent 5829a9b commit 0c2f249
Showing 1 changed file with 90 additions and 0 deletions.
90 changes: 90 additions & 0 deletions .github/workflows/backport-fixup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Fixes up Mergify-created backport PRs to include necessary labels and other
# information for release notes generation

name: Backport Fixup

on:
pull_request:
types: [opened]
workflow_dispatch:
inputs:
pr:
description: 'Number of the Pull Request to Fixup'
require: true

permissions:
pull-requests: write
contents: write

jobs:
resolve_prs:
name: Resolve PRs
runs-on: ubuntu-latest
# If triggering PR actually is a backport, then original_pr will be set
outputs:
backport_pr: ${{ steps.backport.outputs.pr }}
original_pr: ${{ steps.original.outputs.pr }}

steps:
- uses: actions/checkout@v3
- name: Figure out backport PR number
id: backport
run: |
if [[ -z "${{ inputs.pr }}" ]]; then
echo "pr=${{ github.event.number }}" >> "$GITHUB_OUTPUT"
else
echo "pr=${{ inputs.pr }}" >> "$GITHUB_OUTPUT"
fi
- name: Figure out original PR number (if one exists)
id: original
env:
GH_TOKEN: ${{ github.token }}
run: |
BP_PR=${{ steps.backport.outputs.pr }}
TITLE=$(gh pr view --json title --jq '.title' $BP_PR)
if [[ "$TITLE" =~ \(backport\ #([0-9]+)\) ]]; then
echo "pr=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
else
echo "$BP_PR is not a backport PR!" >> $GITHUB_STEP_SUMMARY
fi
fixup_backport:
name: Fixup the backport PR
runs-on: ubuntu-latest
needs: [resolve_prs]
if: ${{ needs.resolve_prs.outputs.original_pr }}

steps:
- uses: actions/checkout@v3
- name: Copy over labels
env:
GH_TOKEN: ${{ github.token }}
run: |
BP_PR=${{ needs.resolve_prs.outputs.backport_pr }}
ORIG_PR=${{ needs.resolve_prs.outputs.original_pr }}
# Long line but the paste joining must be done right away or we run into issues with spaces in labels
LABELS=$(gh pr view --json labels --jq '.labels | .[].name | select(. != "Backported")' $ORIG_PR | paste -sd "," -)
gh pr edit $BP_PR --add-label "$LABELS"
- name: Copy over body
env:
GH_TOKEN: ${{ github.token }}
run: |
BP_PR=${{ needs.resolve_prs.outputs.backport_pr }}
ORIG_PR=${{ needs.resolve_prs.outputs.original_pr }}
gh pr view --json body --jq '.body' $ORIG_PR > orig_body.txt
gh pr view --json body --jq '.body' $BP_PR > bp_body.txt
if grep -q '# Original PR Body' bp_body.txt; then
# Copy BP PR body but remove original PR body from bottom
sed '/# Original PR Body/q' bp_body.txt > new_bp_body.txt
echo "" >> new_bp_body.txt
else
cp bp_body.txt new_bp_body.txt
echo -e "\n----\n\n# Original PR Body\n" >> new_bp_body.txt
fi
cat orig_body.txt >> new_bp_body.txt
gh pr edit $BP_PR --body-file new_bp_body.txt

0 comments on commit 0c2f249

Please sign in to comment.