From d32d2c97e1a7e99e665e70d05765abb017996b92 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Mon, 25 Aug 2025 15:08:37 +0200 Subject: [PATCH] chore: PR approval reminder (#2132) PR approval reminder Signed-off-by: Michele Dolfi --- .github/workflows/pr-reminders.yml | 55 ++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/pr-reminders.yml diff --git a/.github/workflows/pr-reminders.yml b/.github/workflows/pr-reminders.yml new file mode 100644 index 00000000..d602a357 --- /dev/null +++ b/.github/workflows/pr-reminders.yml @@ -0,0 +1,55 @@ +name: PR Workflow Approval Reminder + +on: + # schedule: + # - cron: "0 */6 * * *" # every 6 hours + workflow_dispatch: + +jobs: + check-prs: + runs-on: ubuntu-latest + steps: + - name: Check PRs blocked by workflow approval + id: filter + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { data: pulls } = await github.rest.pulls.list({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open' + }); + + let result = ''; + + for (const pr of pulls) { + const { data: runs } = await github.rest.actions.listWorkflowRunsForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + event: 'pull_request', + head_sha: pr.head.sha + }); + + const waitingRuns = runs.workflow_runs.filter(r => r.status === 'waiting'); + if (waitingRuns.length > 0) { + const runNames = waitingRuns.map(r => r.name).join(', '); + result += `• **PR #${pr.number}**: [${pr.title}](${pr.html_url}) \n ⏸️ Workflows: ${runNames}\n\n`; + } + } + + let message; + if (result === '') { + message = '✅ No PRs are blocked by workflow approval right now.'; + } else { + message = `🚦 **PRs waiting for maintainer approval to run workflows:**\n\n${result}`; + } + + core.setOutput('message', message); + + - name: Send message to Discord via webhook + run: | + payload=$(jq -n --arg content "${{ steps.filter.outputs.message }}" '{content: $content}') + curl -X POST -H "Content-Type: application/json" \ + -d "$payload" \ + ${{ secrets.PR_REMINDER_DISCORD_WEBHOOK }}