From 2361852cc5bf244ea6ef67caaf186b7b0f846b53 Mon Sep 17 00:00:00 2001 From: FliegendeWurst <2012gdwu+github@posteo.de> Date: Thu, 5 Dec 2024 17:05:10 +0100 Subject: [PATCH] maintainers/scripts: add check-maintainer-usernames Co-authored-by: Sandro --- .../check-maintainer-usernames/.gitignore | 1 + .../check-maintainer-usernames/Cargo.toml | 9 ++++ .../check-maintainer-usernames/src/main.rs | 42 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 maintainers/scripts/check-maintainer-usernames/.gitignore create mode 100644 maintainers/scripts/check-maintainer-usernames/Cargo.toml create mode 100644 maintainers/scripts/check-maintainer-usernames/src/main.rs diff --git a/maintainers/scripts/check-maintainer-usernames/.gitignore b/maintainers/scripts/check-maintainer-usernames/.gitignore new file mode 100644 index 000000000000..ea8c4bf7f35f --- /dev/null +++ b/maintainers/scripts/check-maintainer-usernames/.gitignore @@ -0,0 +1 @@ +/target diff --git a/maintainers/scripts/check-maintainer-usernames/Cargo.toml b/maintainers/scripts/check-maintainer-usernames/Cargo.toml new file mode 100644 index 000000000000..9edbb3281c00 --- /dev/null +++ b/maintainers/scripts/check-maintainer-usernames/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "check-maintainers" +version = "0.1.0" +edition = "2021" + +[dependencies] +octocrab = "0.42.1" +serde_json = "1.0.133" +tokio = { version = "1.41.1", features = ["fs", "macros", "rt-multi-thread"] } diff --git a/maintainers/scripts/check-maintainer-usernames/src/main.rs b/maintainers/scripts/check-maintainer-usernames/src/main.rs new file mode 100644 index 000000000000..02058ab008c7 --- /dev/null +++ b/maintainers/scripts/check-maintainer-usernames/src/main.rs @@ -0,0 +1,42 @@ +use std::{env, error::Error, io::{self, Write}}; + +use tokio::fs; + +#[tokio::main] +async fn main() { + real_main().await.unwrap(); +} + +async fn real_main() -> Result<(), Box> { + let gh = octocrab::OctocrabBuilder::default() + .personal_token(env::var("GITHUB_PAT").expect("no GITHUB_PAT configured")) + .build()?; + + // first run: nix-instantiate -A lib.maintainers --eval --strict --json > maintainers.json + let data: serde_json::Value = serde_json::from_str(&fs::read_to_string("maintainers.json").await?)?; + + let data = data.as_object().unwrap(); + let total = data.len(); + for (i, (maintainer_name, v)) in data.iter().enumerate() { + print!("\r{i}/{total}"); + io::stdout().flush()?; + let Some(github_id) = v.get("githubId") else { + println!("\rWARN: no id for {maintainer_name}"); + continue; + }; + let Some(github) = v.get("github") else { + println!("\rWARN: no username for {maintainer_name}"); + continue; + }; + let Ok(name) = gh.users_by_id(github_id.as_u64().unwrap()).profile().await else { + println!("\rWARN: error fetching {maintainer_name}"); + continue; + }; + let name = name.login; + if name.to_ascii_lowercase() != github.as_str().unwrap().to_ascii_lowercase() { + println!("\rERR: {maintainer_name} has github = {github}, but username really is '{name}'"); + } + } + + Ok(()) +}