From e752712743fcca855bd95cd54bd1b713f0551f4e Mon Sep 17 00:00:00 2001 From: Jules Rosser Date: Fri, 13 Mar 2026 16:45:05 -0700 Subject: [PATCH 1/6] Auto-post deploy run link to #deployer after successful cherry-pick --- .github/workflows/cherryPick.yml | 63 ++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index da5a2b15460fe..3c40bfd51b895 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -211,6 +211,69 @@ jobs: git push origin ${{ inputs.TARGET }} fi + - name: Find deploy workflow run + if: ${{ !steps.cherryPick.outputs.HAS_CONFLICTS || steps.cherryPick.outputs.HAS_CONFLICTS == 'false' }} + id: findDeployRun + run: | + PUSH_SHA=$(git rev-parse HEAD) + echo "Push SHA: $PUSH_SHA" + + DEPLOY_RUN_URL="" + for i in 1 2 3 4 5 6; do + echo "Polling for deploy run (attempt $i)..." + sleep 10 + DEPLOY_RUN_URL=$(gh api \ + "repos/${{ github.repository }}/actions/workflows/deploy.yml/runs?head_sha=$PUSH_SHA&per_page=1" \ + --jq '.workflow_runs[0].html_url // empty' 2>/dev/null || true) + if [ -n "$DEPLOY_RUN_URL" ]; then + echo "Found deploy run: $DEPLOY_RUN_URL" + break + fi + done + + if [ -z "$DEPLOY_RUN_URL" ]; then + echo "::warning::Could not find deploy workflow run for SHA $PUSH_SHA" + echo "DEPLOY_RUN_FOUND=false" >> "$GITHUB_OUTPUT" + echo "DEPLOY_RUN_URL=https://github.com/${{ github.repository }}/actions/workflows/deploy.yml" >> "$GITHUB_OUTPUT" + else + echo "DEPLOY_RUN_FOUND=true" >> "$GITHUB_OUTPUT" + echo "DEPLOY_RUN_URL=$DEPLOY_RUN_URL" >> "$GITHUB_OUTPUT" + fi + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Announce successful CP in #deployer + if: ${{ !steps.cherryPick.outputs.HAS_CONFLICTS || steps.cherryPick.outputs.HAS_CONFLICTS == 'false' }} + uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e + with: + status: custom + custom_payload: | + { + channel: '#deployer', + attachments: [{ + color: "#2EB67D", + text: `🍒 Cherry-pick to *${{ inputs.TARGET }}* successful\nPR: ${{ inputs.PULL_REQUEST_URL || '(version bump only)' }}\nDeploy workflow: ${{ steps.findDeployRun.outputs.DEPLOY_RUN_FOUND == 'true' && steps.findDeployRun.outputs.DEPLOY_RUN_URL || '⚠️ Could not locate deploy run — check ' + steps.findDeployRun.outputs.DEPLOY_RUN_URL }}` + }] + } + env: + GITHUB_TOKEN: ${{ github.token }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + - name: Write workflow summary + if: ${{ !steps.cherryPick.outputs.HAS_CONFLICTS || steps.cherryPick.outputs.HAS_CONFLICTS == 'false' }} + run: | + { + echo "## Cherry-pick successful" + echo "" + echo "**Target:** \`${{ inputs.TARGET }}\`" + echo "**PR:** ${{ inputs.PULL_REQUEST_URL || 'N/A (version bump only)' }}" + if [[ "${{ steps.findDeployRun.outputs.DEPLOY_RUN_FOUND }}" == "true" ]]; then + echo "**Deploy workflow:** ${{ steps.findDeployRun.outputs.DEPLOY_RUN_URL }}" + else + echo "**Deploy workflow:** :warning: Could not locate deploy run — check [${{ inputs.TARGET }} deploy runs](${{ steps.findDeployRun.outputs.DEPLOY_RUN_URL }})" + fi + } >> "$GITHUB_STEP_SUMMARY" + - name: Create Pull Request to manually finish CP if: steps.cherryPick.outputs.HAS_CONFLICTS == 'true' id: createPullRequest From 55a12e82e230c440e7a9fb794bbe813002c8e27c Mon Sep 17 00:00:00 2001 From: Jules Rosser Date: Fri, 13 Mar 2026 16:47:30 -0700 Subject: [PATCH 2/6] Use Slack 'good' color to match deploy.yml --- .github/workflows/cherryPick.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index 3c40bfd51b895..5db952a690322 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -251,7 +251,7 @@ jobs: { channel: '#deployer', attachments: [{ - color: "#2EB67D", + color: 'good', text: `🍒 Cherry-pick to *${{ inputs.TARGET }}* successful\nPR: ${{ inputs.PULL_REQUEST_URL || '(version bump only)' }}\nDeploy workflow: ${{ steps.findDeployRun.outputs.DEPLOY_RUN_FOUND == 'true' && steps.findDeployRun.outputs.DEPLOY_RUN_URL || '⚠️ Could not locate deploy run — check ' + steps.findDeployRun.outputs.DEPLOY_RUN_URL }}` }] } From 4acfccb2e28c0a9f2585fac4af69de1ddfa4209a Mon Sep 17 00:00:00 2001 From: Jules Rosser Date: Fri, 13 Mar 2026 16:54:05 -0700 Subject: [PATCH 3/6] Fix actionlint: move conditional text into shell output --- .github/workflows/cherryPick.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index 5db952a690322..ad7dde4bbb103 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -231,13 +231,16 @@ jobs: fi done + FALLBACK_URL="https://github.com/${{ github.repository }}/actions/workflows/deploy.yml" if [ -z "$DEPLOY_RUN_URL" ]; then echo "::warning::Could not find deploy workflow run for SHA $PUSH_SHA" echo "DEPLOY_RUN_FOUND=false" >> "$GITHUB_OUTPUT" - echo "DEPLOY_RUN_URL=https://github.com/${{ github.repository }}/actions/workflows/deploy.yml" >> "$GITHUB_OUTPUT" + echo "DEPLOY_RUN_URL=$FALLBACK_URL" >> "$GITHUB_OUTPUT" + echo "DEPLOY_RUN_MESSAGE=⚠️ Could not locate deploy run — check $FALLBACK_URL" >> "$GITHUB_OUTPUT" else echo "DEPLOY_RUN_FOUND=true" >> "$GITHUB_OUTPUT" echo "DEPLOY_RUN_URL=$DEPLOY_RUN_URL" >> "$GITHUB_OUTPUT" + echo "DEPLOY_RUN_MESSAGE=$DEPLOY_RUN_URL" >> "$GITHUB_OUTPUT" fi env: GITHUB_TOKEN: ${{ github.token }} @@ -252,7 +255,7 @@ jobs: channel: '#deployer', attachments: [{ color: 'good', - text: `🍒 Cherry-pick to *${{ inputs.TARGET }}* successful\nPR: ${{ inputs.PULL_REQUEST_URL || '(version bump only)' }}\nDeploy workflow: ${{ steps.findDeployRun.outputs.DEPLOY_RUN_FOUND == 'true' && steps.findDeployRun.outputs.DEPLOY_RUN_URL || '⚠️ Could not locate deploy run — check ' + steps.findDeployRun.outputs.DEPLOY_RUN_URL }}` + text: `🍒 Cherry-pick to *${{ inputs.TARGET }}* successful\nPR: ${{ inputs.PULL_REQUEST_URL || '(version bump only)' }}\nDeploy workflow: ${{ steps.findDeployRun.outputs.DEPLOY_RUN_MESSAGE }}` }] } env: From 5e3dda451775981bb5df6846e19ee7fb1567625b Mon Sep 17 00:00:00 2001 From: Jules Rosser Date: Fri, 13 Mar 2026 16:55:35 -0700 Subject: [PATCH 4/6] Simplify condition to != true with comment for version-bump case --- .github/workflows/cherryPick.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index ad7dde4bbb103..963460932e33f 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -212,7 +212,8 @@ jobs: fi - name: Find deploy workflow run - if: ${{ !steps.cherryPick.outputs.HAS_CONFLICTS || steps.cherryPick.outputs.HAS_CONFLICTS == 'false' }} + # HAS_CONFLICTS is unset for version-bump-only CPs (no PULL_REQUEST_URL), which also passes this check + if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }} id: findDeployRun run: | PUSH_SHA=$(git rev-parse HEAD) @@ -246,7 +247,8 @@ jobs: GITHUB_TOKEN: ${{ github.token }} - name: Announce successful CP in #deployer - if: ${{ !steps.cherryPick.outputs.HAS_CONFLICTS || steps.cherryPick.outputs.HAS_CONFLICTS == 'false' }} + # HAS_CONFLICTS is unset for version-bump-only CPs (no PULL_REQUEST_URL), which also passes this check + if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }} uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e with: status: custom @@ -263,7 +265,8 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} - name: Write workflow summary - if: ${{ !steps.cherryPick.outputs.HAS_CONFLICTS || steps.cherryPick.outputs.HAS_CONFLICTS == 'false' }} + # HAS_CONFLICTS is unset for version-bump-only CPs (no PULL_REQUEST_URL), which also passes this check + if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }} run: | { echo "## Cherry-pick successful" From 551c7a4c2191458799746b9eb396a5e6b3c52be4 Mon Sep 17 00:00:00 2001 From: Jules Rosser Date: Fri, 13 Mar 2026 16:56:12 -0700 Subject: [PATCH 5/6] Tighten comment on HAS_CONFLICTS condition --- .github/workflows/cherryPick.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index 963460932e33f..764a4d2a40638 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -212,7 +212,7 @@ jobs: fi - name: Find deploy workflow run - # HAS_CONFLICTS is unset for version-bump-only CPs (no PULL_REQUEST_URL), which also passes this check + # Also runs for version-bump-only CPs where HAS_CONFLICTS is unset if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }} id: findDeployRun run: | @@ -247,7 +247,7 @@ jobs: GITHUB_TOKEN: ${{ github.token }} - name: Announce successful CP in #deployer - # HAS_CONFLICTS is unset for version-bump-only CPs (no PULL_REQUEST_URL), which also passes this check + # Also runs for version-bump-only CPs where HAS_CONFLICTS is unset if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }} uses: 8398a7/action-slack@1750b5085f3ec60384090fb7c52965ef822e869e with: @@ -265,7 +265,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} - name: Write workflow summary - # HAS_CONFLICTS is unset for version-bump-only CPs (no PULL_REQUEST_URL), which also passes this check + # Also runs for version-bump-only CPs where HAS_CONFLICTS is unset if: ${{ steps.cherryPick.outputs.HAS_CONFLICTS != 'true' }} run: | { From 88a714bc311c681970fa7a783d13b4dceba03ca6 Mon Sep 17 00:00:00 2001 From: Jules Rosser Date: Fri, 13 Mar 2026 17:03:01 -0700 Subject: [PATCH 6/6] Fix shellcheck SC2129: group redirects to GITHUB_OUTPUT --- .github/workflows/cherryPick.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml index 764a4d2a40638..ed5756f5d8cce 100644 --- a/.github/workflows/cherryPick.yml +++ b/.github/workflows/cherryPick.yml @@ -235,13 +235,17 @@ jobs: FALLBACK_URL="https://github.com/${{ github.repository }}/actions/workflows/deploy.yml" if [ -z "$DEPLOY_RUN_URL" ]; then echo "::warning::Could not find deploy workflow run for SHA $PUSH_SHA" - echo "DEPLOY_RUN_FOUND=false" >> "$GITHUB_OUTPUT" - echo "DEPLOY_RUN_URL=$FALLBACK_URL" >> "$GITHUB_OUTPUT" - echo "DEPLOY_RUN_MESSAGE=⚠️ Could not locate deploy run — check $FALLBACK_URL" >> "$GITHUB_OUTPUT" + { + echo "DEPLOY_RUN_FOUND=false" + echo "DEPLOY_RUN_URL=$FALLBACK_URL" + echo "DEPLOY_RUN_MESSAGE=⚠️ Could not locate deploy run — check $FALLBACK_URL" + } >> "$GITHUB_OUTPUT" else - echo "DEPLOY_RUN_FOUND=true" >> "$GITHUB_OUTPUT" - echo "DEPLOY_RUN_URL=$DEPLOY_RUN_URL" >> "$GITHUB_OUTPUT" - echo "DEPLOY_RUN_MESSAGE=$DEPLOY_RUN_URL" >> "$GITHUB_OUTPUT" + { + echo "DEPLOY_RUN_FOUND=true" + echo "DEPLOY_RUN_URL=$DEPLOY_RUN_URL" + echo "DEPLOY_RUN_MESSAGE=$DEPLOY_RUN_URL" + } >> "$GITHUB_OUTPUT" fi env: GITHUB_TOKEN: ${{ github.token }}