diff --git a/Cargo.lock b/Cargo.lock index 88214a256..2a008e5e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2641,6 +2641,15 @@ dependencies = [ "dirs-sys 0.4.1", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys 0.5.0", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -2658,7 +2667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.6", "winapi", ] @@ -2670,10 +2679,22 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", - "redox_users", + "redox_users 0.4.6", "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users 0.5.0", + "windows-sys 0.59.0", +] + [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -2681,7 +2702,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.6", "winapi", ] @@ -3559,6 +3580,7 @@ dependencies = [ "anyhow", "bytes 1.9.0", "clap", + "dirs 6.0.0", "futures", "golem-cli", "golem-common", @@ -3590,7 +3612,6 @@ dependencies = [ "test-r", "tokio", "tracing", - "xdg", ] [[package]] @@ -3632,7 +3653,7 @@ dependencies = [ "cli-table", "colored", "derive_more", - "dirs 5.0.1", + "dirs 6.0.0", "env_logger 0.11.6", "futures-util", "glob", @@ -4286,6 +4307,7 @@ dependencies = [ "serde_json", "sqlx", "sysinfo", + "system-interface", "tempfile", "test-r", "testcontainers", @@ -7880,6 +7902,17 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "redox_users" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +dependencies = [ + "getrandom", + "libredox", + "thiserror 2.0.11", +] + [[package]] name = "regalloc2" version = "0.10.2" @@ -12219,12 +12252,6 @@ dependencies = [ "rustix", ] -[[package]] -name = "xdg" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" - [[package]] name = "xdg-home" version = "1.3.0" diff --git a/Cargo.toml b/Cargo.toml index be254b5ca..f9ba0fafd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -100,6 +100,7 @@ console-subscriber = "0.4.1" ctor = "0.2.9" dashmap = "6.1.0" derive_more = { version = "1.0.0", features = ["display", "into", "from_str"] } +dirs = "6.0.0" drop-stream = "0.3.2" figment = { version = "0.10.19", features = ["toml", "env"] } fred = { version = "=9.4.0", features = [ @@ -178,6 +179,7 @@ sqlx = { version = "0.8", features = [ ] } strum = "0.26.3" strum_macros = "0.26.4" +system-interface = "0.27.3" tap = "1.0.1" tempfile = "3.14.0" testcontainers = { version = "0.23.1" } @@ -223,7 +225,6 @@ wasmtime = { version = "=27.0.0", features = ["component-model"] } wasmtime-wasi = { version = "=27.0.0" } wasmtime-wasi-http = { version = "=27.0.0" } webpki-roots = { version = "0.26.7" } -xdg = "2.5.2" [patch.crates-io] redis-protocol = { git = "https://github.com/golemcloud/redis-protocol.rs.git", branch = "unpin-cookie-factory" } diff --git a/golem-cli/Cargo.toml b/golem-cli/Cargo.toml index f5d556fc9..d2e702a36 100644 --- a/golem-cli/Cargo.toml +++ b/golem-cli/Cargo.toml @@ -43,7 +43,7 @@ clap_complete = { version = "4.5.38" } cli-table = { workspace = true } colored = "2.1.0" derive_more = { workspace = true } -dirs = "5.0.1" +dirs = { workspace = true } futures-util = { workspace = true } glob = "0.3.1" golem-examples = "=1.1.1" diff --git a/golem-worker-executor-base/Cargo.toml b/golem-worker-executor-base/Cargo.toml index 73b71188a..ff0ed7e3d 100644 --- a/golem-worker-executor-base/Cargo.toml +++ b/golem-worker-executor-base/Cargo.toml @@ -108,6 +108,7 @@ testcontainers = { workspace = true } testcontainers-modules = { workspace = true } test-r = { workspace = true } tracing-subscriber = { workspace = true } +system-interface = { workspace = true } [build-dependencies] cargo_metadata = "0.19.1" diff --git a/golem-worker-executor-base/tests/api.rs b/golem-worker-executor-base/tests/api.rs index 99fd5fa56..cb5677184 100644 --- a/golem-worker-executor-base/tests/api.rs +++ b/golem-worker-executor-base/tests/api.rs @@ -39,10 +39,10 @@ use std::collections::HashMap; use std::env; use std::io::Write; use std::net::SocketAddr; -use std::os::unix::fs::FileExt; use std::path::Path; use std::sync::{Arc, Mutex}; use std::time::{Duration, Instant}; +use system_interface::fs::FileIoExt; use tokio::time::sleep; use tracing::{debug, info}; use wasmtime_wasi::runtime::spawn; diff --git a/golem/Cargo.toml b/golem/Cargo.toml index aafe51988..1337628bd 100644 --- a/golem/Cargo.toml +++ b/golem/Cargo.toml @@ -32,6 +32,7 @@ golem-worker-service-base = { path = "../golem-worker-service-base", version = " anyhow = { workspace = true } bytes = { workspace = true } clap = { workspace = true } +dirs = { workspace = true } http-body-util = "0.1.2" hyper = { workspace = true } futures = { workspace = true } @@ -49,15 +50,15 @@ sqlx = { workspace = true } tempfile = { workspace = true } tokio = { workspace = true } tracing = { workspace = true } -xdg = { workspace = true } # Sozu builds with simd support by default, but it only works on x86_64 +# Sozu does not support windows, until we find an alternative we exclude suzo deps, and build a dummy binary -[target.'cfg(target_arch = "x86_64")'.dependencies] +[target.'cfg(all(target_arch = "x86_64", not(windows)))'.dependencies] sozu-command-lib = { workspace = true } sozu-lib = { workspace = true } -[target.'cfg(not(target_arch = "x86_64"))'.dependencies] +[target.'cfg(all(not(target_arch = "x86_64"), not(windows)))'.dependencies] sozu-command-lib = { workspace = true, default-features = false } sozu-lib = { workspace = true, default-features = false } diff --git a/golem/src/command.rs b/golem/src/command.rs index 6676ea9de..b863583b8 100644 --- a/golem/src/command.rs +++ b/golem/src/command.rs @@ -56,10 +56,15 @@ impl CliCommand for SingleExecutableCommand { data_dir, clean, } => { - let base_directories = xdg::BaseDirectories::with_prefix("golem") - .map_err(|_| GolemError("Failed to get XDG base directories".to_string()))?; - - let data_dir = data_dir.unwrap_or_else(|| base_directories.get_state_home()); + let data_dir = { + if let Some(data_dir) = data_dir { + data_dir + } else { + dirs::data_local_dir() + .ok_or_else(|| GolemError("Failed to get data dir".to_string()))? + .join("golem") + } + }; if clean && tokio::fs::metadata(&data_dir).await.is_ok() { tokio::fs::remove_dir_all(&data_dir) diff --git a/golem/src/launch.rs b/golem/src/launch.rs index 7ad4a00d6..748291452 100644 --- a/golem/src/launch.rs +++ b/golem/src/launch.rs @@ -14,6 +14,7 @@ use crate::health; use crate::migration::IncludedMigrationsDir; +use crate::proxy; use crate::AllRunDetails; use anyhow::Context; use golem_common::config::DbConfig; @@ -46,8 +47,6 @@ use tokio::runtime::Handle; use tokio::task::JoinSet; use tracing::Instrument; -use crate::proxy; - pub struct LaunchArgs { pub router_host: String, pub router_port: u16, @@ -195,7 +194,7 @@ fn worker_executor_config( ..ComponentServiceGrpcConfig::default() } ), - compiled_component_service: CompiledComponentServiceConfig::Disabled(golem_worker_executor_base::services::golem_config::CompiledComponentServiceDisabledConfig { }), + compiled_component_service: CompiledComponentServiceConfig::Disabled(golem_worker_executor_base::services::golem_config::CompiledComponentServiceDisabledConfig {}), shard_manager_service: ShardManagerServiceConfig::Grpc(ShardManagerServiceGrpcConfig { host: args.router_host.clone(), port: shard_manager_run_details.grpc_port, diff --git a/golem/src/proxy.rs b/golem/src/proxy.rs index 01a79b1c2..4cfb4866a 100644 --- a/golem/src/proxy.rs +++ b/golem/src/proxy.rs @@ -12,8 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +use crate::AllRunDetails; +use tokio::task::JoinSet; +use tracing::info; + +#[cfg(not(windows))] use anyhow::Context; +#[cfg(not(windows))] use sozu_command_lib::proto::command::WorkerResponse; +#[cfg(not(windows))] use sozu_command_lib::{ channel::Channel, config::ListenerBuilder, @@ -22,12 +29,10 @@ use sozu_command_lib::{ RequestHttpFrontend, RulePosition, SocketAddress, WorkerRequest, }, }; +#[cfg(not(windows))] use std::net::Ipv4Addr; -use tokio::task::JoinSet; -use tracing::info; - -use crate::AllRunDetails; +#[cfg(not(windows))] pub fn start_proxy( listener_addr: &str, listener_port: u16, @@ -163,3 +168,18 @@ pub fn start_proxy( Ok(command_channel) } + +#[cfg(windows)] +pub struct Dummy; + +#[cfg(windows)] +pub fn start_proxy( + _listener_addr: &str, + _listener_port: u16, + _healthcheck_port: u16, + _all_run_details: &AllRunDetails, + _join_set: &mut JoinSet>, +) -> Result { + info!("Proxy is not supported on windows yet"); + Ok(Dummy) +}