From 7289256b0ace4b6ae7a3e07443255844887edec0 Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Mon, 23 Mar 2026 17:18:57 -0700 Subject: [PATCH] version tools (#5407) * version tools * move bundling tools to `~/.dx/tools` --- packages/cli/src/bundler/mod.rs | 4 +--- packages/cli/src/esbuild.rs | 6 +++--- packages/cli/src/tailwind.rs | 11 +++++------ packages/cli/src/wasm_bindgen.rs | 14 +++++++------- packages/cli/src/wasm_opt.rs | 5 ++++- packages/cli/src/workspace.rs | 7 +++++++ 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/packages/cli/src/bundler/mod.rs b/packages/cli/src/bundler/mod.rs index 5870b64a9..a4c0a1ae3 100644 --- a/packages/cli/src/bundler/mod.rs +++ b/packages/cli/src/bundler/mod.rs @@ -69,9 +69,7 @@ impl<'a> BundleContext<'a> { } } - let tools_dir = dirs::cache_dir() - .unwrap_or_else(|| PathBuf::from(".cache")) - .join("dioxus"); + let tools_dir = crate::Workspace::tools_dir(); let _ = std::fs::create_dir_all(&tools_dir); let arch = { diff --git a/packages/cli/src/esbuild.rs b/packages/cli/src/esbuild.rs index eddad4c58..35e3c8fbc 100644 --- a/packages/cli/src/esbuild.rs +++ b/packages/cli/src/esbuild.rs @@ -42,11 +42,11 @@ impl Esbuild { /// The path where we cache the esbuild binary. fn installed_bin_path() -> PathBuf { - let dir = Workspace::dioxus_data_dir().join("esbuild"); + let dir = Workspace::tools_dir().join(format!("esbuild-{ESBUILD_VERSION}")); let name = if cfg!(windows) { - format!("esbuild-{ESBUILD_VERSION}.exe") + "esbuild.exe" } else { - format!("esbuild-{ESBUILD_VERSION}") + "esbuild" }; dir.join(name) } diff --git a/packages/cli/src/tailwind.rs b/packages/cli/src/tailwind.rs index 39d052b29..a1ba52a61 100644 --- a/packages/cli/src/tailwind.rs +++ b/packages/cli/src/tailwind.rs @@ -167,12 +167,12 @@ impl TailwindCli { } } - fn installed_bin_name(&self) -> String { - let mut name = format!("tailwindcss-{}", self.version); + fn installed_bin_name(&self) -> &'static str { if cfg!(windows) { - name = format!("{name}.exe"); + "tailwindcss.exe" + } else { + "tailwindcss" } - name } async fn install_github(&self) -> anyhow::Result<()> { @@ -232,8 +232,7 @@ impl TailwindCli { } fn install_dir(&self) -> Result { - let bindgen_dir = Workspace::dioxus_data_dir().join("tailwind/"); - Ok(bindgen_dir) + Ok(Workspace::tools_dir().join(format!("tailwindcss-{}", self.version))) } fn git_install_url(&self) -> Option { diff --git a/packages/cli/src/wasm_bindgen.rs b/packages/cli/src/wasm_bindgen.rs index f2cfa15f6..0e5ec3155 100644 --- a/packages/cli/src/wasm_bindgen.rs +++ b/packages/cli/src/wasm_bindgen.rs @@ -400,17 +400,17 @@ impl WasmBindgen { } fn install_dir(&self) -> anyhow::Result { - let bindgen_dir = Workspace::dioxus_data_dir().join("wasm-bindgen/"); - std::fs::create_dir_all(&bindgen_dir)?; - Ok(bindgen_dir) + let dir = Workspace::tools_dir().join(format!("wasm-bindgen-{}", self.version)); + std::fs::create_dir_all(&dir)?; + Ok(dir) } - fn installed_bin_name(&self) -> String { - let mut name = format!("wasm-bindgen-{}", self.version); + fn installed_bin_name(&self) -> &'static str { if cfg!(windows) { - name = format!("{name}.exe"); + "wasm-bindgen.exe" + } else { + "wasm-bindgen" } - name } fn cargo_bin_name(&self) -> String { diff --git a/packages/cli/src/wasm_opt.rs b/packages/cli/src/wasm_opt.rs index 9a75a5c6a..1112df5d1 100644 --- a/packages/cli/src/wasm_opt.rs +++ b/packages/cli/src/wasm_opt.rs @@ -6,6 +6,9 @@ use std::path::{Path, PathBuf}; use tar::Archive; use tempfile::NamedTempFile; +/// Pinned binaryen version (contains wasm-opt). +const BINARYEN_VERSION: &str = "127"; + /// Write these wasm bytes with a particular set of optimizations pub async fn write_wasm(bytes: &[u8], output_path: &Path, cfg: &WasmOptConfig) -> Result<()> { std::fs::write(output_path, bytes)?; @@ -245,7 +248,7 @@ pub fn installed_location() -> Option { } fn install_dir() -> PathBuf { - Workspace::dioxus_data_dir().join("binaryen") + Workspace::tools_dir().join(format!("binaryen-{BINARYEN_VERSION}")) } fn installed_bin_name() -> &'static str { diff --git a/packages/cli/src/workspace.rs b/packages/cli/src/workspace.rs index 49f7a4bb6..1550fcfc7 100644 --- a/packages/cli/src/workspace.rs +++ b/packages/cli/src/workspace.rs @@ -613,6 +613,13 @@ impl Workspace { .to_path_buf() } + /// The directory where managed tool binaries are installed. + /// + /// Layout: `~/.dx/tools/{tool-name}-{version}/` + pub(crate) fn tools_dir() -> PathBuf { + Self::dioxus_data_dir().join("tools") + } + pub(crate) fn global_settings_file() -> PathBuf { Self::dioxus_data_dir().join("settings.toml") }