From 0323e9bb8fb8de732e61cd664c6b574e3bd471db Mon Sep 17 00:00:00 2001 From: Masonlet Date: Mon, 3 Aug 2026 15:47:22 -0400 Subject: [PATCH 1/3] fix: dedup profile deps shared across test repos --- src/commands/mono/resolve.rs | 14 ++++++++++++-- tests/commands/mono/resolve.rs | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/commands/mono/resolve.rs b/src/commands/mono/resolve.rs index 6ef7d57..73a9d7b 100644 --- a/src/commands/mono/resolve.rs +++ b/src/commands/mono/resolve.rs @@ -1,4 +1,10 @@ -use crate::{config::Config, profile::Profile, resolve::ResolvedArgs}; +use std::collections::HashSet; +use crate::{ + config::Config, + profile::Profile, + repository::repo_dir_name, + resolve::ResolvedArgs +}; /// Normalizes a repository input to `username/repo` format. /// # Errors @@ -54,11 +60,15 @@ pub fn resolve_test_repos_for_mono( } } -/// Resolves the dependency repositories for mono-repo mode from a profile or explicit list. +/// Resolves the dependency repositories for mono-repo mode from a profile or explicit list, deduplicating deps shared across test repos. #[must_use] pub fn resolve_dep_repos_for_mono(args: &ResolvedArgs, profile: Option<&Profile>) -> Vec { + let mut seen = HashSet::new(); profile .map(|p| p.deps.values().flatten().cloned().collect()) .or_else(|| args.mono.repos.clone()) .unwrap_or_default() + .into_iter() + .filter(|r| seen.insert(repo_dir_name(r))) + .collect() } diff --git a/tests/commands/mono/resolve.rs b/tests/commands/mono/resolve.rs index c552c24..18e9fab 100644 --- a/tests/commands/mono/resolve.rs +++ b/tests/commands/mono/resolve.rs @@ -75,6 +75,31 @@ fn test_resolve_test_repos_for_mono_from_profile() { ); } +#[test] +fn test_resolve_dep_repos_for_mono_dedups_shared_deps() { + let profile = Profile { + test_repos: BTreeMap::from([ + ("game1".to_string(), "user/game1".to_string()), + ("game2".to_string(), "user/game2".to_string()), + ]), + deps: BTreeMap::from([ + ( + "game1".to_string(), + vec!["user/engine".to_string(), "user/audio".to_string()], + ), + ( + "game2".to_string(), + vec!["user/engine".to_string(), "user/ui".to_string()], + ), + ]), + }; + let args = default_resolved(); + assert_eq!( + resolve_dep_repos_for_mono(&args, Some(&profile)), + vec!["user/engine", "user/audio", "user/ui"] + ); +} + #[test] fn test_resolve_repos_for_mono_with_explicit_repos() { let mut args = default_resolved(); From e81ca68262e1c74b3759372748ebafda34c67e7c Mon Sep 17 00:00:00 2001 From: Masonlet Date: Mon, 3 Aug 2026 15:49:23 -0400 Subject: [PATCH 2/3] chore: cargo fmt --- src/commands/mono/mode.rs | 11 +++++++++-- src/commands/mono/resolve.rs | 7 +------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/commands/mono/mode.rs b/src/commands/mono/mode.rs index 1fc180f..1b8f920 100644 --- a/src/commands/mono/mode.rs +++ b/src/commands/mono/mode.rs @@ -1,7 +1,8 @@ use crate::{ build::{ build_project, detect_mono_build_system, generate_dev_scripts, generate_mono_config, - generate_watch_scripts, open_scripts, BuildSystem::{self, Npm}, + generate_watch_scripts, open_scripts, + BuildSystem::{self, Npm}, }, commands::{ build_repo_list, @@ -166,7 +167,13 @@ fn generate_npm_scripts( open_scripts("watch", mono_repo_path, &mut ctx.io, ctx.flags)?; } if !args.build.no_dev - && generate_dev_scripts(mono_repo_path, repos_path, test_repos, &mut ctx.io, ctx.flags)? + && generate_dev_scripts( + mono_repo_path, + repos_path, + test_repos, + &mut ctx.io, + ctx.flags, + )? && args.build.dev { open_scripts("dev", mono_repo_path, &mut ctx.io, ctx.flags)?; diff --git a/src/commands/mono/resolve.rs b/src/commands/mono/resolve.rs index 73a9d7b..89f1c89 100644 --- a/src/commands/mono/resolve.rs +++ b/src/commands/mono/resolve.rs @@ -1,10 +1,5 @@ +use crate::{config::Config, profile::Profile, repository::repo_dir_name, resolve::ResolvedArgs}; use std::collections::HashSet; -use crate::{ - config::Config, - profile::Profile, - repository::repo_dir_name, - resolve::ResolvedArgs -}; /// Normalizes a repository input to `username/repo` format. /// # Errors From eadfafb97a18e2b1375b2eb9f5ab969768931dc5 Mon Sep 17 00:00:00 2001 From: Masonlet Date: Mon, 3 Aug 2026 16:12:40 -0400 Subject: [PATCH 3/3] chore: bump v0.6.1 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index c6c7e64..837ae29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "star-setup" -version = "0.6.0" +version = "0.6.1" edition = "2021" repository = "https://github.com/star-setup/core" description = "Lightweight CLI to clone, configure, and wire single or multi-repo ecosystems"