From 66e990317c80c20bdd630cf73a5a740c25d3b8bd Mon Sep 17 00:00:00 2001 From: Ella <ella@vandurpe.com> Date: Thu, 27 Jun 2024 08:53:58 +0300 Subject: [PATCH 1/5] retrieve PR --- .github/workflows/cherry-pick-wp-release.yml | 34 ++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/.github/workflows/cherry-pick-wp-release.yml b/.github/workflows/cherry-pick-wp-release.yml index d1089aa99f6ae..a625c3768de99 100644 --- a/.github/workflows/cherry-pick-wp-release.yml +++ b/.github/workflows/cherry-pick-wp-release.yml @@ -1,10 +1,9 @@ name: Auto Cherry-Pick on: - pull_request: - types: [closed, labeled] + push: branches: - - trunk + - test/trunk # Ensure that new jobs wait for the previous job to finish. concurrency: @@ -14,14 +13,31 @@ concurrency: jobs: cherry-pick: runs-on: ubuntu-latest - if: github.event.pull_request.merged == true steps: - name: Determine if label should trigger cherry-pick id: label-check uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | - const labels = context.payload.pull_request.labels.map(label => label.name); + const prs = await github.rest.repos.listPullRequestsAssociatedWithCommit({ + owner: context.repo.owner, + repo: context.repo.repo, + commit_sha: context.sha, + }); + if (prs.data.length === 0) { + console.log(`No PR found for commit ${context.sha}.`); + return; + } + const pr_number = prs.data[0].number; + console.log(`PR: ${pr_number}`); + core.exportVariable('pr_number', pr_number); + + const pr = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pr_number, + }); + const labels = pr.data.labels.map(label => label.name); console.log(`Labels: ${labels}`); const regex = /^Backport to WP ([0-9]+\.[0-9]+) Beta\/RC$/; let matched = false; @@ -59,7 +75,7 @@ jobs: if: env.cherry_pick == 'true' run: | TARGET_BRANCH="wp/${{ env.version }}" - COMMIT_SHA=$(jq -r '.pull_request.merge_commit_sha' "$GITHUB_EVENT_PATH") + COMMIT_SHA=$(jq -r '.after' "$GITHUB_EVENT_PATH") echo "Target branch: $TARGET_BRANCH" echo "Commit SHA: $COMMIT_SHA" git checkout $TARGET_BRANCH @@ -80,7 +96,7 @@ jobs: uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | - const prNumber = context.issue.number; + const prNumber = process.env.pr_number; const version = process.env.version; console.log(`prNumber: ${prNumber}`); console.log(`version: ${version}`); @@ -104,7 +120,7 @@ jobs: uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | - const prNumber = context.issue.number; + const prNumber = process.env.pr_number; const commitSha = process.env.commit_sha; const targetBranch = `wp/${process.env.version}`; console.log(`prNumber: ${prNumber}`); @@ -122,7 +138,7 @@ jobs: uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | - const prNumber = context.issue.number; + const prNumber = process.env.pr_number; const commitSha = process.env.commit_sha; const targetBranch = `wp/${process.env.version}`; console.log(`prNumber: ${prNumber}`); From 49606daf684d4f67a3b335efc96f50413f903761 Mon Sep 17 00:00:00 2001 From: Ella <ella@vandurpe.com> Date: Thu, 27 Jun 2024 09:02:34 +0300 Subject: [PATCH 2/5] Change target back to trunk --- .github/workflows/cherry-pick-wp-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cherry-pick-wp-release.yml b/.github/workflows/cherry-pick-wp-release.yml index a625c3768de99..857e60fbcb308 100644 --- a/.github/workflows/cherry-pick-wp-release.yml +++ b/.github/workflows/cherry-pick-wp-release.yml @@ -3,7 +3,7 @@ name: Auto Cherry-Pick on: push: branches: - - test/trunk + - trunk # Ensure that new jobs wait for the previous job to finish. concurrency: From 1bbc562abcaa2552cc3f3666e15378c2915b5943 Mon Sep 17 00:00:00 2001 From: Ella <ella@vandurpe.com> Date: Thu, 27 Jun 2024 10:44:25 +0300 Subject: [PATCH 3/5] Also run when labelling after merge --- .github/workflows/cherry-pick-wp-release.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cherry-pick-wp-release.yml b/.github/workflows/cherry-pick-wp-release.yml index 857e60fbcb308..6020e8f6375f8 100644 --- a/.github/workflows/cherry-pick-wp-release.yml +++ b/.github/workflows/cherry-pick-wp-release.yml @@ -4,6 +4,11 @@ on: push: branches: - trunk + # We also want to attempt cherry-picking when a PR is labeled after the PR + # is merged. + pull_request: + types: + - labeled # Ensure that new jobs wait for the previous job to finish. concurrency: @@ -13,16 +18,20 @@ concurrency: jobs: cherry-pick: runs-on: ubuntu-latest + # When in the context of a PR, ensure the PR is merged. + if: github.event.pull_request == null || github.event.pull_request.merged == true steps: - name: Determine if label should trigger cherry-pick id: label-check uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: script: | + const commit_sha = context.payload.pull_request ? context.payload.pull_request.merge_commit_sha : context.sha; + console.log(`Commit SHA: ${commit_sha}`); const prs = await github.rest.repos.listPullRequestsAssociatedWithCommit({ owner: context.repo.owner, repo: context.repo.repo, - commit_sha: context.sha, + commit_sha, }); if (prs.data.length === 0) { console.log(`No PR found for commit ${context.sha}.`); From 15fffa2cc29e2f6e611770b22e69c956e2bf3808 Mon Sep 17 00:00:00 2001 From: Ella <ella@vandurpe.com> Date: Thu, 27 Jun 2024 10:53:18 +0300 Subject: [PATCH 4/5] Fix commit sha --- .github/workflows/cherry-pick-wp-release.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cherry-pick-wp-release.yml b/.github/workflows/cherry-pick-wp-release.yml index 6020e8f6375f8..ea0c6c78e563e 100644 --- a/.github/workflows/cherry-pick-wp-release.yml +++ b/.github/workflows/cherry-pick-wp-release.yml @@ -28,6 +28,7 @@ jobs: script: | const commit_sha = context.payload.pull_request ? context.payload.pull_request.merge_commit_sha : context.sha; console.log(`Commit SHA: ${commit_sha}`); + core.exportVariable('commit_sha', commit_sha); const prs = await github.rest.repos.listPullRequestsAssociatedWithCommit({ owner: context.repo.owner, repo: context.repo.repo, @@ -84,19 +85,18 @@ jobs: if: env.cherry_pick == 'true' run: | TARGET_BRANCH="wp/${{ env.version }}" - COMMIT_SHA=$(jq -r '.after' "$GITHUB_EVENT_PATH") + COMMIT_SHA="${{ env.commit_sha }}" echo "Target branch: $TARGET_BRANCH" echo "Commit SHA: $COMMIT_SHA" git checkout $TARGET_BRANCH git cherry-pick $COMMIT_SHA || echo "cherry-pick-failed" > result if [ -f result ] && grep -q "cherry-pick-failed" result; then echo "conflict=true" >> $GITHUB_ENV - echo "commit_sha=$COMMIT_SHA" >> $GITHUB_ENV git cherry-pick --abort else - NEW_COMMIT_SHA=$(git rev-parse HEAD) + CHERRY_PICK_SHA=$(git rev-parse HEAD) echo "conflict=false" >> $GITHUB_ENV - echo "commit_sha=$NEW_COMMIT_SHA" >> $GITHUB_ENV + echo "cherry_pick_sha=$CHERRY_PICK_SHA" >> $GITHUB_ENV git push origin $TARGET_BRANCH fi @@ -130,16 +130,16 @@ jobs: with: script: | const prNumber = process.env.pr_number; - const commitSha = process.env.commit_sha; + const cherryPickSha = process.env.cherry_pick_sha; const targetBranch = `wp/${process.env.version}`; console.log(`prNumber: ${prNumber}`); - console.log(`commitSha: ${commitSha}`); + console.log(`cherryPickSha: ${cherryPickSha}`); console.log(`targetBranch: ${targetBranch}`); await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: prNumber, - body: `I just cherry-picked this PR to the ${targetBranch} branch to get it included in the next release: ${commitSha}` + body: `I just cherry-picked this PR to the ${targetBranch} branch to get it included in the next release: ${cherryPickSha}` }); - name: Comment on the PR about conflict From bf5d9aabd9ae66aa1f6ded9b886d77e621a511dd Mon Sep 17 00:00:00 2001 From: Ella <ella@vandurpe.com> Date: Thu, 27 Jun 2024 11:02:30 +0300 Subject: [PATCH 5/5] Only run on trunk based PRs --- .github/workflows/cherry-pick-wp-release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cherry-pick-wp-release.yml b/.github/workflows/cherry-pick-wp-release.yml index ea0c6c78e563e..b43b0cc267314 100644 --- a/.github/workflows/cherry-pick-wp-release.yml +++ b/.github/workflows/cherry-pick-wp-release.yml @@ -7,8 +7,9 @@ on: # We also want to attempt cherry-picking when a PR is labeled after the PR # is merged. pull_request: - types: - - labeled + types: [labeled] + branches: + - trunk # Ensure that new jobs wait for the previous job to finish. concurrency: