ci: reviewers.yml ping instead

This commit is contained in:
Alexander Medvedev 2026-09-13 19:31:48 +02:00
parent a096af75ea
commit feb8c605ba

View File

@ -10,14 +10,14 @@ on:
permissions: permissions:
contents: read contents: read
pull-requests: write issues: write
jobs: jobs:
request-reviewers: request-reviewers:
name: Request reviewers name: Request reviewers
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Request reviewers based on changed files - name: Notify reviewers based on changed files
uses: actions/github-script@v8 uses: actions/github-script@v8
with: with:
script: | script: |
@ -76,15 +76,42 @@ jobs:
reviewers.delete(author); reviewers.delete(author);
if (reviewers.size === 0) { if (reviewers.size === 0) {
core.info('No eligible reviewers matched the changed files.'); core.info('No reviewers matched the changed files.');
return; return;
} }
await github.rest.pulls.requestReviewers({ const mentionList = [...reviewers].sort().map((reviewer) => `@${reviewer}`);
const marker = '<!-- pumpkin-reviewers -->';
const body = [
marker,
'Review requested from:',
'',
mentionList.join(' '),
].join('\n');
const comments = await github.paginate(
github.rest.issues.listComments,
{
owner: context.repo.owner, owner: context.repo.owner,
repo: context.repo.repo, repo: context.repo.repo,
pull_number: context.issue.number, issue_number: context.issue.number,
reviewers: [...reviewers], per_page: 100,
},
);
const previousComment = comments
.filter((comment) => comment.body?.includes(marker))
.sort((a, b) => new Date(b.created_at) - new Date(a.created_at))[0];
if (previousComment?.body === body) {
core.info('Reviewer notification is already up to date.');
return;
}
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body,
}); });
core.info(`Requested reviewers: ${[...reviewers].join(', ')}`); core.info(`Notified reviewers: ${mentionList.join(', ')}`);