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: