Skip to content

Renovate can create unlimited prs during morning monday hours, limit overall renovate prs to 20 #372

Renovate can create unlimited prs during morning monday hours, limit overall renovate prs to 20

Renovate can create unlimited prs during morning monday hours, limit overall renovate prs to 20 #372

Workflow file for this run

name: PR Approval Check
on:
pull_request_review:
types: [submitted, dismissed]
jobs:
check-approvals:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Check required approvals
uses: actions/github-script@450193c5abd4cdb17ba9f3ffcfe8f635c4bb6c2a
with:
script: |
const pr = context.payload.pull_request;
const reviews = await github.rest.pulls.listReviews({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
});
// Count unique human approvals (latest review per user)
const latestByUser = {};
for (const review of reviews.data) {
if (review.user.type === 'Bot') continue;
latestByUser[review.user.login] = review.state;
}
const approvalCount = Object.values(latestByUser)
.filter(state => state === 'APPROVED').length;
// Determine if PR author is a bot/GitHub Actions
const authorType = pr.user.type; // 'Bot' vs 'User'
const authorLogin = pr.user.login; // e.g. 'github-actions[bot]'
const isBot = authorType === 'Bot' || authorLogin.endsWith('[bot]');
const required = isBot ? 2 : 1;
console.log(`PR author: ${authorLogin} (${authorType}), isBot: ${isBot}`);
console.log(`Approvals: ${approvalCount} / ${required} required`);
if (approvalCount < required) {
core.setFailed(
`This PR needs ${required} human approval(s) but has ${approvalCount}. ` +
`(Author is ${isBot ? 'a bot' : 'human'})`
);
}