CI: add contributor tier labels

This commit is contained in:
Shadow
2026-02-12 14:31:25 -06:00
parent d8d8109711
commit 1f41f7b1e6
+71 -13
View File
@@ -36,7 +36,7 @@ jobs:
} }
const sizeLabels = ["size: XS", "size: S", "size: M", "size: L", "size: XL"]; const sizeLabels = ["size: XS", "size: S", "size: M", "size: L", "size: XL"];
const labelColor = "fbca04"; const labelColor = "b76e79";
for (const label of sizeLabels) { for (const label of sizeLabels) {
try { try {
@@ -114,7 +114,7 @@ jobs:
issue_number: pullRequest.number, issue_number: pullRequest.number,
labels: [targetSizeLabel], labels: [targetSizeLabel],
}); });
- name: Apply maintainer label for org members - name: Apply maintainer or trusted-contributor label
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with: with:
github-token: ${{ steps.app-token.outputs.token }} github-token: ${{ steps.app-token.outputs.token }}
@@ -124,6 +124,12 @@ jobs:
return; return;
} }
const repo = `${context.repo.owner}/${context.repo.repo}`;
const trustedLabel = "trusted-contributor";
const experiencedLabel = "experienced-contributor";
const trustedThreshold = 4;
const experiencedThreshold = 10;
let isMaintainer = false; let isMaintainer = false;
try { try {
const membership = await github.rest.teams.getMembershipForUserInOrg({ const membership = await github.rest.teams.getMembershipForUserInOrg({
@@ -138,15 +144,38 @@ jobs:
} }
} }
if (!isMaintainer) { if (isMaintainer) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.pull_request.number,
labels: ["maintainer"],
});
return; return;
} }
await github.rest.issues.addLabels({ const mergedQuery = `repo:${repo} is:pr is:merged author:${login}`;
...context.repo, const merged = await github.rest.search.issuesAndPullRequests({
issue_number: context.payload.pull_request.number, q: mergedQuery,
labels: ["maintainer"], per_page: 1,
}); });
const mergedCount = merged?.data?.total_count ?? 0;
if (mergedCount >= experiencedThreshold) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.pull_request.number,
labels: [experiencedLabel],
});
return;
}
if (mergedCount >= trustedThreshold) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.pull_request.number,
labels: [trustedLabel],
});
}
label-issues: label-issues:
permissions: permissions:
@@ -158,7 +187,7 @@ jobs:
with: with:
app-id: "2729701" app-id: "2729701"
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
- name: Apply maintainer label for org members - name: Apply maintainer or trusted-contributor label
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with: with:
github-token: ${{ steps.app-token.outputs.token }} github-token: ${{ steps.app-token.outputs.token }}
@@ -168,6 +197,12 @@ jobs:
return; return;
} }
const repo = `${context.repo.owner}/${context.repo.repo}`;
const trustedLabel = "trusted-contributor";
const experiencedLabel = "experienced-contributor";
const trustedThreshold = 4;
const experiencedThreshold = 10;
let isMaintainer = false; let isMaintainer = false;
try { try {
const membership = await github.rest.teams.getMembershipForUserInOrg({ const membership = await github.rest.teams.getMembershipForUserInOrg({
@@ -182,12 +217,35 @@ jobs:
} }
} }
if (!isMaintainer) { if (isMaintainer) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.issue.number,
labels: ["maintainer"],
});
return; return;
} }
await github.rest.issues.addLabels({ const mergedQuery = `repo:${repo} is:pr is:merged author:${login}`;
...context.repo, const merged = await github.rest.search.issuesAndPullRequests({
issue_number: context.payload.issue.number, q: mergedQuery,
labels: ["maintainer"], per_page: 1,
}); });
const mergedCount = merged?.data?.total_count ?? 0;
if (mergedCount >= experiencedThreshold) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.issue.number,
labels: [experiencedLabel],
});
return;
}
if (mergedCount >= trustedThreshold) {
await github.rest.issues.addLabels({
...context.repo,
issue_number: context.payload.issue.number,
labels: [trustedLabel],
});
}