difftreelog
feat build specializations
in: trunk
2 files changed
cmds/fleet/src/cmds/build_systems.rsdiffbeforeafterboth494950enum PackageAction {50enum PackageAction {51 SdImage,51 SdImage,52 InstallationCd,52}53}54impl PackageAction {55 fn build_attr(&self) -> String {56 match self {57 PackageAction::SdImage => "sdImage".to_owned(),58 PackageAction::InstallationCd => "installationCd".to_owned(),59 }60 }61}536254enum Action {63enum Action {55 Upload(Option<UploadAction>),64 Upload { action: Option<UploadAction> },56 Package(PackageAction),65 Package(PackageAction),57}66}67impl Action {68 fn build_attr(&self) -> String {69 match self {70 Action::Upload { .. } => "toplevel".to_owned(),71 Action::Package(p) => p.build_attr(),72 }73 }74}587559impl From<Subcommand> for Action {76impl From<Subcommand> for Action {60 fn from(s: Subcommand) -> Self {77 fn from(s: Subcommand) -> Self {61 match s {78 match s {62 Subcommand::Upload => Self::Upload(None),79 Subcommand::Upload => Self::Upload { action: None },63 Subcommand::Test => Self::Upload(Some(UploadAction::Test)),80 Subcommand::Test => Self::Upload {81 action: Some(UploadAction::Test),82 },64 Subcommand::Boot => Self::Upload(Some(UploadAction::Boot)),83 Subcommand::Boot => Self::Upload {84 action: Some(UploadAction::Boot),85 },65 Subcommand::Switch => Self::Upload(Some(UploadAction::Switch)),86 Subcommand::Switch => Self::Upload {87 action: Some(UploadAction::Switch),88 },66 Subcommand::SdImage => Self::Package(PackageAction::SdImage),89 Subcommand::SdImage => Self::Package(PackageAction::SdImage),90 Subcommand::InstallationCd => Self::Package(PackageAction::InstallationCd),67 }91 }68 }92 }69}93}79 /// Upload + test + boot103 /// Upload + test + boot80 Switch,104 Switch,8110582 /// Build sd image106 /// Build SD .img image83 SdImage,107 SdImage,108 /// Build an installation cd ISO image109 InstallationCd,84}110}8511186impl BuildSystems {112impl BuildSystems {87 async fn build_task(self, config: Config, host: String) -> Result<()> {113 async fn build_task(self, config: Config, host: String) -> Result<()> {88 info!("building");114 info!("building");115 let action = Action::from(self.subcommand.clone());89 let built = {116 let built = {90 let dir = tempfile::tempdir()?;117 let dir = tempfile::tempdir()?;91 dir.path().to_owned()118 dir.path().to_owned()110 .arg(&built)137 .arg(&built)111 .arg(config.configuration_attr_name(&format!(138 .arg(139 config.configuration_attr_name(&format!(112 "configuredSystems.{}.config.system.build.toplevel",140 "buildSystems.{}.{host}",113 host141 action.build_attr()114 )));142 )),143 );115144130 nix_build.run_nix().await?;159 nix_build.run_nix().await?;131 let built = std::fs::canonicalize(built)?;160 let built = std::fs::canonicalize(built)?;132133 let action = Action::from(self.subcommand.clone());134161135 match action {162 match action {136 Action::Upload(action) => {163 Action::Upload { action } => {137 if !config.is_local(&host) {164 if !config.is_local(&host) {138 info!("uploading system closure");165 info!("uploading system closure");139 let mut tries = 0;166 let mut tries = 0;195 .args(&["build", "--impure", "--no-link", "--out-link"])222 .args(&["build", "--impure", "--no-link", "--out-link"])196 .arg(&out)223 .arg(&out)197 .arg(config.configuration_attr_name(&format!(224 .arg(198 "configuredSystems.{}.config.system.build.sdImage",225 config.configuration_attr_name(&format!("buildSystems.sdImage.{}", host,)),199 host,200 )));226 );201 if let Some(builders) = &self.builders {227 if let Some(builders) = &self.builders {211237212 nix_build.inherit_stdio().run_nix().await?;238 nix_build.inherit_stdio().run_nix().await?;213 }239 }240 Action::Package(PackageAction::InstallationCd) => {241 let mut out = current_dir()?;242 out.push(format!("installation-cd-{}", host));243244 info!("building sd image to {:?}", out);245 let mut nix_build = if self.privileged_build {246 let mut out = Command::new("sudo");247 out.arg("nix");248 out249 } else {250 Command::new("nix")251 };252 nix_build253 .args(&["build", "--impure", "--no-link", "--out-link"])254 .arg(&out)255 .arg(256 config.configuration_attr_name(&format!(257 "buildSystems.installationCd.{}",258 host,259 )),260 );261 if let Some(builders) = &self.builders {262 nix_build.arg("--builders").arg(builders);263 }264 if let Some(jobs) = &self.jobs {265 nix_build.arg("--max-jobs");266 nix_build.arg(format!("{}", jobs));267 }268 if !self.fail_fast {269 nix_build.arg("--keep-going");270 }271272 nix_build.inherit_stdio().run_nix().await?;273 }214 };274 };215 Ok(())275 Ok(())216 }276 }lib/default.nixdiffbeforeafterboth20 if failedAssertions != [ ]20 if failedAssertions != [ ]21 then throw "Failed assertions:\n${nixpkgs.lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"21 then throw "Failed assertions:\n${nixpkgs.lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"22 else nixpkgs.lib.showWarnings root.config.warnings root;22 else nixpkgs.lib.showWarnings root.config.warnings root;23 in24 rec {25 configuredHosts = rootAssertWarn.config.hosts;23 configuredHosts = rootAssertWarn.config.hosts;26 configuredSecrets = rootAssertWarn.config.secrets;24 configuredSecrets = rootAssertWarn.config.secrets;27 configuredSystems = nixpkgs.lib.listToAttrs (25 configuredSystems = configuredSystemsWithExtraModules [ ];26 configuredSystemsWithExtraModules = extraModules: nixpkgs.lib.listToAttrs (28 map27 map29 (28 (30 name: {29 name: {31 inherit name;30 inherit name;32 value = nixpkgs.lib.nixosSystem {31 value = nixpkgs.lib.nixosSystem {33 system = configuredHosts.${name}.system;32 system = configuredHosts.${name}.system;34 modules = configuredHosts.${name}.modules ++ (33 modules = configuredHosts.${name}.modules ++ extraModules ++ [35 if configuredHosts.${name}.system == "aarch64-linux" then [ (nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix") ]36 else [ ]37 ) ++ [38 ({ ... }: {34 ({ ... }: {39 nixpkgs.system = system;35 nixpkgs.system = system;40 nixpkgs.localSystem.system = system;36 nixpkgs.localSystem.system = system;51 }47 }52 )48 )53 (builtins.attrNames rootAssertWarn.config.hosts)49 (builtins.attrNames rootAssertWarn.config.hosts)54 ); #nixpkgs.lib.nixosSystem {}50 );51 in52 rec {53 inherit configuredHosts configuredSecrets configuredSystems;54 buildSystems = {55 toplevel = builtins.mapAttrs (_name: value: value.config.system.build.toplevel) (configuredSystemsWithExtraModules [ ]);56 sdImage = builtins.mapAttrs (_name: value: value.config.system.build.sdImage) (configuredSystemsWithExtraModules [57 (nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix")58 ]);59 installationCd = builtins.mapAttrs (_name: value: value.config.system.build.isoImage) (configuredSystemsWithExtraModules [60 (nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")61 ({ lib, ... }: {62 # Needed for https://github.com/NixOS/nixpkgs/issues/5895963 boot.supportedFilesystems = lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];64 })65 ]);66 };55 });67 });56}68}5769