|
1 | 1 | use crate::data::Data;
|
2 | 2 | use crate::github::GitHubApi;
|
3 |
| -use crate::schema::{Bot, Email, MergeBot, Permissions, Team, TeamKind, TeamPeople, ZulipMember}; |
| 3 | +use crate::schema::{ |
| 4 | + Bot, Email, MergeBot, Permissions, RepoPermission, Team, TeamKind, TeamPeople, ZulipMember, |
| 5 | +}; |
4 | 6 | use crate::zulip::ZulipApi;
|
5 | 7 | use anyhow::{bail, Error};
|
6 | 8 | use log::{error, warn};
|
@@ -51,6 +53,7 @@ static CHECKS: &[Check<fn(&Data, &mut Vec<String>)>] = checks![
|
51 | 53 | validate_repos,
|
52 | 54 | validate_branch_protections,
|
53 | 55 | validate_member_roles,
|
| 56 | + validate_admin_access, |
54 | 57 | validate_website,
|
55 | 58 | ];
|
56 | 59 |
|
@@ -1024,6 +1027,40 @@ fn validate_member_roles(data: &Data, errors: &mut Vec<String>) {
|
1024 | 1027 | );
|
1025 | 1028 | }
|
1026 | 1029 |
|
| 1030 | +/// Validate that admin access is not used anywhere |
| 1031 | +fn validate_admin_access(data: &Data, errors: &mut Vec<String>) { |
| 1032 | + wrapper(data.all_repos(), errors, |repo, errors| { |
| 1033 | + wrapper(repo.access.teams.iter(), errors, |(team, permission), _| { |
| 1034 | + if let RepoPermission::Admin = permission { |
| 1035 | + bail!( |
| 1036 | + "Repository {}/{} uses `admin` permission for team `{team}`", |
| 1037 | + repo.org, |
| 1038 | + repo.name |
| 1039 | + ); |
| 1040 | + } else { |
| 1041 | + Ok(()) |
| 1042 | + } |
| 1043 | + }); |
| 1044 | + wrapper( |
| 1045 | + repo.access.individuals.iter(), |
| 1046 | + errors, |
| 1047 | + |(member, permission), _| { |
| 1048 | + if let RepoPermission::Admin = permission { |
| 1049 | + bail!( |
| 1050 | + "Repository {}/{} uses `admin` permission for member `{member}`", |
| 1051 | + repo.org, |
| 1052 | + repo.name |
| 1053 | + ); |
| 1054 | + } else { |
| 1055 | + Ok(()) |
| 1056 | + } |
| 1057 | + }, |
| 1058 | + ); |
| 1059 | + |
| 1060 | + Ok(()) |
| 1061 | + }); |
| 1062 | +} |
| 1063 | + |
1027 | 1064 | /// We use Fluent ids which are lowercase alphanumeric with hyphens.
|
1028 | 1065 | fn ascii_kebab_case(s: &str) -> bool {
|
1029 | 1066 | s.chars()
|
|
0 commit comments