diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index cdb200a94..efd28f5e4 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -36,7 +36,7 @@ jobs: } const sizeLabels = ["size: XS", "size: S", "size: M", "size: L", "size: XL"]; - const labelColor = "fbca04"; + const labelColor = "b76e79"; for (const label of sizeLabels) { try { @@ -114,7 +114,7 @@ jobs: issue_number: pullRequest.number, labels: [targetSizeLabel], }); - - name: Apply maintainer label for org members + - name: Apply maintainer or trusted-contributor label uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 with: github-token: ${{ steps.app-token.outputs.token }} @@ -124,6 +124,12 @@ jobs: 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; try { 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; } - await github.rest.issues.addLabels({ - ...context.repo, - issue_number: context.payload.pull_request.number, - labels: ["maintainer"], + const mergedQuery = `repo:${repo} is:pr is:merged author:${login}`; + const merged = await github.rest.search.issuesAndPullRequests({ + q: mergedQuery, + 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: permissions: @@ -158,7 +187,7 @@ jobs: with: app-id: "2729701" 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 with: github-token: ${{ steps.app-token.outputs.token }} @@ -168,6 +197,12 @@ jobs: 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; try { 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; } - await github.rest.issues.addLabels({ - ...context.repo, - issue_number: context.payload.issue.number, - labels: ["maintainer"], + const mergedQuery = `repo:${repo} is:pr is:merged author:${login}`; + const merged = await github.rest.search.issuesAndPullRequests({ + q: mergedQuery, + 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], + }); + }