From 02c48f660668be83bc3c0bac14692a2a5f4fc793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Domen=20Ko=C5=BEar?= Date: Wed, 13 Mar 2024 10:54:12 +0000 Subject: [PATCH] --cores defaults to 2, --max-jobs defaults to num_cpu/2 --- devenv.lock | 16 ++++++++-------- devenv/src/command.rs | 3 +++ devenv/src/main.rs | 27 +++++++++++++++++++++++---- tests/cli/.test.sh | 4 +--- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/devenv.lock b/devenv.lock index 0e55f63a0..b5dc8416e 100644 --- a/devenv.lock +++ b/devenv.lock @@ -109,17 +109,17 @@ }, "nixpkgs": { "locked": { - "lastModified": 1710222005, - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9a9a7552431c4f1a3b2eee9398641babf7c30d0e", - "treeHash": "f86a6354c1b9536fd6eec80186c371c5b09c0be8", + "lastModified": 1710236354, + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "829e73affeadfb4198a7105cbe3a03153d13edc9", + "treeHash": "c92d1301b904a3d47027cca315d4de397f711280", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", "type": "github" } }, diff --git a/devenv/src/command.rs b/devenv/src/command.rs index 99f47d9af..e583b2e34 100644 --- a/devenv/src/command.rs +++ b/devenv/src/command.rs @@ -109,6 +109,9 @@ impl App { ) -> Result { let cmd = if command.starts_with("nix") { let mut flags = NIX_FLAGS.to_vec(); + flags.push("--max-jobs"); + let max_jobs = self.cli.max_jobs.to_string(); + flags.push(&max_jobs); // handle --nix-option key value for chunk in self.cli.nix_option.chunks_exact(2) { diff --git a/devenv/src/main.rs b/devenv/src/main.rs index 5144e5ab2..66e0079e5 100644 --- a/devenv/src/main.rs +++ b/devenv/src/main.rs @@ -34,6 +34,17 @@ struct Cli { #[arg(short, long, help = "Enable debug log level.")] verbose: bool, + #[arg(short = 'j', long, help = "Maximum number of Nix builds at any time.", default_value_t = max_jobs())] + max_jobs: u8, + + #[arg( + short = 'j', + long, + help = "Maximum number CPU cores being used by a single build..", + default_value = "2" + )] + cores: u8, + #[arg(short, long, default_value_t = default_system())] system: String, @@ -376,7 +387,7 @@ impl App { for filename in REQUIRED_FILES { let file_path = target.join(filename); if file_path.exists() { - panic!("File already exists {}", file_path.display()); + bail!("File already exists {}", file_path.display()); } } @@ -404,10 +415,10 @@ impl App { if !status.success() { match status.code() { Some(code) => { - panic!("direnv allow failed with code: {code}!"); + bail!("direnv allow failed with code: {code}!"); } None => { - panic!("direnv allow failed!"); + bail!("direnv allow failed!"); } } } @@ -1034,7 +1045,7 @@ impl App { fn assemble(&mut self) -> Result<()> { if !PathBuf::from("devenv.nix").exists() { - panic!(indoc::indoc! {" + bail!(indoc::indoc! {" File devenv.nix does not exist. To get started, run: $ devenv init @@ -1233,3 +1244,11 @@ fn cleanup_symlinks(root: &Path) -> (Vec, Vec) { (to_gc, removed_symlinks) } + +fn max_jobs() -> u8 { + let num_cpus = std::thread::available_parallelism().unwrap_or_else(|e| { + eprintln!("Failed to get number of logical CPUs: {}", e); + std::num::NonZeroUsize::new(1).unwrap() + }); + (num_cpus.get() / 2).try_into().unwrap() +} diff --git a/tests/cli/.test.sh b/tests/cli/.test.sh index 3c52a0920..bd6e5d0da 100755 --- a/tests/cli/.test.sh +++ b/tests/cli/.test.sh @@ -1,8 +1,6 @@ set -xe -# TODO: provide devenv cli via inputs -export PATH=$(pwd)/../../result/bin:$PATH - +rm devenv.yaml || true devenv build languages.python.package devenv shell ls -- -la | grep ".test.sh" devenv shell ls ../ | grep "cli"