From b4b77faaa9eb65fc35aeae81b8d9c6b92e15bddf Mon Sep 17 00:00:00 2001 From: alexion Date: Thu, 17 Sep 2026 09:57:11 -0400 Subject: [PATCH] refactor(rust): align workspace with style rules --- Cargo.lock | 5 ++ Cargo.toml | 7 +++ src/ariadne/BUILD | 5 +- src/ariadne/Cargo.toml | 11 +++-- src/ariadne/{lib.rs => ariadne.rs} | 0 src/ariadne/{main.rs => ariadne_main.rs} | 15 +----- src/machoke/BUILD | 4 +- src/machoke/Cargo.toml | 6 +-- src/machoke/{lib.rs => machoke.rs} | 0 src/machoke/{lib_test.rs => machoke_test.rs} | 0 src/monorepo/BUILD | 17 +++++++ src/monorepo/Cargo.toml | 9 ++++ src/monorepo/monorepo.rs | 1 + src/monorepo/workspace.rs | 20 ++++++++ src/monorepo/workspace_test.rs | 52 ++++++++++++++++++++ 15 files changed, 124 insertions(+), 28 deletions(-) rename src/ariadne/{lib.rs => ariadne.rs} (100%) rename src/ariadne/{main.rs => ariadne_main.rs} (69%) rename src/machoke/{lib.rs => machoke.rs} (100%) rename src/machoke/{lib_test.rs => machoke_test.rs} (100%) create mode 100644 src/monorepo/BUILD create mode 100644 src/monorepo/Cargo.toml create mode 100644 src/monorepo/monorepo.rs create mode 100644 src/monorepo/workspace.rs create mode 100644 src/monorepo/workspace_test.rs diff --git a/Cargo.lock b/Cargo.lock index 6fb8080..598e909 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,6 +57,7 @@ name = "ariadne" version = "0.1.0" dependencies = [ "clap", + "monorepo", "serde", "serde_json", ] @@ -135,6 +136,10 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" +[[package]] +name = "monorepo" +version = "0.1.0" + [[package]] name = "once_cell_polyfill" version = "1.70.2" diff --git a/Cargo.toml b/Cargo.toml index 10b9230..06ff695 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,5 +2,12 @@ members = [ "src/ariadne", "src/machoke", + "src/monorepo", ] resolver = "3" + +[workspace.dependencies] +clap = "4" +monorepo = { path = "src/monorepo" } +serde = "1.0" +serde_json = "1.0" diff --git a/src/ariadne/BUILD b/src/ariadne/BUILD index d035e0b..e1f9832 100644 --- a/src/ariadne/BUILD +++ b/src/ariadne/BUILD @@ -4,8 +4,8 @@ rust_library( name = "ariadne_lib", crate_name = "ariadne", srcs = [ + "ariadne.rs", "clew.rs", - "lib.rs", "pipeline.rs", ], deps = [ @@ -17,9 +17,10 @@ rust_library( rust_binary( name = "ariadne", crate_name = "ariadne_cli", - srcs = ["main.rs"], + srcs = ["ariadne_main.rs"], deps = [ ":ariadne_lib", + "//src/monorepo:monorepo", "//third_party/crates:clap", ], ) diff --git a/src/ariadne/Cargo.toml b/src/ariadne/Cargo.toml index 9479df0..faa94af 100644 --- a/src/ariadne/Cargo.toml +++ b/src/ariadne/Cargo.toml @@ -4,13 +4,14 @@ version = "0.1.0" edition = "2024" [lib] -path = "lib.rs" +path = "ariadne.rs" [[bin]] name = "ariadne" -path = "main.rs" +path = "ariadne_main.rs" [dependencies] -clap = { version = "4", features = ["derive"] } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" +clap = { workspace = true, features = ["derive"] } +monorepo = { workspace = true } +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } diff --git a/src/ariadne/lib.rs b/src/ariadne/ariadne.rs similarity index 100% rename from src/ariadne/lib.rs rename to src/ariadne/ariadne.rs diff --git a/src/ariadne/main.rs b/src/ariadne/ariadne_main.rs similarity index 69% rename from src/ariadne/main.rs rename to src/ariadne/ariadne_main.rs index f364e12..cbed38e 100644 --- a/src/ariadne/main.rs +++ b/src/ariadne/ariadne_main.rs @@ -17,7 +17,7 @@ struct Args { impl From for ariadne::Config { fn from(args: Args) -> Self { ariadne::Config { - output_dir: resolve_workspace_path(args.output_dir), + output_dir: monorepo::workspace::resolve_workspace_path(args.output_dir), force: args.force, target_stage: args.target_stage, } @@ -32,19 +32,6 @@ fn parse_stage(value: &str) -> Result { .ok_or_else(|| format!("unknown stage: {value}")) } -// TODO: Move this into a shared Rust utility crate. -fn resolve_workspace_path(path: PathBuf) -> PathBuf { - if path.is_absolute() { - return path; - } - - if let Some(workspace) = std::env::var_os("BUILD_WORKSPACE_DIRECTORY") { - return PathBuf::from(workspace).join(path); - } - - path -} - fn main() -> ariadne::Result<()> { let config: ariadne::Config = Args::parse().into(); ariadne::run(&config) diff --git a/src/machoke/BUILD b/src/machoke/BUILD index 1f4a86d..0d4ac70 100644 --- a/src/machoke/BUILD +++ b/src/machoke/BUILD @@ -3,11 +3,11 @@ load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") rust_library( name = "machoke_lib", crate_name = "machoke", - srcs = ["lib.rs"], + srcs = ["machoke.rs"], ) rust_test( name = "machoke_test", - srcs = ["lib_test.rs"], + srcs = ["machoke_test.rs"], deps = [":machoke_lib"], ) diff --git a/src/machoke/Cargo.toml b/src/machoke/Cargo.toml index c121f08..ad416f6 100644 --- a/src/machoke/Cargo.toml +++ b/src/machoke/Cargo.toml @@ -4,10 +4,6 @@ version = "0.1.0" edition = "2024" [lib] -path = "lib.rs" - -[[test]] -name = "lib_test" -path = "lib_test.rs" +path = "machoke.rs" [dependencies] diff --git a/src/machoke/lib.rs b/src/machoke/machoke.rs similarity index 100% rename from src/machoke/lib.rs rename to src/machoke/machoke.rs diff --git a/src/machoke/lib_test.rs b/src/machoke/machoke_test.rs similarity index 100% rename from src/machoke/lib_test.rs rename to src/machoke/machoke_test.rs diff --git a/src/monorepo/BUILD b/src/monorepo/BUILD new file mode 100644 index 0000000..6170275 --- /dev/null +++ b/src/monorepo/BUILD @@ -0,0 +1,17 @@ +load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") + +rust_library( + name = "monorepo", + crate_name = "monorepo", + srcs = [ + "monorepo.rs", + "workspace.rs", + ], + visibility = ["//visibility:public"], +) + +rust_test( + name = "workspace_test", + srcs = ["workspace_test.rs"], + deps = [":monorepo"], +) diff --git a/src/monorepo/Cargo.toml b/src/monorepo/Cargo.toml new file mode 100644 index 0000000..7e6cae6 --- /dev/null +++ b/src/monorepo/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "monorepo" +version = "0.1.0" +edition = "2024" + +[lib] +path = "monorepo.rs" + +[dependencies] diff --git a/src/monorepo/monorepo.rs b/src/monorepo/monorepo.rs new file mode 100644 index 0000000..b91220b --- /dev/null +++ b/src/monorepo/monorepo.rs @@ -0,0 +1 @@ +pub mod workspace; diff --git a/src/monorepo/workspace.rs b/src/monorepo/workspace.rs new file mode 100644 index 0000000..1a81a32 --- /dev/null +++ b/src/monorepo/workspace.rs @@ -0,0 +1,20 @@ +use std::path::PathBuf; + +pub fn resolve_workspace_path(path: PathBuf) -> PathBuf { + resolve_workspace_path_impl( + path, + std::env::var_os("BUILD_WORKSPACE_DIRECTORY").map(PathBuf::from), + ) +} + +fn resolve_workspace_path_impl(path: PathBuf, workspace: Option) -> PathBuf { + if path.is_absolute() { + return path; + } + + if let Some(workspace) = workspace { + return workspace.join(path); + } + + path +} diff --git a/src/monorepo/workspace_test.rs b/src/monorepo/workspace_test.rs new file mode 100644 index 0000000..6201822 --- /dev/null +++ b/src/monorepo/workspace_test.rs @@ -0,0 +1,52 @@ +use std::path::PathBuf; + +use monorepo::workspace::resolve_workspace_path; + +const BUILD_WORKSPACE_DIRECTORY: &str = "BUILD_WORKSPACE_DIRECTORY"; + + +#[derive(Debug)] +struct Case { + name: &'static str, + workspace: Option<&'static str>, + path: &'static str, + expected: &'static str, +} + +#[test] +fn resolve_workspace_path_cases() { + let cases = [ + Case { + name: "absolute path returns unchanged path", + workspace: Some("/workspace"), + path: "/tmp/output", + expected: "/tmp/output", + }, + Case { + name: "relative path joins workspace path", + workspace: Some("/workspace"), + path: "output/graph", + expected: "/workspace/output/graph", + }, + Case { + name: "relative path without workspace returns unchanged path", + workspace: None, + path: "output/graph", + expected: "output/graph", + }, + ]; + + for case in cases { + unsafe { + if let Some(workspace) = case.workspace { + std::env::set_var(BUILD_WORKSPACE_DIRECTORY, workspace); + } else { + std::env::remove_var(BUILD_WORKSPACE_DIRECTORY); + } + } + + let resolved = resolve_workspace_path(PathBuf::from(case.path)); + + assert_eq!(resolved, PathBuf::from(case.expected), "{}", case.name); + } +}