forked from Qiskit/qiskit
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add action to copy metadata to backport
- Loading branch information
1 parent
e599713
commit b015844
Showing
1 changed file
with
49 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
name: Backport metadata | ||
|
||
# Mergify manages the opening of the backport PR, this workflow is just to extend its behaviour to | ||
# do useful things like copying across the tagged labels and milestone from the base PR. | ||
|
||
on: | ||
pull_request_target: | ||
types: | ||
- opened | ||
branches: | ||
- 'stable/*' | ||
|
||
jobs: | ||
copy_metadata: | ||
name: Copy labels from base PR | ||
runs-on: ubuntu-latest | ||
if: github.repository == 'Qiskit/qiskit' && github.actor == 'mergify[bot]' | ||
|
||
permissions: | ||
pull-requests: write | ||
env: | ||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
set -e | ||
# Split Mergify's branch name (e.g. 'mergify/bp/stable/0.25/pr-10828') on the final '-' to get | ||
# the number of the base PR. | ||
IFS='-' read -ra split <<< "${{ github.ref_name }}" | ||
base_pr=${split[-1]} | ||
gh pr view $base_pr --json labels,milestone > base_pr.json | ||
add_labels="$(jq '[.labels[].name] - ["stable backport potential"] | join(",")' base_pr.json)" | ||
echo "New labels: '$add_labels'" | ||
# 'jq' converts a JSON 'null' into the empty string. | ||
milestone="$(jq '.milestone' base_pr.json)" | ||
echo "Milestone: '$milestone'" | ||
echo "Targetting current PR '${{ github.event.number }}'" | ||
# The GitHub API is sometimes weird about calling options with empty values - the REST API | ||
# certainly treats "add-label" with an empty input _not_ as a no-op but as a clear of all | ||
# labels, which is quite different to its normal additive behaviour when there's labels given. | ||
if [[ -n "$add_labels" && -n "$milestone" ]]; then | ||
gh pr edit ${{ github.event.number }} --add-label "$add_labels" --milestone "$milestone" | ||
elif [[ -n "$add_labels" ]]; then | ||
gh pr edit ${{ github.event.number }} --add-label "$add_labels" | ||
elif [[ -n "$milestone" ]]; then | ||
gh pr edit ${{ github.event.number }} --milestone "$milestone" | ||
fi |