Skip to content

Commit 03de88a

Browse files
authored
Merge pull request #965 from rust-lang/require-zulip-id
Require all people in Zulip user groups to have a Zulip id in their config
2 parents 5f517f6 + afc7661 commit 03de88a

39 files changed

+71
-46
lines changed

people/Aaron1011.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Aaron Hill'
22
33
github = 'Aaron1011'
44
github-id = 1408859
5+
zulip-id = 125294

people/BurntSushi.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ github = "BurntSushi"
33
github-id = 456674
44
irc = "burntsushi"
55
6+
zulip-id = 222471
67

78
[permissions]
89
bors.regex.review = true

people/ChrisDenton.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Chris Denton'
22
github = 'ChrisDenton'
33
github-id = 4459874
44
5+
zulip-id = 260325

people/JohnCSimon.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "John Simon"
22
github = "JohnCSimon"
33
github-id = 1977159
44
5+
zulip-id = 260190

people/Muirrum.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Cara Salter'
22
github = 'Muirrum'
33
github-id = 8702646
44
5+
zulip-id = 310810

people/Shnatsel.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Sergey Davidoff"
22
33
github = "Shnatsel"
44
github-id = 291257
5+
zulip-id = 127617

people/TaKO8Ki.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Takayuki Maeda'
22
github = 'TaKO8Ki'
33
github-id = 41065217
44
5+
zulip-id = 343125

people/alex.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ email = "[email protected]"
33
github = "alex"
44
github-id = 772
55
irc = "Alex_Gaynor"
6+
zulip-id = 130046

people/alexcrichton.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ github = "alexcrichton"
33
github-id = 64996
44
irc = "acrichto"
55
6+
zulip-id = 116015

people/alice-i-cecile.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Alice Cecile"
22
github = "alice-i-cecile"
33
github-id = 3579909
44
5+
zulip-id = 406353

people/aliemjay.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Ali MJ Al-Nasrawy"
22
github = "aliemjay"
33
github-id = 28497461
44
5+
zulip-id = 430838

people/aturon.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Aaron Turon"
22
github = "aturon"
33
github-id = 709807
44
5+
zulip-id = 301292

people/bstrie.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ name = "Ben Striegel"
22
github = "bstrie"
33
github-id = 865233
44
5-
5+
zulip-id = 256342

people/cramertj.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ github = "cramertj"
33
github-id = 5963049
44
55
discord-id = 446773566478745611
6+
zulip-id = 127859

people/crlf0710.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Charles Lew'
22
github = 'crlf0710'
33
github-id = 451806
44
5+
zulip-id = 116458

people/edmilsonefs.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Edmilson Ferreira da Silva"
22
github = "edmilsonefs"
33
github-id = 498938
44
5+
zulip-id = 220075

people/estebank.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ github = "estebank"
33
github-id = 1606434
44
55
discord-id = 449245991216873475
6+
zulip-id = 119031

people/guswynn.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Gus Wynn'
22
github = 'guswynn'
33
github-id = 5404303
44
5+
zulip-id = 257428

people/joelpalmer.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Joel Parmer"
22
github = "joelpalmer"
33
github-id = 8049061
44
5+
zulip-id = 223076

people/kennytm.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ github = "kennytm"
33
github-id = 103023
44
55
discord-id = 382886245069488129
6+
zulip-id = 125254

people/lcnr.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'lcnr'
22
33
github = 'lcnr'
44
github-id = 29864074
5+
zulip-id = 216206

people/llogiq.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Andre Bogus"
22
github = "llogiq"
33
github-id = 4200835
44
5+
zulip-id = 248599

people/m-ou-se.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Mara Bos'
22
github = 'm-ou-se'
33
github-id = 783247
44
5+
zulip-id = 310399

people/matthiaskrgr.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
name = "Matthias Krüger"
22
github = "matthiaskrgr"
33
github-id = 476013
4-
4+
5+
zulip-id = 217864

people/nellshamrell.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ github = "nellshamrell"
33
github-id = 813007
44
55
discord-id = 244302461718757376
6+
zulip-id = 225192

people/nnethercote.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "Nicholas Nethercote"
22
github = "nnethercote"
33
github-id = 1940286
44
5+
zulip-id = 120989

people/nrc.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ name = "Nick Cameron"
22
github = "nrc"
33
github-id = 762626
44
5+
zulip-id = 256841
56

67
[permissions]
78
bors.rustup-rs.review = true

people/varkor.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = "varkor"
22
github = "varkor"
33
github-id = 3943692
44
5+
zulip-id = 121053

people/vertexclique.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
name = 'Mahmut Bulut'
22
github = 'vertexclique'
33
github-id = 578559
4-
4+
5+
zulip-id = 223879

people/workingjubilee.toml

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ name = 'Jubilee'
22
github = 'workingjubilee'
33
github-id = 46493976
44
5+
zulip-id = 281757

rust_team_data/src/v1.rs

+2
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ pub struct ZulipGroup {
103103
#[derive(Debug, Clone, Serialize, Deserialize)]
104104
#[serde(rename_all = "snake_case")]
105105
pub enum ZulipGroupMember {
106+
// TODO(rylev): this variant can be removed once
107+
// it is verified that noone is relying on it
106108
Email(String),
107109
Id(usize),
108110
}

src/check_synced.rs

+4-15
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@ fn check_zulip(data: &Data) -> Result<(), failure::Error> {
2424
.map(|g| (g.name.clone(), g))
2525
.collect::<HashMap<_, _>>();
2626
let remote_users = zulip.get_users()?;
27-
let email_to_zulip_id = remote_users
28-
.iter()
29-
.cloned()
30-
.map(|u| (u.email, u.user_id))
31-
.collect::<HashMap<_, _>>();
3227
let zulip_id_to_name = remote_users
3328
.into_iter()
3429
.map(|u| (u.user_id, u.name))
@@ -44,16 +39,10 @@ fn check_zulip(data: &Data) -> Result<(), failure::Error> {
4439
let mut remote_members = rg.members.iter().collect::<HashSet<_>>();
4540
for local_member in local_group.members() {
4641
let i = match local_member {
47-
ZulipGroupMember::Id(i) => *i,
48-
ZulipGroupMember::Email(e) => match email_to_zulip_id.get(e) {
49-
Some(i) => *i,
50-
None => {
51-
error!("No user on Zulip uses the email '{e}'");
52-
continue;
53-
}
54-
},
55-
ZulipGroupMember::Missing => {
56-
error!("Member of Zulip user group '{}' does not have an email or Zulip id", local_group.name());
42+
ZulipGroupMember::MemberWithId { zulip_id, .. } => *zulip_id,
43+
ZulipGroupMember::JustId(zulip_id) => *zulip_id,
44+
ZulipGroupMember::MemberWithoutId { github } => {
45+
error!("Member '{github}' of Zulip user group '{}' does not have a Zulip id", local_group.name());
5746
continue;
5847
}
5948
};

src/schema.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -369,15 +369,14 @@ impl Team {
369369
let member = data.person(member).ok_or_else(|| {
370370
err_msg(format!("{} does not have a person configuration", member))
371371
})?;
372-
let member = match (member.zulip_id, member.email()) {
373-
(Some(zulip_id), _) => ZulipGroupMember::Id(zulip_id),
374-
(_, Email::Present(email)) => ZulipGroupMember::Email(email.to_string()),
375-
_ => ZulipGroupMember::Missing,
372+
let member = match (member.github.clone(), member.zulip_id) {
373+
(github, Some(zulip_id)) => ZulipGroupMember::MemberWithId { github, zulip_id },
374+
(github, _) => ZulipGroupMember::MemberWithoutId { github },
376375
};
377376
group.members.push(member);
378377
}
379378
for &extra in &raw_group.extra_zulip_ids {
380-
group.members.push(ZulipGroupMember::Id(extra));
379+
group.members.push(ZulipGroupMember::JustId(extra));
381380
}
382381
groups.push(group);
383382
}
@@ -654,9 +653,9 @@ impl ZulipGroup {
654653

655654
#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
656655
pub(crate) enum ZulipGroupMember {
657-
Id(usize),
658-
Email(String),
659-
Missing,
656+
MemberWithId { github: String, zulip_id: usize },
657+
JustId(usize),
658+
MemberWithoutId { github: String },
660659
}
661660

662661
fn default_true() -> bool {

src/static_api.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,13 @@ impl<'a> Generator<'a> {
237237
members: members
238238
.into_iter()
239239
.filter_map(|m| match m {
240-
ZulipGroupMember::Email(e) => Some(v1::ZulipGroupMember::Email(e)),
241-
ZulipGroupMember::Id(i) => Some(v1::ZulipGroupMember::Id(i)),
242-
ZulipGroupMember::Missing => None,
240+
ZulipGroupMember::MemberWithId { zulip_id, .. } => {
241+
Some(v1::ZulipGroupMember::Id(zulip_id))
242+
}
243+
ZulipGroupMember::JustId(zulip_id) => {
244+
Some(v1::ZulipGroupMember::Id(zulip_id))
245+
}
246+
ZulipGroupMember::MemberWithoutId { .. } => None,
243247
})
244248
.collect(),
245249
},

src/validate.rs

+15-13
Original file line numberDiff line numberDiff line change
@@ -609,13 +609,10 @@ fn validate_discord_team_members_have_discord_ids(data: &Data, errors: &mut Vec<
609609
});
610610
}
611611

612-
/// Ensure every member of a team that has a Zulip group either has a Zulip id or an email address
612+
/// Ensure every member of a team that has a Zulip group has a Zulip id
613613
fn validate_zulip_users(data: &Data, zulip: &ZulipApi, errors: &mut Vec<String>) {
614-
let (by_id, by_email) = match zulip.get_users() {
615-
Ok(u) => (
616-
u.iter().map(|u| u.user_id).collect::<HashSet<_>>(),
617-
u.into_iter().map(|u| u.email).collect::<HashSet<_>>(),
618-
),
614+
let by_id = match zulip.get_users() {
615+
Ok(u) => u.iter().map(|u| u.user_id).collect::<HashSet<_>>(),
619616
Err(err) => {
620617
errors.push(format!("couldn't verify Zulip users: {}", err));
621618
return;
@@ -633,8 +630,15 @@ fn validate_zulip_users(data: &Data, zulip: &ZulipApi, errors: &mut Vec<String>)
633630
.members()
634631
.iter()
635632
.filter_map(|m| match m {
636-
ZulipGroupMember::Id(i) if !by_id.contains(i) => Some(format!("{}", i)),
637-
ZulipGroupMember::Email(e) if !by_email.contains(e) => Some(e.clone()),
633+
ZulipGroupMember::MemberWithId { github, zulip_id }
634+
if !by_id.contains(zulip_id) =>
635+
{
636+
Some(github.clone())
637+
}
638+
ZulipGroupMember::JustId(zulip_id) if !by_id.contains(zulip_id) => {
639+
Some(format!("ID: {zulip_id}"))
640+
}
641+
ZulipGroupMember::MemberWithoutId { github } => Some(github.clone()),
638642
_ => None,
639643
})
640644
.collect::<HashSet<_>>();
@@ -649,7 +653,7 @@ fn validate_zulip_users(data: &Data, zulip: &ZulipApi, errors: &mut Vec<String>)
649653
})
650654
}
651655

652-
/// Ensure every member of a team that has a Zulip group either has a Zulip id or an email address
656+
/// Ensure every member of a team that has a Zulip group either has a Zulip id
653657
fn validate_zulip_group_ids(data: &Data, errors: &mut Vec<String>) {
654658
wrapper(data.teams(), errors, |team, errors| {
655659
let groups = team.zulip_groups(data)?;
@@ -659,11 +663,9 @@ fn validate_zulip_group_ids(data: &Data, errors: &mut Vec<String>) {
659663
}
660664
wrapper(team.members(data).iter(), errors, |member, _| {
661665
if let Some(member) = data.person(member) {
662-
if member.zulip_id().is_none()
663-
&& matches!(member.email(), Email::Missing | Email::Disabled)
664-
{
666+
if member.zulip_id().is_none() {
665667
bail!(
666-
"person `{}` in '{}' is a member of a Zulip user group but has no Zulip id nor an enabled email address",
668+
"person `{}` in '{}' is a member of a Zulip user group but has no Zulip id",
667669
member.github(),
668670
team.name()
669671
);

src/zulip.rs

-2
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,6 @@ struct ZulipUsers {
9898
/// A single Zulip user
9999
#[derive(Clone, Deserialize, PartialEq, Eq, Hash)]
100100
pub(crate) struct ZulipUser {
101-
#[serde(rename = "delivery_email")]
102-
pub(crate) email: String,
103101
pub(crate) user_id: usize,
104102
#[serde(rename = "full_name")]
105103
pub(crate) name: String,

tests/static-api/_expected/v1/zulip-groups.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"id": 1234
88
},
99
{
10-
"email": "[email protected]"
10+
"id": 4321
1111
}
1212
]
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"users": {
33
"2": 2,
4-
"1234": 0
4+
"1234": 0,
5+
"4321": 0
56
}
67
}

tests/static-api/people/user-1.toml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ github = 'user-1'
33
github-id = 0
44
55
discord-id = 1
6+
zulip-id = 4321

0 commit comments

Comments
 (0)