From d03be4d0716b0a91e276353e98d5ea9c17b03766 Mon Sep 17 00:00:00 2001 From: Miles Johnson Date: Tue, 12 Dec 2023 15:02:44 -0800 Subject: [PATCH] fix: Only install proto if we need it. (#1227) * Update code. * Bump version. --- .yarn/versions/30068a2b.yml | 9 ++++++++ .../src/actions/sync_workspace.rs | 2 +- nextgen/config/src/toolchain/mod.rs | 16 ++++++++++++++ nextgen/config/src/toolchain_config.rs | 21 ++++++++++++++++++- packages/cli/CHANGELOG.md | 6 ++++++ 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 .yarn/versions/30068a2b.yml diff --git a/.yarn/versions/30068a2b.yml b/.yarn/versions/30068a2b.yml new file mode 100644 index 00000000000..1f2a5d9c201 --- /dev/null +++ b/.yarn/versions/30068a2b.yml @@ -0,0 +1,9 @@ +releases: + "@moonrepo/cli": patch + "@moonrepo/core-linux-arm64-gnu": patch + "@moonrepo/core-linux-arm64-musl": patch + "@moonrepo/core-linux-x64-gnu": patch + "@moonrepo/core-linux-x64-musl": patch + "@moonrepo/core-macos-arm64": patch + "@moonrepo/core-macos-x64": patch + "@moonrepo/core-windows-x64-msvc": patch diff --git a/crates/core/action-pipeline/src/actions/sync_workspace.rs b/crates/core/action-pipeline/src/actions/sync_workspace.rs index 16bcbe74d26..e6f2a20258a 100644 --- a/crates/core/action-pipeline/src/actions/sync_workspace.rs +++ b/crates/core/action-pipeline/src/actions/sync_workspace.rs @@ -80,7 +80,7 @@ async fn install_proto(workspace: &Workspace) -> miette::Result<()> { // This causes a ton of issues when running the test suite, // so just avoid it and assume proto exists! - if install_dir.exists() || is_test_env() { + if install_dir.exists() || is_test_env() || !workspace.toolchain_config.should_install_proto() { return Ok(()); } diff --git a/nextgen/config/src/toolchain/mod.rs b/nextgen/config/src/toolchain/mod.rs index 4d51f68b0bc..eeba174a698 100644 --- a/nextgen/config/src/toolchain/mod.rs +++ b/nextgen/config/src/toolchain/mod.rs @@ -12,6 +12,22 @@ pub use node_config::*; pub use rust_config::*; pub use typescript_config::*; +#[macro_export] +macro_rules! is_using_tool_version { + ($self:ident, $parent_tool:ident, $tool:ident) => { + if let Some(config) = &$self.$parent_tool { + is_using_tool_version!(config, $tool); + } + }; + ($self:ident, $tool:ident) => { + if let Some(config) = &$self.$tool { + if config.version.is_some() { + return true; + } + } + }; +} + #[macro_export] macro_rules! inherit_tool { ($config:ident, $tool:ident, $key:expr, $method:ident) => { diff --git a/nextgen/config/src/toolchain_config.rs b/nextgen/config/src/toolchain_config.rs index 03271178160..a65f383afdf 100644 --- a/nextgen/config/src/toolchain_config.rs +++ b/nextgen/config/src/toolchain_config.rs @@ -3,7 +3,7 @@ use crate::language_platform::PlatformType; use crate::toolchain::*; use crate::validate::check_yml_extension; -use crate::{inherit_tool, inherit_tool_without_version}; +use crate::{inherit_tool, inherit_tool_without_version, is_using_tool_version}; use moon_common::{color, consts}; use proto_core::ProtoConfig; use schematic::{validate, Config, ConfigLoader}; @@ -75,6 +75,25 @@ impl ToolchainConfig { tools } + pub fn should_install_proto(&self) -> bool { + is_using_tool_version!(self, bun); + is_using_tool_version!(self, node); + is_using_tool_version!(self, node, pnpm); + is_using_tool_version!(self, node, yarn); + is_using_tool_version!(self, rust); + + // Special case + if self + .node + .as_ref() + .is_some_and(|config| config.npm.version.is_some()) + { + return true; + } + + false + } + pub fn inherit_proto(&mut self, proto_config: &ProtoConfig) -> miette::Result<()> { self.inherit_proto_bun(proto_config)?; self.inherit_proto_deno(proto_config)?; diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 1da90a38259..9fa439204a7 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -10,6 +10,12 @@ - More accurately monitors signals (ctrl+c) and shutdowns. - Tasks can now be configured with a timeout. +## Unreleased + +#### 🐞 Fixes + +- Fixed an issue where we would install `proto` even when not required. + ## 1.18.0 #### 🚀 Updates