Fix/ang-925 - Addons fixes #713
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
# .github/workflows/require-approval.yml | |
name: Require at least one approval | |
on: | |
pull_request: | |
types: [opened, reopened, ready_for_review, synchronize, edited] | |
jobs: | |
check-approval: | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: read | |
contents: read | |
steps: | |
- name: Ensure ≥1 approving review exists | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const { owner, repo } = context.repo; | |
// Determine PR number for both pull_request and pull_request_review events | |
let number; | |
if (context.payload.pull_request?.number) { | |
number = context.payload.pull_request.number; | |
} else if (context.payload.review?.pull_request_url) { | |
number = Number(context.payload.review.pull_request_url.split('/').pop()); | |
} else { | |
core.setFailed('Cannot determine PR number from event payload.'); | |
return; | |
} | |
// Retrieve all reviews | |
const reviews = await github.paginate( | |
github.rest.pulls.listReviews, | |
{ owner, repo, pull_number: number } | |
); | |
// Keep only each user's latest review | |
const latestByUser = new Map(); | |
for (const r of reviews) latestByUser.set(r.user.id, r.state); | |
const approvals = [...latestByUser.values()].filter(s => s === 'APPROVED').length; | |
const hasRequestChanges = [...latestByUser.values()].includes('CHANGES_REQUESTED'); | |
if (approvals < 1) { | |
core.setFailed(`PR #${number} requires at least one approving review before merging.`); | |
} else if (hasRequestChanges) { | |
core.setFailed(`PR #${number} cannot be merged because at least one reviewer has requested changes.`); | |
} else { | |
core.info(`Approvals found: ${approvals}. Check passed.`); | |
} |