Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 9 additions & 17 deletions .github/workflows/review-score.yml
Original file line number Diff line number Diff line change
@@ -1,43 +1,35 @@
name: Review Score Gate
on:
"on":
pull_request:
types: [opened, reopened, synchronize]
pull_request_review:
types: [submitted, edited, dismissed]
permissions:
pull-requests: read
statuses: write
contents: read
jobs:
score:
review-score-gate:
runs-on: ubuntu-latest
steps:
- name: Compute review score
uses: actions/github-script@v7
- uses: actions/github-script@v7
with:
script: |
const REQUIRED_SCORE = 1;
const TIE_GOES_TO_APPROVE = true;
const pr = context.payload.pull_request;
if (!pr) { core.info('no pr'); return; }
const author = pr.user.login;
if (!pr) { core.info('no pr context'); return; }
const reviews = await github.paginate(github.rest.pulls.listReviews,
{ owner: context.repo.owner, repo: context.repo.repo, pull_number: pr.number, per_page: 100 });
const latest = new Map();
for (const r of reviews) {
const l = r.user && r.user.login;
if (!l || l === author) continue;
if (!l || l === pr.user.login) continue;
if (r.state !== 'APPROVED' && r.state !== 'CHANGES_REQUESTED') continue;
latest.set(l, r.state);
}
let a = 0, b = 0;
for (const s of latest.values()) { if (s === 'APPROVED') a++; else b++; }
const score = a - b;
let pass = score >= REQUIRED_SCORE;
if (!pass && TIE_GOES_TO_APPROVE && a >= 1 && score === 0) pass = true;
const desc = `score ${score} (${a} approve, ${b} block), need >= ${REQUIRED_SCORE}`;
core.info(desc);
await github.rest.repos.createCommitStatus({
owner: context.repo.owner, repo: context.repo.repo, sha: pr.head.sha,
state: pass ? 'success' : 'failure', context: 'review-score', description: desc });
if (!pass) core.setFailed(desc);
let pass = score >= REQUIRED_SCORE || (TIE_GOES_TO_APPROVE && a >= 1 && score === 0);
const msg = `score ${score} (${a} approve, ${b} block), need >= ${REQUIRED_SCORE}`;
core.info(msg);
if (!pass) core.setFailed(msg);
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
# ruleset-test
# ruleset-test
edit for test
Loading