Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new workflow to fixup backports for release notes #3252

Merged
merged 1 commit into from
May 5, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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