From 556a06819f6f5138539e122bf023263579013b7f Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 12 Jan 2026 11:52:05 +0000 Subject: [PATCH 1/3] remove hardcoded review team --- workload/SimSysCodeReviewers.json | 149 ++++++++++++++++++++++++++++++ workload/workload.py | 21 ++--- 2 files changed, 156 insertions(+), 14 deletions(-) create mode 100644 workload/SimSysCodeReviewers.json diff --git a/workload/SimSysCodeReviewers.json b/workload/SimSysCodeReviewers.json new file mode 100644 index 00000000..6ec42116 --- /dev/null +++ b/workload/SimSysCodeReviewers.json @@ -0,0 +1,149 @@ +[ + { + "login": "yaswant", + "id": 2984440, + "node_id": "MDQ6VXNlcjI5ODQ0NDA=", + "avatar_url": "https://avatars.githubusercontent.com/u/2984440?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/yaswant", + "html_url": "https://github.com/yaswant", + "followers_url": "https://api.github.com/users/yaswant/followers", + "following_url": "https://api.github.com/users/yaswant/following{/other_user}", + "gists_url": "https://api.github.com/users/yaswant/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yaswant/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yaswant/subscriptions", + "organizations_url": "https://api.github.com/users/yaswant/orgs", + "repos_url": "https://api.github.com/users/yaswant/repos", + "events_url": "https://api.github.com/users/yaswant/events{/privacy}", + "received_events_url": "https://api.github.com/users/yaswant/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + { + "login": "christophermaynard", + "id": 13464564, + "node_id": "MDQ6VXNlcjEzNDY0NTY0", + "avatar_url": "https://avatars.githubusercontent.com/u/13464564?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/christophermaynard", + "html_url": "https://github.com/christophermaynard", + "followers_url": "https://api.github.com/users/christophermaynard/followers", + "following_url": "https://api.github.com/users/christophermaynard/following{/other_user}", + "gists_url": "https://api.github.com/users/christophermaynard/gists{/gist_id}", + "starred_url": "https://api.github.com/users/christophermaynard/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/christophermaynard/subscriptions", + "organizations_url": "https://api.github.com/users/christophermaynard/orgs", + "repos_url": "https://api.github.com/users/christophermaynard/repos", + "events_url": "https://api.github.com/users/christophermaynard/events{/privacy}", + "received_events_url": "https://api.github.com/users/christophermaynard/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + { + "login": "jennyhickson", + "id": 61183013, + "node_id": "MDQ6VXNlcjYxMTgzMDEz", + "avatar_url": "https://avatars.githubusercontent.com/u/61183013?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jennyhickson", + "html_url": "https://github.com/jennyhickson", + "followers_url": "https://api.github.com/users/jennyhickson/followers", + "following_url": "https://api.github.com/users/jennyhickson/following{/other_user}", + "gists_url": "https://api.github.com/users/jennyhickson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jennyhickson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jennyhickson/subscriptions", + "organizations_url": "https://api.github.com/users/jennyhickson/orgs", + "repos_url": "https://api.github.com/users/jennyhickson/repos", + "events_url": "https://api.github.com/users/jennyhickson/events{/privacy}", + "received_events_url": "https://api.github.com/users/jennyhickson/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + { + "login": "MGEX82", + "id": 103578442, + "node_id": "U_kgDOBix7Sg", + "avatar_url": "https://avatars.githubusercontent.com/u/103578442?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MGEX82", + "html_url": "https://github.com/MGEX82", + "followers_url": "https://api.github.com/users/MGEX82/followers", + "following_url": "https://api.github.com/users/MGEX82/following{/other_user}", + "gists_url": "https://api.github.com/users/MGEX82/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MGEX82/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MGEX82/subscriptions", + "organizations_url": "https://api.github.com/users/MGEX82/orgs", + "repos_url": "https://api.github.com/users/MGEX82/repos", + "events_url": "https://api.github.com/users/MGEX82/events{/privacy}", + "received_events_url": "https://api.github.com/users/MGEX82/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + { + "login": "james-bruten-mo", + "id": 109733895, + "node_id": "U_kgDOBopoBw", + "avatar_url": "https://avatars.githubusercontent.com/u/109733895?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/james-bruten-mo", + "html_url": "https://github.com/james-bruten-mo", + "followers_url": "https://api.github.com/users/james-bruten-mo/followers", + "following_url": "https://api.github.com/users/james-bruten-mo/following{/other_user}", + "gists_url": "https://api.github.com/users/james-bruten-mo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/james-bruten-mo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/james-bruten-mo/subscriptions", + "organizations_url": "https://api.github.com/users/james-bruten-mo/orgs", + "repos_url": "https://api.github.com/users/james-bruten-mo/repos", + "events_url": "https://api.github.com/users/james-bruten-mo/events{/privacy}", + "received_events_url": "https://api.github.com/users/james-bruten-mo/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + { + "login": "oakleybrunt", + "id": 130391369, + "node_id": "U_kgDOB8WdSQ", + "avatar_url": "https://avatars.githubusercontent.com/u/130391369?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/oakleybrunt", + "html_url": "https://github.com/oakleybrunt", + "followers_url": "https://api.github.com/users/oakleybrunt/followers", + "following_url": "https://api.github.com/users/oakleybrunt/following{/other_user}", + "gists_url": "https://api.github.com/users/oakleybrunt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/oakleybrunt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/oakleybrunt/subscriptions", + "organizations_url": "https://api.github.com/users/oakleybrunt/orgs", + "repos_url": "https://api.github.com/users/oakleybrunt/repos", + "events_url": "https://api.github.com/users/oakleybrunt/events{/privacy}", + "received_events_url": "https://api.github.com/users/oakleybrunt/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + }, + { + "login": "MetBenjaminWent", + "id": 136574563, + "node_id": "U_kgDOCCP2Yw", + "avatar_url": "https://avatars.githubusercontent.com/u/136574563?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/MetBenjaminWent", + "html_url": "https://github.com/MetBenjaminWent", + "followers_url": "https://api.github.com/users/MetBenjaminWent/followers", + "following_url": "https://api.github.com/users/MetBenjaminWent/following{/other_user}", + "gists_url": "https://api.github.com/users/MetBenjaminWent/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MetBenjaminWent/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MetBenjaminWent/subscriptions", + "organizations_url": "https://api.github.com/users/MetBenjaminWent/orgs", + "repos_url": "https://api.github.com/users/MetBenjaminWent/repos", + "events_url": "https://api.github.com/users/MetBenjaminWent/events{/privacy}", + "received_events_url": "https://api.github.com/users/MetBenjaminWent/received_events", + "type": "User", + "user_view_type": "public", + "site_admin": false + } +] diff --git a/workload/workload.py b/workload/workload.py index 1ee0b670..0138810b 100644 --- a/workload/workload.py +++ b/workload/workload.py @@ -22,15 +22,6 @@ "growss", ] -# Ideally get this list another way but for now hardcode it. -other_reviewers = [ - "MetBenjaminWent", - "jedbakerMO", - # Chris Maynard - # James CS - # Oakley Brunt -] - class ProjectData: """ @@ -265,14 +256,11 @@ def main(total: bool, test: bool, capture_project: bool): # Extract data from github about the reviews and team members. data = ProjectData(test, capture_project) - other_team = Team(test=test) - other_team.members = other_reviewers - teams = { "SSD": Team("ssdteam", test), "CCD": Team("core-capability-development", test), "TCD": Team("toolscollabdev", test), - "Other": other_team, + "Other": Team("SimSysCodeReviewers", test), } # Create tables for each combination of reviewers and reposotories @@ -287,7 +275,12 @@ def main(total: bool, test: bool, capture_project: bool): repo_list = lfric_repositories reviewers = [] for team in teams.values(): - reviewers += team.get_team_members() + members = team.get_team_members() + # Not using sets to deduplicate to preserve list order, keeping + # people in their teams. + for person in members: + if person not in reviewers: + reviewers.append(person) tables["LFRic"] = build_table(data, reviewers, repo_list) # Print tables From 2823bd3e3bd5e5e2fcb9a2772e21447b0ad1b920 Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:10:20 +0000 Subject: [PATCH 2/3] tidy test files and filter admin --- workload/{ => test}/SimSysCodeReviewers.json | 0 workload/{ => test}/core-capability-development.json | 0 workload/{ => test}/ssdteam.json | 0 workload/{ => test}/test.json | 0 workload/{ => test}/toolscollabdev.json | 0 workload/workload.py | 12 ++++++++---- 6 files changed, 8 insertions(+), 4 deletions(-) rename workload/{ => test}/SimSysCodeReviewers.json (100%) rename workload/{ => test}/core-capability-development.json (100%) rename workload/{ => test}/ssdteam.json (100%) rename workload/{ => test}/test.json (100%) rename workload/{ => test}/toolscollabdev.json (100%) diff --git a/workload/SimSysCodeReviewers.json b/workload/test/SimSysCodeReviewers.json similarity index 100% rename from workload/SimSysCodeReviewers.json rename to workload/test/SimSysCodeReviewers.json diff --git a/workload/core-capability-development.json b/workload/test/core-capability-development.json similarity index 100% rename from workload/core-capability-development.json rename to workload/test/core-capability-development.json diff --git a/workload/ssdteam.json b/workload/test/ssdteam.json similarity index 100% rename from workload/ssdteam.json rename to workload/test/ssdteam.json diff --git a/workload/test.json b/workload/test/test.json similarity index 100% rename from workload/test.json rename to workload/test/test.json diff --git a/workload/toolscollabdev.json b/workload/test/toolscollabdev.json similarity index 100% rename from workload/toolscollabdev.json rename to workload/test/toolscollabdev.json diff --git a/workload/workload.py b/workload/workload.py index 0138810b..6328cb99 100644 --- a/workload/workload.py +++ b/workload/workload.py @@ -22,6 +22,7 @@ "growss", ] +adminID = "MGEX82" # person in github teams as a central admin but not relevant here class ProjectData: """ @@ -43,7 +44,7 @@ def fetch_project_data(self, test: bool, capture: bool): Retrieve data from GitHub API or a from a test file. """ if test: - file = Path(__file__).with_name("test.json") + file = Path(__file__).parent / "test" / "test.json" with open(file) as f: self.data = json.loads(f.read()) @@ -58,7 +59,7 @@ def fetch_project_data(self, test: bool, capture: bool): self.data = json.loads(output.stdout) if capture: - file = Path(__file__).with_name("test.json") + file = Path(__file__).parent / "test" / "test.json" with open(file, "w") as f: json.dump(self.data, f) print( @@ -125,7 +126,8 @@ def set_team_members(self, test: bool): """ if test: - file = Path(__file__).with_name(self.github_id + ".json") + team_file = self.github_id + ".json" + file = Path(__file__).parent / "test" / team_file with open(file) as f: full_data = json.loads(f.read()) else: @@ -146,7 +148,9 @@ def set_team_members(self, test: bool): full_data = json.loads(output.stdout) for item in full_data: - self.members.append(item["login"]) + person_id = item["login"] + if person_id != adminID: + self.members.append(person_id) self.members = sorted(self.members, key=str.lower) From a46caed7f01e17a0414569e5b582419d7415c9cd Mon Sep 17 00:00:00 2001 From: jennyhickson <61183013+jennyhickson@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:11:29 +0000 Subject: [PATCH 3/3] black --- workload/workload.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/workload/workload.py b/workload/workload.py index 6328cb99..eba598f1 100644 --- a/workload/workload.py +++ b/workload/workload.py @@ -22,7 +22,8 @@ "growss", ] -adminID = "MGEX82" # person in github teams as a central admin but not relevant here +adminID = "MGEX82" # person in github teams as a central admin but not relevant here + class ProjectData: """