diff --git a/ofborg/src/config.rs b/ofborg/src/config.rs index 3a578058..25618447 100644 --- a/ofborg/src/config.rs +++ b/ofborg/src/config.rs @@ -168,12 +168,23 @@ impl Config { } pub fn github(&self) -> Github { - let token = std::fs::read_to_string(self.github_app.clone().expect("No GitHub app configured").oauth_client_secret_file) - .expect("Couldn't read from GitHub app token"); + let token = std::fs::read_to_string( + self.github_app + .clone() + .expect("No GitHub app configured") + .oauth_client_secret_file, + ) + .expect("Couldn't read from GitHub app token"); let token = token.trim(); Github::new( "github.com/NixOS/ofborg", - Credentials::Client(self.github_app.clone().expect("No GitHub app configured").oauth_client_id, token.to_owned()), + Credentials::Client( + self.github_app + .clone() + .expect("No GitHub app configured") + .oauth_client_id, + token.to_owned(), + ), ) .expect("Unable to create a github client instance") } diff --git a/ofborg/src/tagger.rs b/ofborg/src/tagger.rs index ecddc657..71345584 100644 --- a/ofborg/src/tagger.rs +++ b/ofborg/src/tagger.rs @@ -1,68 +1,8 @@ use crate::maintainers::{Maintainer, MaintainersByPackage}; use crate::outpathdiff::PackageArch; -use crate::tasks; use tracing::info; -pub struct StdenvTagger { - possible: Vec, - selected: Vec, -} - -impl Default for StdenvTagger { - fn default() -> StdenvTagger { - let mut t = StdenvTagger { - possible: vec![ - String::from("10.rebuild-linux-stdenv"), - String::from("10.rebuild-darwin-stdenv"), - ], - selected: vec![], - }; - t.possible.sort(); - - t - } -} - -impl StdenvTagger { - pub fn new() -> StdenvTagger { - Default::default() - } - - pub fn changed(&mut self, systems: Vec) { - for system in systems { - match system { - tasks::eval::stdenvs::System::X8664Darwin => { - self.selected.push(String::from("10.rebuild-darwin-stdenv")); - } - tasks::eval::stdenvs::System::X8664Linux => { - self.selected.push(String::from("10.rebuild-linux-stdenv")); - } - } - } - - for tag in &self.selected { - if !self.possible.contains(tag) { - panic!("Tried to add label {tag} but it isn't in the possible list!"); - } - } - } - - pub fn tags_to_add(&self) -> Vec { - self.selected.clone() - } - - pub fn tags_to_remove(&self) -> Vec { - let mut remove = self.possible.clone(); - for tag in &self.selected { - let pos = remove.binary_search(tag).unwrap(); - remove.remove(pos); - } - - remove - } -} - pub struct PkgsAddedRemovedTagger { possible: Vec, selected: Vec, diff --git a/ofborg/src/tasks/eval/mod.rs b/ofborg/src/tasks/eval/mod.rs index 4e32ee64..9481f3ac 100644 --- a/ofborg/src/tasks/eval/mod.rs +++ b/ofborg/src/tasks/eval/mod.rs @@ -1,10 +1,8 @@ mod generic; mod nixpkgs; -pub mod stdenvs; pub use self::generic::GenericStrategy; pub use self::nixpkgs::NixpkgsStrategy; -pub use self::stdenvs::Stdenvs; use crate::checkout::CachedProjectCo; use crate::commitstatus::{CommitStatus, CommitStatusError}; use crate::evalchecker::EvalChecker; diff --git a/ofborg/src/tasks/eval/nixpkgs.rs b/ofborg/src/tasks/eval/nixpkgs.rs index d408f031..1cc350f5 100644 --- a/ofborg/src/tasks/eval/nixpkgs.rs +++ b/ofborg/src/tasks/eval/nixpkgs.rs @@ -8,9 +8,9 @@ use crate::message::evaluationjob::EvaluationJob; use crate::nix::{self, Nix}; use crate::nixenv::HydraNixEnv; use crate::outpathdiff::{OutPathDiff, PackageArch}; -use crate::tagger::{MaintainerPrTagger, PkgsAddedRemovedTagger, RebuildTagger, StdenvTagger}; +use crate::tagger::{MaintainerPrTagger, PkgsAddedRemovedTagger, RebuildTagger}; use crate::tasks::eval::{ - stdenvs::Stdenvs, Error, EvaluationComplete, EvaluationStrategy, StepResult, + Error, EvaluationComplete, EvaluationStrategy, StepResult, }; use crate::tasks::evaluate::{get_prefix, make_gist, update_labels}; @@ -55,7 +55,6 @@ pub struct NixpkgsStrategy<'a> { repo: &'a Repository, gists: &'a Gists, nix: Nix, - stdenv_diff: Option, outpath_diff: Option, changed_paths: Option>, touched_packages: Option>, @@ -80,7 +79,6 @@ impl<'a> NixpkgsStrategy<'a> { repo, gists, nix, - stdenv_diff: None, outpath_diff: None, changed_paths: None, touched_packages: None, @@ -102,32 +100,6 @@ impl<'a> NixpkgsStrategy<'a> { update_labels(self.issue_ref, &labels, &[]); } - fn check_stdenvs_before(&mut self, dir: &Path) { - let mut stdenvs = Stdenvs::new(self.nix.clone(), dir.to_path_buf()); - stdenvs.identify_before(); - self.stdenv_diff = Some(stdenvs); - } - - fn check_stdenvs_after(&mut self) { - if let Some(ref mut stdenvs) = self.stdenv_diff { - stdenvs.identify_after(); - } - } - - fn update_stdenv_labels(&self) { - if let Some(ref stdenvs) = self.stdenv_diff { - let mut stdenvtagger = StdenvTagger::new(); - if !stdenvs.are_same() { - stdenvtagger.changed(stdenvs.changed()); - } - update_labels( - self.issue_ref, - &stdenvtagger.tags_to_add(), - &stdenvtagger.tags_to_remove(), - ); - } - } - fn check_outpaths_before(&mut self, dir: &Path) -> StepResult<()> { let mut rebuildsniff = OutPathDiff::new(self.nix.clone(), dir.to_path_buf()); @@ -379,12 +351,6 @@ impl<'a> EvaluationStrategy for NixpkgsStrategy<'a> { } fn on_target_branch(&mut self, dir: &Path, status: &mut CommitStatus) -> StepResult<()> { - status.set_with_description( - "Checking original stdenvs", - hubcaps::statuses::State::Pending, - )?; - self.check_stdenvs_before(dir); - status.set_with_description( "Checking original out paths", hubcaps::statuses::State::Pending, @@ -423,9 +389,6 @@ impl<'a> EvaluationStrategy for NixpkgsStrategy<'a> { &["2.status: merge conflict".to_owned()], ); - status.set_with_description("Checking new stdenvs", hubcaps::statuses::State::Pending)?; - self.check_stdenvs_after(); - status.set_with_description("Checking new out paths", hubcaps::statuses::State::Pending)?; self.check_outpaths_after()?; @@ -568,7 +531,6 @@ impl<'a> EvaluationStrategy for NixpkgsStrategy<'a> { dir: &Path, status: &mut CommitStatus, ) -> StepResult { - self.update_stdenv_labels(); status.set_with_description( "Calculating Changed Outputs", diff --git a/ofborg/src/tasks/eval/stdenvs.rs b/ofborg/src/tasks/eval/stdenvs.rs deleted file mode 100644 index f0a651ca..00000000 --- a/ofborg/src/tasks/eval/stdenvs.rs +++ /dev/null @@ -1,144 +0,0 @@ -use crate::files::file_to_str; -use crate::nix; - -use std::path::PathBuf; - -use tracing::{info, warn}; - -enum StdenvFrom { - Before, - After, -} - -#[derive(Debug)] -pub enum System { - X8664Darwin, - X8664Linux, -} - -#[derive(Debug, PartialEq, Eq)] -pub struct Stdenvs { - nix: nix::Nix, - co: PathBuf, - - linux_stdenv_before: Option, - linux_stdenv_after: Option, - - darwin_stdenv_before: Option, - darwin_stdenv_after: Option, -} - -impl Stdenvs { - pub fn new(nix: nix::Nix, co: PathBuf) -> Stdenvs { - Stdenvs { - nix, - co, - - linux_stdenv_before: None, - linux_stdenv_after: None, - - darwin_stdenv_before: None, - darwin_stdenv_after: None, - } - } - - pub fn identify_before(&mut self) { - self.identify(System::X8664Linux, StdenvFrom::Before); - self.identify(System::X8664Darwin, StdenvFrom::Before); - } - - pub fn identify_after(&mut self) { - self.identify(System::X8664Linux, StdenvFrom::After); - self.identify(System::X8664Darwin, StdenvFrom::After); - } - - pub fn are_same(&self) -> bool { - self.changed().is_empty() - } - - pub fn changed(&self) -> Vec { - let mut changed: Vec = vec![]; - - if self.linux_stdenv_before != self.linux_stdenv_after { - changed.push(System::X8664Linux); - } - - if self.darwin_stdenv_before != self.darwin_stdenv_after { - changed.push(System::X8664Darwin); - } - - changed - } - - fn identify(&mut self, system: System, from: StdenvFrom) { - match (system, from) { - (System::X8664Linux, StdenvFrom::Before) => { - self.linux_stdenv_before = self.evalstdenv("x86_64-linux"); - } - (System::X8664Linux, StdenvFrom::After) => { - self.linux_stdenv_after = self.evalstdenv("x86_64-linux"); - } - - (System::X8664Darwin, StdenvFrom::Before) => { - self.darwin_stdenv_before = self.evalstdenv("x86_64-darwin"); - } - (System::X8664Darwin, StdenvFrom::After) => { - self.darwin_stdenv_after = self.evalstdenv("x86_64-darwin"); - } - } - } - - /// This is used to find out what the output path of the stdenv for the - /// given system. - fn evalstdenv(&self, system: &str) -> Option { - info!(?system, "query stdenv output"); - let result = self.nix.with_system(system.to_owned()).safely( - &nix::Operation::QueryPackagesOutputs, - &self.co, - vec![ - String::from("-f"), - String::from("."), - String::from("-A"), - String::from("stdenv"), - ], - true, - ); - - match result { - Ok(mut out) => Some(file_to_str(&mut out)), - Err(mut out) => { - warn!("{:?}", file_to_str(&mut out)); - None - } - } - } -} - -#[cfg(test)] -mod tests { - - use super::*; - use std::env; - use std::process::Command; - - #[test] - fn stdenv_checking() { - let output = Command::new("nix-instantiate") - .args(["--eval", "-E", ""]) - .output() - .expect("nix-instantiate required"); - - let nixpkgs = String::from_utf8(output.stdout).expect("nixpkgs required"); - - let remote = env::var("NIX_REMOTE").unwrap_or("".to_owned()); - let nix = nix::Nix::new(String::from("x86_64-linux"), remote, 1200, None); - let mut stdenv = Stdenvs::new(nix, PathBuf::from(nixpkgs.trim_end())); - stdenv.identify(System::X8664Linux, StdenvFrom::Before); - stdenv.identify(System::X8664Darwin, StdenvFrom::Before); - - stdenv.identify(System::X8664Linux, StdenvFrom::After); - stdenv.identify(System::X8664Darwin, StdenvFrom::After); - - assert!(stdenv.are_same()); - } -}