]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ci: Optimize pull request labeler
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 7 May 2024 13:53:35 +0000 (15:53 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Tue, 7 May 2024 15:49:54 +0000 (17:49 +0200)
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

index 64d0facc741c058f8ad69692cb88e181cc85fdbc..a0f89dd32bc203fb6ea45589ca81c5b61baae3b9 100644 (file)
@@ -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),
+            });
           }