about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-10-28 13:15:03 +0200
committerAlyssa Ross <hi@alyssa.is>2023-10-28 13:21:12 +0200
commit6036801dc4628b43e2c25ddccebf27c715a27780 (patch)
treecd308c32f1a504938f0634862e6ec2457064bb0a
parente6cafedb0d6107117145c3ca27ebb88c71aa5586 (diff)
downloadpr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.tar
pr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.tar.gz
pr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.tar.bz2
pr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.tar.lz
pr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.tar.xz
pr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.tar.zst
pr-tracker-6036801dc4628b43e2c25ddccebf27c715a27780.zip
branches: link to Hydra for development branches
Previously, we linked to Hydra jobs for channel updates, but not to
Hydra jobsets for development branches.  Hopefully having both isn't
too confusing, and clicking on a branch name takes people where they'd
expect.
-rw-r--r--src/branches.rs109
1 files changed, 89 insertions, 20 deletions
diff --git a/src/branches.rs b/src/branches.rs
index 64f2c15..b6e3d45 100644
--- a/src/branches.rs
+++ b/src/branches.rs
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: AGPL-3.0-or-later WITH GPL-3.0-linking-exception
-// SPDX-FileCopyrightText: 2021 Alyssa Ross <hi@alyssa.is>
+// SPDX-FileCopyrightText: 2021, 2023 Alyssa Ross <hi@alyssa.is>
 // SPDX-FileCopyrightText: 2022 Arnout Engelen <arnout@bzzt.net>
 
 use std::borrow::Cow;
@@ -23,6 +23,25 @@ const NEXT_BRANCH_TABLE: [(&str, &str); 12] = [
     (r"\Astaging-((2[1-9]|[3-90].)\.\d{2})\z", "staging-next-$1"),
 ];
 
+const BRANCH_HYDRA_LINK_TABLE: [(&str, &str); 5] = [
+    (r"\Apython-updates\z", "nixpkgs/python-updates"),
+    (r"\Astaging-next\z", "nixpkgs/staging-next"),
+    // There's no staging-next-21.11 for some reason.
+    (
+        r"\Astaging-next-([013-9]\d\.\d{2}|2(1\.05|[2-90]\.\d{2}))\z",
+        "nixpkgs/staging-next-$1",
+    ),
+    (r"\Ahaskell-updates\z", "nixpkgs/haskell-updates"),
+    (r"\Amaster\z", "nixpkgs/trunk"),
+];
+
+const CHANNEL_HYDRA_LINK_TABLE: [(&str, &str); 4] = [
+    (r"\Anixpkgs-unstable\z", "nixpkgs/trunk/unstable"),
+    (r"\Anixos-unstable-small\z", "nixos/unstable-small/tested"),
+    (r"\Anixos-unstable\z", "nixos/trunk-combined/tested"),
+    (r"\Anixos-(\d.*)\z", "nixos/release-$1/tested"),
+];
+
 static BRANCH_NEXTS: Lazy<BTreeMap<&str, Vec<&str>>> = Lazy::new(|| {
     NEXT_BRANCH_TABLE
         .iter()
@@ -60,13 +79,6 @@ pub fn next_branches(branch: &str) -> Vec<Cow<str>> {
         .collect()
 }
 
-const BRANCH_HYDRA_LINK_TABLE: [(&str, &str); 4] = [
-    (r"\Anixpkgs-unstable\z", "nixpkgs/trunk/unstable"),
-    (r"\Anixos-unstable-small\z", "nixos/unstable-small/tested"),
-    (r"\Anixos-unstable\z", "nixos/trunk-combined/tested"),
-    (r"\Anixos-(\d.*)\z", "nixos/release-$1/tested"),
-];
-
 static BRANCH_HYDRA_LINK_PATTERNS: Lazy<Vec<Regex>> = Lazy::new(|| {
     BRANCH_HYDRA_LINKS
         .keys()
@@ -76,17 +88,23 @@ static BRANCH_HYDRA_LINK_PATTERNS: Lazy<Vec<Regex>> = Lazy::new(|| {
         .collect()
 });
 
-static BRANCH_HYDRA_LINKS: Lazy<BTreeMap<&str, &str>> = Lazy::new(|| {
-    BRANCH_HYDRA_LINK_TABLE
-        .iter()
-        .fold(BTreeMap::new(), |mut map, (pattern, next)| {
-            // TODO throw an error when this does not return None?
-            map.insert(pattern, next);
-            map
-        })
+static BRANCH_HYDRA_LINKS: Lazy<BTreeMap<&str, String>> = Lazy::new(|| {
+    let branch_links = BRANCH_HYDRA_LINK_TABLE.iter().map(|(pattern, jobset)| {
+        (
+            *pattern,
+            format!("https://hydra.nixos.org/jobset/{jobset}#tabs-jobs"),
+        )
+    });
+    let channel_links = CHANNEL_HYDRA_LINK_TABLE.iter().map(|(pattern, job)| {
+        (
+            *pattern,
+            format!("https://hydra.nixos.org/job/{job}#tabs-constituents"),
+        )
+    });
+    branch_links.chain(channel_links).collect()
 });
 
-static BRANCH_HYDRA_LINKS_BY_INDEX: Lazy<Vec<&str>> =
+static BRANCH_HYDRA_LINKS_BY_INDEX: Lazy<Vec<String>> =
     Lazy::new(|| BRANCH_HYDRA_LINKS.values().cloned().collect());
 
 static BRANCH_HYDRA_LINK_REGEXES: Lazy<RegexSet> =
@@ -101,8 +119,7 @@ pub fn branch_hydra_link(branch: &str) -> Option<String> {
             let regex = BRANCH_HYDRA_LINK_PATTERNS.get(index).unwrap();
             BRANCH_HYDRA_LINKS_BY_INDEX
                 .get(index)
-                .map(move |link| regex.replace(branch, *link))
-                .map(move |l| format!("https://hydra.nixos.org/job/{}#tabs-constituents", l))
+                .map(move |link| regex.replace(branch, link).to_string())
         })
 }
 
@@ -117,6 +134,16 @@ mod tests {
     }
 
     #[test]
+    fn staging_next() {
+        let branch = "staging-next";
+        let res = next_branches(branch);
+        assert_eq!(res, vec!["master"]);
+        let link = branch_hydra_link(branch);
+        let expected = "https://hydra.nixos.org/jobset/nixpkgs/staging-next#tabs-jobs";
+        assert_eq!(link.unwrap(), expected);
+    }
+
+    #[test]
     fn staging_18_03() {
         let branch = "staging-18.03";
         let next = next_branches(branch);
@@ -151,8 +178,40 @@ mod tests {
 
     #[test]
     fn staging_next_21_05() {
-        let res = next_branches("staging-next-21.05");
+        let branch = "staging-next-21.05";
+        let res = next_branches(branch);
         assert_eq!(res, vec!["release-21.05"]);
+        let link = branch_hydra_link(branch);
+        let expected = "https://hydra.nixos.org/jobset/nixpkgs/staging-next-21.05#tabs-jobs";
+        assert_eq!(link.unwrap(), expected);
+    }
+
+    #[test]
+    fn staging_next_21_11() {
+        let branch = "staging-next-21.11";
+        let next = next_branches(branch);
+        assert_eq!(next, vec!["release-21.11"]);
+        assert!(branch_hydra_link(branch).is_none());
+    }
+
+    #[test]
+    fn staging_next_22_05() {
+        let branch = "staging-next-22.05";
+        let next = next_branches(branch);
+        assert_eq!(next, vec!["release-22.05"]);
+        let link = branch_hydra_link(branch);
+        let expected = "https://hydra.nixos.org/jobset/nixpkgs/staging-next-22.05#tabs-jobs";
+        assert_eq!(link.unwrap(), expected);
+    }
+
+    #[test]
+    fn staging_next_30_05() {
+        let branch = "staging-next-30.05";
+        let next = next_branches(branch);
+        assert_eq!(next, vec!["release-30.05"]);
+        let link = branch_hydra_link(branch);
+        let expected = "https://hydra.nixos.org/jobset/nixpkgs/staging-next-30.05#tabs-jobs";
+        assert_eq!(link.unwrap(), expected);
     }
 
     #[test]
@@ -163,6 +222,16 @@ mod tests {
     }
 
     #[test]
+    fn master() {
+        let branch = "master";
+        let next = next_branches(branch);
+        assert_eq!(next, vec!["nixpkgs-unstable", "nixos-unstable-small"]);
+        let link = branch_hydra_link(branch);
+        let expected = "https://hydra.nixos.org/jobset/nixpkgs/trunk#tabs-jobs";
+        assert_eq!(link.unwrap(), expected);
+    }
+
+    #[test]
     fn release_20_09() {
         let res = next_branches("release-20.09");
         assert_eq!(res, vec!["nixpkgs-20.09-darwin", "nixos-20.09-small"]);