Skip to content

[ANG-631] Community Metadata Records: Download/Copy/Share buttons not visible for project and registration metadata #726

[ANG-631] Community Metadata Records: Download/Copy/Share buttons not visible for project and registration metadata

[ANG-631] Community Metadata Records: Download/Copy/Share buttons not visible for project and registration metadata #726

Workflow file for this run

# .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.`);
}