54 lines
2.1 KiB
YAML
54 lines
2.1 KiB
YAML
# Closes PRs that still have the `pr-requirements-warning` label
|
|
# after contributors were warned in pr-requirements.yml.
|
|
name: PR Requirements Enforcement
|
|
on:
|
|
schedule:
|
|
- cron: "0 0 * * *" # runs every day once at midnight
|
|
jobs:
|
|
enforce:
|
|
name: Close PRs still failing contribution requirements
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
pull-requests: write
|
|
issues: write
|
|
steps:
|
|
- name: Close PRs still failing requirements
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const { owner, repo } = context.repo;
|
|
const prs = await github.paginate(github.rest.pulls.list, {
|
|
owner,
|
|
repo,
|
|
state: "open",
|
|
per_page: 100
|
|
});
|
|
for (const pr of prs) {
|
|
// Skip draft PRs — author may still be actively working toward compliance
|
|
if (pr.draft) continue;
|
|
const labels = pr.labels.map(l => l.name);
|
|
if (!labels.includes("pr-requirements-warning")) continue;
|
|
const gracePeriod = 24 * 60 * 60 * 1000;
|
|
const lastUpdated = new Date(pr.updated_at);
|
|
const now = new Date();
|
|
if (now - lastUpdated < gracePeriod) {
|
|
console.log(`Skipping PR #${pr.number} — still within grace period`);
|
|
continue;
|
|
}
|
|
const prNumber = pr.number;
|
|
const prAuthor = pr.user.login;
|
|
await github.rest.issues.createComment({
|
|
owner,
|
|
repo,
|
|
issue_number: prNumber,
|
|
body: `Closing PR because the contribution requirements were not resolved within the 24-hour grace period.
|
|
If this was closed in error, feel free to reopen the PR after fixing the requirements.`
|
|
});
|
|
await github.rest.pulls.update({
|
|
owner,
|
|
repo,
|
|
pull_number: prNumber,
|
|
state: "closed"
|
|
});
|
|
console.log(`Closed PR #${prNumber} by ${prAuthor} (PR requirements were not met)`);
|
|
} |