aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMary <mary@mary.zone>2023-07-12 18:31:08 +0200
committerGitHub <noreply@github.com>2023-07-12 18:31:08 +0200
commite61c09bc85eda86d207d557d8bde929fe69d5287 (patch)
tree0d6172a4bee635b8a9479023c59d896fc0b7e9e3
parentac2444f908bee5b5c1a13fe64e997315cea4b23c (diff)
infra: Fix PR triage once and for all (#5442)
Switch to a custom made python script that query GitHub API to grab latest state of the PR after label assign.
-rw-r--r--.github/assign/audio.yml8
-rw-r--r--.github/assign/cpu.yml11
-rw-r--r--.github/assign/global.yml4
-rw-r--r--.github/assign/gpu.yml10
-rw-r--r--.github/assign/gui.yml11
-rw-r--r--.github/assign/horizon.yml11
-rw-r--r--.github/assign/infra.yml9
-rw-r--r--.github/reviewers.yml32
-rw-r--r--.github/update_reviewers.py79
-rw-r--r--.github/workflows/pr_triage.yml48
10 files changed, 125 insertions, 98 deletions
diff --git a/.github/assign/audio.yml b/.github/assign/audio.yml
deleted file mode 100644
index 337007d3..00000000
--- a/.github/assign/audio.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-addReviewers: true
-
-reviewers:
- - marysaka
-
-filterLabels:
- include:
- - audio \ No newline at end of file
diff --git a/.github/assign/cpu.yml b/.github/assign/cpu.yml
deleted file mode 100644
index da824bdc..00000000
--- a/.github/assign/cpu.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-addReviewers: true
-
-reviewers:
- - gdkchan
- - riperiperi
- - marysaka
- - LDj3SNuD
-
-filterLabels:
- include:
- - cpu \ No newline at end of file
diff --git a/.github/assign/global.yml b/.github/assign/global.yml
deleted file mode 100644
index 53a9af42..00000000
--- a/.github/assign/global.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-addReviewers: true
-
-reviewers:
- - Ryujinx/developers \ No newline at end of file
diff --git a/.github/assign/gpu.yml b/.github/assign/gpu.yml
deleted file mode 100644
index b96d9d87..00000000
--- a/.github/assign/gpu.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-addReviewers: true
-
-reviewers:
- - gdkchan
- - riperiperi
- - marysaka
-
-filterLabels:
- include:
- - gpu \ No newline at end of file
diff --git a/.github/assign/gui.yml b/.github/assign/gui.yml
deleted file mode 100644
index 9731ea5b..00000000
--- a/.github/assign/gui.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-addReviewers: true
-
-reviewers:
- - Ack77
- - emmauss
- - TSRBerry
- - marysaka
-
-filterLabels:
- include:
- - gui \ No newline at end of file
diff --git a/.github/assign/horizon.yml b/.github/assign/horizon.yml
deleted file mode 100644
index 966382b2..00000000
--- a/.github/assign/horizon.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-addReviewers: true
-
-reviewers:
- - gdkchan
- - Ack77
- - marysaka
- - TSRBerry
-
-filterLabels:
- include:
- - horizon \ No newline at end of file
diff --git a/.github/assign/infra.yml b/.github/assign/infra.yml
deleted file mode 100644
index d319fef1..00000000
--- a/.github/assign/infra.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-addReviewers: true
-
-reviewers:
- - marysaka
- - TSRBerry
-
-filterLabels:
- include:
- - infra \ No newline at end of file
diff --git a/.github/reviewers.yml b/.github/reviewers.yml
new file mode 100644
index 00000000..83d313e3
--- /dev/null
+++ b/.github/reviewers.yml
@@ -0,0 +1,32 @@
+audio:
+ - marysaka
+
+cpu:
+ - gdkchan
+ - riperiperi
+ - marysaka
+ - LDj3SNuD
+
+gpu:
+ - gdkchan
+ - riperiperi
+ - marysaka
+
+gui:
+ - Ack77
+ - emmauss
+ - TSRBerry
+ - marysaka
+
+horizon:
+ - gdkchan
+ - Ack77
+ - marysaka
+ - TSRBerry
+
+infra:
+ - marysaka
+ - TSRBerry
+
+default:
+ - "@Ryujinx/developers"
diff --git a/.github/update_reviewers.py b/.github/update_reviewers.py
new file mode 100644
index 00000000..14c0cc28
--- /dev/null
+++ b/.github/update_reviewers.py
@@ -0,0 +1,79 @@
+from pathlib import Path
+from typing import List, Set
+from github import Github
+from github.Repository import Repository
+from github.GithubException import GithubException
+
+import sys
+import yaml
+
+
+def add_reviewers(
+ reviewers: Set[str], team_reviewers: Set[str], new_entries: List[str]
+):
+ for reviewer in new_entries:
+ if reviewer.startswith("@"):
+ team_reviewers.add(reviewer[1:])
+ else:
+ reviewers.add(reviewer)
+
+
+def update_reviewers(config, repo: Repository, pr_id: int) -> int:
+ pull_request = repo.get_pull(pr_id)
+
+ if not pull_request:
+ sys.stderr.writable(f"Unknown PR #{pr_id}\n")
+ return 1
+
+ pull_request_author = pull_request.user.login
+ reviewers = set()
+ team_reviewers = set()
+
+ for label in pull_request.labels:
+ if label.name in config:
+ add_reviewers(reviewers, team_reviewers, config[label.name])
+
+ if "default" in config:
+ add_reviewers(reviewers, team_reviewers, config["default"])
+
+ if pull_request_author in reviewers:
+ reviewers.remove(pull_request_author)
+
+ try:
+ reviewers = list(reviewers)
+ team_reviewers = list(team_reviewers)
+ print(
+ f"Attempting to assign reviewers ({reviewers}) and team_reviewers ({team_reviewers})"
+ )
+ pull_request.create_review_request(reviewers, team_reviewers)
+ return 0
+ except GithubException as e:
+ sys.stderr.write(f"Cannot assign review request for PR #{pr_id}: {e}\n")
+ return 1
+
+
+if __name__ == "__main__":
+ if len(sys.argv) != 5:
+ sys.stderr.write("usage: <token> <repo_path> <pr_id> <config_path>\n")
+ sys.exit(1)
+
+ token = sys.argv[1]
+ repo_path = sys.argv[2]
+ pr_id = int(sys.argv[3])
+ config_path = Path(sys.argv[4])
+
+ g = Github(token)
+ repo = g.get_repo(repo_path)
+
+ if not repo:
+ sys.stderr.write("Repository not found!\n")
+ sys.exit(1)
+
+ if not config_path.exists():
+ sys.stderr.write(f'Config "{config_path}" not found!\n')
+ sys.exit(1)
+
+ with open(config_path, "r") as f:
+ config = yaml.safe_load(f)
+
+ sys.exit(update_reviewers(config, repo, pr_id))
diff --git a/.github/workflows/pr_triage.yml b/.github/workflows/pr_triage.yml
index e32dd27a..86e5084f 100644
--- a/.github/workflows/pr_triage.yml
+++ b/.github/workflows/pr_triage.yml
@@ -12,43 +12,23 @@ jobs:
runs-on: ubuntu-latest
steps:
+ # Grab sources to get update_reviewers.py and reviewers.yml
+ - name: Fetch sources
+ uses: actions/checkout@v3
+ with:
+ # Ensure we pin the source origin as pull_request_target run under forks.
+ fetch-depth: 0
+ repository: Ryujinx/Ryujinx
+ ref: master
+
- name: Update labels based on changes
uses: actions/labeler@v4
with:
sync-labels: true
dot: true
- - name: Auto Assign [Audio]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/audio.yml'
-
- - name: Auto Assign [CPU]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/cpu.yml'
-
- - name: Auto Assign [GPU]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/gpu.yml'
-
- - name: Auto Assign [GUI]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/gui.yml'
-
- - name: Auto Assign [Horizon]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/horizon.yml'
-
- - name: Auto Assign [Infra]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/infra.yml'
-
- - name: Auto Assign [Global]
- uses: kentaro-m/auto-assign-action@v1.2.5
- with:
- configuration-path: '.github/assign/global.yml' \ No newline at end of file
+ - name: Assign reviewers
+ run: |
+ pip3 install PyGithub
+ python3 .github/update_reviewers.py ${{ secrets.GITHUB_TOKEN }} ${{ github.repository }} ${{ github.event.pull_request.number }} .github/reviewers.yml
+ shell: bash