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 +// SPDX-FileCopyrightText: 2021, 2023 Alyssa Ross // SPDX-FileCopyrightText: 2022 Arnout Engelen 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>> = Lazy::new(|| { NEXT_BRANCH_TABLE .iter() @@ -60,13 +79,6 @@ pub fn next_branches(branch: &str) -> Vec> { .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> = Lazy::new(|| { BRANCH_HYDRA_LINKS .keys() @@ -76,17 +88,23 @@ static BRANCH_HYDRA_LINK_PATTERNS: Lazy> = Lazy::new(|| { .collect() }); -static BRANCH_HYDRA_LINKS: Lazy> = 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> = 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> = +static BRANCH_HYDRA_LINKS_BY_INDEX: Lazy> = Lazy::new(|| BRANCH_HYDRA_LINKS.values().cloned().collect()); static BRANCH_HYDRA_LINK_REGEXES: Lazy = @@ -101,8 +119,7 @@ pub fn branch_hydra_link(branch: &str) -> Option { 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()) }) } @@ -116,6 +133,16 @@ mod tests { assert_eq!(res, vec!["staging"]); } + #[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"; @@ -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] @@ -162,6 +221,16 @@ mod tests { assert_eq!(next, vec!["master"]); } + #[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");