Skip to content

Commit

Permalink
Add new workflow to fixup backports for release notes (#3252)
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
jackkoenig authored and mergify[bot] committed May 5, 2023
1 parent fd0e0f2 commit 83df9fb
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 }}
LABELS=$(gh pr view --json labels --jq '.labels | .[].name | select(. != "Backported")' $ORIG_PR)
for label in $LABELS; do
gh pr edit $BP_PR --add-label $label
done
- 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 83df9fb

Please sign in to comment.