11name : Backport to solana-v2.0
22
33on :
4- pull_request :
5- types :
6- - labeled
7- - closed
4+ push :
5+ branches :
6+ - main
87
98jobs :
10- handle- backport :
9+ backport :
1110 runs-on : ubuntu-latest
1211 steps :
1312 - name : Checkout repository
1413 uses : actions/checkout@v3
1514
16- - name : Install GitHub CLI
17- uses : actions/setup-node@v3
15+ - name : Fetch pull request data
16+ id : pr_data
17+ env :
18+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
19+ run : |
20+ PR_NUMBER=$(gh pr list --state merged --base main --json number --jq '.[0].number')
21+ echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV
22+ LABELS=$(gh pr view $PR_NUMBER --json labels --jq '.labels[].name')
23+ echo "LABELS=$LABELS" >> $GITHUB_ENV
1824
19- - name : Determine backport condition
20- id : determine
25+ - name : Check for v2.0 label
26+ id : check_label
2127 run : |
22- if [[ "${{ github.event.pull_request.merged }}" == "true" ]] && [[ "${{ github.event.label.name }}" == "v2.0" ]]; then
23- echo "create-backport=true" >> $GITHUB_ENV
24- elif [[ "${{ github.event.label.name }}" == "v2.0" ]]; then
25- echo "wait-for-merge=true" >> $GITHUB_ENV
28+ echo "Checking labels: $LABELS"
29+ if echo "$LABELS" | grep -q "v2.0"; then
30+ echo "BACKPORT=true" >> $GITHUB_ENV
31+ else
32+ echo "BACKPORT=false" >> $GITHUB_ENV
2633 fi
2734
2835 - name : Backport changes
29- if : ${{ env.create-backport == 'true' }}
36+ if : ${{ env.BACKPORT == 'true' }}
3037 env :
3138 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
3239 run : |
@@ -39,13 +46,15 @@ jobs:
3946
4047 # Create a new branch off solana-v2.0
4148 TARGET_BRANCH="solana-v2.0"
42- BACKPORT_BRANCH="backport-${{ github.event.pull_request.number }}-to-v2.0"
49+ BACKPORT_BRANCH="backport-${{ env.PR_NUMBER }}-to-v2.0"
4350 git checkout $TARGET_BRANCH
4451 git checkout -b $BACKPORT_BRANCH
4552
4653 # Cherry-pick all commits from the PR
47- PR_BRANCH="${{ github.event.pull_request.head.ref }}"
48- git cherry-pick $(git log --reverse --format=%H origin/$PR_BRANCH) || (git cherry-pick --abort && exit 1)
54+ COMMITS=$(gh pr view ${{ env.PR_NUMBER }} --json commits --jq '.commits[].oid')
55+ for COMMIT in $COMMITS; do
56+ git cherry-pick $COMMIT || (git cherry-pick --abort && exit 1)
57+ done
4958
5059 # Push the new branch
5160 git push origin $BACKPORT_BRANCH
5463 gh pr create \
5564 --base $TARGET_BRANCH \
5665 --head $BACKPORT_BRANCH \
57- --title "Backport PR #${{ github.event.pull_request.number }} to solana-v2.0" \
58- --body "This is an automated backport of PR #${{ github.event.pull_request.number }} to the solana-v2.0 branch."
66+ --title "Backport PR #${{ env.PR_NUMBER }} to solana-v2.0" \
67+ --body "This is an automated backport of PR #${{ env.PR_NUMBER }} to the solana-v2.0 branch."
0 commit comments