From 5dd3657f86545e0b357b8a48081317acf29fbc6c Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Tue, 7 May 2024 15:53:35 +0200 Subject: [PATCH] ci: Optimize pull request labeler We keep running into rate limits, so let's optimize the number of requests we do in the pull request labeler to hopefully fix that. --- .github/workflows/labeler.yml | 69 ++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 64d0facc74..a0f89dd32b 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -52,38 +52,34 @@ jobs: repo: context.repo.repo, }); - good_to_merge = [ + original = new Set(response.data.map(l => l.name)); + labels = new Set(original); + + good_to_merge = new Set([ "good-to-merge/waiting-for-ci 👍", "good-to-merge/after-next-release", "good-to-merge/with-minor-suggestions", "good-to-merge/waiting-for-reporter-feedback 👍", - ]; + ]); - if (response.data.every(l => !good_to_merge.includes(l.name))) { - await github.rest.issues.addLabels({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ["please-review"] - }); + if (Array.from(labels).filter(l => good_to_merge.has(l)).length == 0) { + labels.add("please-review"); } for (const label of ["reviewed/needs-rework 🔨", "ci-fails/needs-rework 🔥", "ci-failure-appears-unrelated", "needs-rebase"]) { - try { - await github.rest.issues.removeLabel({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - name: label, - }); - } catch (err) { - if (err.status != 404) { - throw err; - } - } + labels.delete(label); + } + + if (labels.size != original.size || Array.from(labels).some(l => !original.has(l))) { + await github.rest.issues.setLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: Array.from(labels), + }); } - name: Add please-review label on command in issue comment @@ -103,6 +99,15 @@ jobs: if: startsWith(github.event_name, 'pull_request') && github.event.action == 'closed' with: script: | + response = await github.rest.issues.listLabelsOnIssue({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + }); + + original = new Set(response.data.map(l => l.name)); + labels = new Set(original); + for (const label of ["please-review", "reviewed/needs-rework 🔨", "ci-fails/needs-rework 🔥", @@ -116,16 +121,14 @@ jobs: "dont-merge 💣", "squash-on-merge", "quick-review 🏃‍♂️"]) { - try { - await github.rest.issues.removeLabel({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - name: label, - }); - } catch (err) { - if (err.status != 404) { - throw err; - } - } + labels.delete(label); + } + + if (labels.size != original.size || Array.from(labels).some(l => !original.has(l))) { + await github.rest.issues.setLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: Array.from(labels), + }); }