Skip to content

PR review labeler #2356

PR review labeler

PR review labeler #2356

name: PR review labeler
on:
workflow_run:
workflows: ["PR review listener"]
types: [completed]
jobs:
label:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
pull-requests: write
steps:
- name: Download PR number artifact from upstream run
uses: actions/download-artifact@v5
with:
name: pr-number-${{ github.event.workflow_run.id }} # same unique name
path: .
run-id: ${{ github.event.workflow_run.id }} # ← CRITICAL: fetch from the upstream run
github-token: ${{ secrets.GITHUB_TOKEN }}
- id: pr
run: echo "number=$(cat pr.txt)" >> $GITHUB_OUTPUT
- name: Label when approved
uses: j-fulbright/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
label: 'Ready to merge'
require_committers_approval: 'true'
remove_label_when_approval_missing: 'true'
comment: '✅ This PR has been reviewed and approved — all set for merge!'
pullRequestNumber: ${{ steps.pr.outputs.number }}
- name: Remove review-related labels
if: ${{ success() }}
uses: actions/github-script@v8
with:
script: |
const { owner, repo } = context.repo;
const issue_number = ${{ steps.pr.outputs.number }};
const labelsToRemove = ["Needs review", "Work in progress", "Backlog", "Can be closed?", "Help needed", "Needs Documentation"];
for (const name of labelsToRemove) {
try {
await github.rest.issues.removeLabel({ owner, repo, issue_number, name });
core.info(`Removed label "${name}"`);
} catch (e) {
core.warning(`Could not remove label "${name}": ${e.message}`);
}
}