diff --git a/Cargo.toml b/Cargo.toml index 837ae29..133ed4b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "star-setup" -version = "0.6.1" +version = "0.6.2" edition = "2021" repository = "https://github.com/star-setup/core" description = "Lightweight CLI to clone, configure, and wire single or multi-repo ecosystems" diff --git a/README.md b/README.md index 56796ce..187638f 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ star-setup star-setup username/repo # Mono-repo mode -star-setup username/repo --repos user/lib1 user/lib2 +star-setup username/repo --deps user/lib1 user/lib2 ``` ## Prerequisites @@ -92,11 +92,11 @@ cargo install --git https://github.com/star-setup/core | `--no-dev` | Skip opening the dev server (npm) | #### Mono-Repo -| Flag | Description | -|------ |------------- | -| `--repos ...` | List of dependency repositories | -| `--mono-dir ` | Workspace directory (default: `build-mono`) | -| `--profile ` | Use a saved profile | +| Flag | Description | +|------ |------------- | +| `--deps ...` | List of dependency repositories | +| `--mono-dir ` | Workspace directory (default: `build-mono`) | +| `--profile ` | Use a saved profile | #### Diagnostic | Flag | Description | @@ -139,8 +139,8 @@ star-setup username/repo Clones multiple repositories into a single workspace and auto-detects the build system. A profile can hold several test repos and dependencies. ```bash -# Clone and build a test repo and a manual repo list -star-setup username/repo --repos user/lib1 user/lib2 +# Clone and build a test repo and a list of dependencies +star-setup username/repo --deps user/lib1 user/lib2 # Clone and build every test repo + dependency on a saved profile star-setup --profile myprofile @@ -215,13 +215,13 @@ Watch/dev scripts are generated by default and run each repo's `watch`/`dev` scr ```bash # Generate workspace and open watchers -star-setup username/repo --repos user/lib1 user/lib2 --watch +star-setup username/repo --deps user/lib1 user/lib2 --watch # Generate workspace without opening watchers -star-setup username/repo --repos user/lib1 user/lib2 +star-setup username/repo --deps user/lib1 user/lib2 # Skip watch script generation -star-setup username/repo --repos user/lib1 user/lib2 --no-watch +star-setup username/repo --deps user/lib1 user/lib2 --no-watch ``` Rerun `dev.ps1` / `dev.sh` anytime to reopen every dev server without rebuilding. diff --git a/src/cli/flags.rs b/src/cli/flags.rs index c327ec7..abe5e92 100644 --- a/src/cli/flags.rs +++ b/src/cli/flags.rs @@ -77,12 +77,12 @@ pub struct MonoRepoFlags { #[arg(long)] pub mono_dir: Option, - /// List of library repositories to clone in mono-repo mode + /// List of library dependencies to clone in mono-repo mode #[arg(long, num_args = 1.., conflicts_with = "profile")] - pub repos: Option>, + pub deps: Option>, - /// Use saved profile for library repositories - #[arg(short = 'p', long, conflicts_with = "repos")] + /// Use saved profile + #[arg(short = 'p', long, conflicts_with = "deps")] pub profile: Option, } diff --git a/src/commands/mono/resolve.rs b/src/commands/mono/resolve.rs index 89f1c89..a05000c 100644 --- a/src/commands/mono/resolve.rs +++ b/src/commands/mono/resolve.rs @@ -61,7 +61,7 @@ pub fn resolve_dep_repos_for_mono(args: &ResolvedArgs, profile: Option<&Profile> let mut seen = HashSet::new(); profile .map(|p| p.deps.values().flatten().cloned().collect()) - .or_else(|| args.mono.repos.clone()) + .or_else(|| args.mono.deps.clone()) .unwrap_or_default() .into_iter() .filter(|r| seen.insert(repo_dir_name(r))) diff --git a/src/interactive.rs b/src/interactive.rs index a9579a6..42a456a 100644 --- a/src/interactive.rs +++ b/src/interactive.rs @@ -33,19 +33,19 @@ pub fn interactive_mode(args: &mut ResolvedArgs, io: &mut IoCtx<'_>) -> Result<( } } - if args.mono.mono_repo && args.mono.profile.is_none() && args.mono.repos.is_none() { + if args.mono.mono_repo && args.mono.profile.is_none() && args.mono.deps.is_none() { loop { - match ask(" Mono-repo: (1) Use profile (2) Manual repo list", io)?.as_str() { + match ask(" Mono-repo: (1) Use profile (2) Manual dependency list", io)?.as_str() { "1" => { args.mono.profile = Some(ask_required(" Profile name", io)?); break; } "2" => { let repo_list = ask_required( - " Enter repos (space separated 'username/lib1 username/lib2')", + " Enter dependencies (space separated 'username/lib1 username/lib2')", io, )?; - args.mono.repos = Some(repo_list.split_whitespace().map(String::from).collect()); + args.mono.deps = Some(repo_list.split_whitespace().map(String::from).collect()); break; } _ => {} diff --git a/src/profile/crud.rs b/src/profile/crud.rs index 9aaad5e..8bee7b1 100644 --- a/src/profile/crud.rs +++ b/src/profile/crud.rs @@ -53,7 +53,7 @@ pub fn add_profile( writeln!(io.output, " Configuration saved to: {}", path.display()).ok(); }, )?; - print_profile_details(io.output, "Profile details:", "Repositories", profile); + print_profile_details(io.output, "Profile details:", profile); writeln!(io.output, " Usage: star-setup --profile {name}").ok(); Ok(()) } @@ -76,12 +76,7 @@ pub fn remove_profile( Some(r) => r.clone(), }; - print_profile_details( - io.output, - &format!("Profile '{name}'"), - "Repositories", - &profile, - ); + print_profile_details(io.output, &format!("Profile '{name}'"), &profile); if !confirm_abort( &format!(" Are you sure you want to remove profile '{name}'?"), diff --git a/src/profile/display.rs b/src/profile/display.rs index 40fb7af..f2ec833 100644 --- a/src/profile/display.rs +++ b/src/profile/display.rs @@ -4,7 +4,6 @@ use std::io::Write; pub fn print_profile_details( output: &mut (impl Write + ?Sized), title: &str, - label: &str, profile: &Profile, ) { let Profile { test_repos, deps } = profile; @@ -15,7 +14,7 @@ pub fn print_profile_details( if !deps.is_empty() { writeln!( output, - " {label}: {}", + " Dependencies: {}", deps.values().map(Vec::len).sum::() ) .ok(); @@ -39,7 +38,7 @@ pub fn list_profiles(config: &Config, io: &mut IoCtx<'_>) { } writeln!(io.output, "Configured profiles:\n").ok(); for (name, profile) in &config.profiles { - print_profile_details(io.output, name, "Repositories", profile); + print_profile_details(io.output, name, profile); writeln!(io.output).ok(); } } diff --git a/src/resolve/resolved.rs b/src/resolve/resolved.rs index 676fb6f..28d1012 100644 --- a/src/resolve/resolved.rs +++ b/src/resolve/resolved.rs @@ -31,7 +31,7 @@ pub struct ResolvedBuildFlags { pub struct ResolvedMonoFlags { pub mono_repo: bool, pub mono_dir: String, - pub repos: Option>, + pub deps: Option>, pub profile: Option, } diff --git a/src/resolve/resolver.rs b/src/resolve/resolver.rs index 1657e58..27a45b3 100644 --- a/src/resolve/resolver.rs +++ b/src/resolve/resolver.rs @@ -97,16 +97,16 @@ fn resolve_build_flags( } fn resolve_mono_flags(mono: MonoRepoFlags, default: Option<&ConfigEntry>) -> ResolvedMonoFlags { - let repos = mono.repos; + let deps = mono.deps; let profile = mono.profile; - let mono_repo = mono.mono_repo || repos.is_some() || profile.is_some(); + let mono_repo = mono.mono_repo || deps.is_some() || profile.is_some(); ResolvedMonoFlags { mono_repo, mono_dir: mono .mono_dir .or_else(|| default.map(|e| e.mono_dir.clone())) .unwrap_or_else(|| "build-mono".to_string()), - repos, + deps, profile, } } diff --git a/tests/commands/mono/resolve.rs b/tests/commands/mono/resolve.rs index 18e9fab..69fd707 100644 --- a/tests/commands/mono/resolve.rs +++ b/tests/commands/mono/resolve.rs @@ -101,9 +101,9 @@ fn test_resolve_dep_repos_for_mono_dedups_shared_deps() { } #[test] -fn test_resolve_repos_for_mono_with_explicit_repos() { +fn test_resolve_deps_for_mono_with_explicit_deps() { let mut args = default_resolved(); - args.mono.repos = Some(vec!["user/lib1".to_string(), "user/lib2".to_string()]); + args.mono.deps = Some(vec!["user/lib1".to_string(), "user/lib2".to_string()]); assert_eq!( resolve_dep_repos_for_mono(&args, None), vec!["user/lib1", "user/lib2"] diff --git a/tests/common/args.rs b/tests/common/args.rs index ab2457f..774083e 100644 --- a/tests/common/args.rs +++ b/tests/common/args.rs @@ -42,7 +42,7 @@ pub fn default_args() -> Args { mono: MonoRepoFlags { mono_repo: false, mono_dir: None, - repos: None, + deps: None, profile: None, }, } @@ -66,12 +66,12 @@ pub fn default_resolved_interactive() -> ResolvedArgs { resolve_with_config(default_args(), &Config::new()).unwrap() } -pub fn default_resolved_mono(repos: Vec) -> ResolvedArgs { +pub fn default_resolved_mono(deps: Vec) -> ResolvedArgs { let mut args = default_args(); args.repo = Some("user/test-repo".to_string()); args.yes = true; args.build.no_build = true; args.mono.mono_repo = true; - args.mono.repos = Some(repos); + args.mono.deps = Some(deps); resolve_with_config(args, &Config::new()).unwrap() } diff --git a/tests/config/types.rs b/tests/config/types.rs index 003c8f2..081cee5 100644 --- a/tests/config/types.rs +++ b/tests/config/types.rs @@ -30,7 +30,7 @@ fn test_from_flags_defaults() { let mono = MonoRepoFlags { mono_repo: false, mono_dir: None, - repos: None, + deps: None, profile: None, }; let diagnostic = DiagnosticFlags { @@ -79,7 +79,7 @@ fn test_from_flags_with_values() { let mono = MonoRepoFlags { mono_repo: false, mono_dir: Some("workspace".to_string()), - repos: None, + deps: None, profile: None, }; let diagnostic = DiagnosticFlags { diff --git a/tests/interactive.rs b/tests/interactive.rs index 571f1d9..8b993b1 100644 --- a/tests/interactive.rs +++ b/tests/interactive.rs @@ -48,7 +48,7 @@ fn test_interactive_mode_mono_repo_with_profile() { } #[test] -fn test_interactive_mode_mono_repo_with_manual_repos() { +fn test_interactive_mode_mono_repo_with_manual_deps() { let input = input_with_suffix(b"user/repo\nn\nn\nn\nn\n2\n2\nuser/lib1 user/lib2"); let (args, _) = with_io_input_output(&input, |io| { let mut args = default_resolved(); @@ -58,7 +58,7 @@ fn test_interactive_mode_mono_repo_with_manual_repos() { assert!(args.mono.mono_repo); assert_eq!( - args.mono.repos, + args.mono.deps, Some(vec!["user/lib1".to_string(), "user/lib2".to_string()]) ); } diff --git a/tests/resolve/resolve.rs b/tests/resolve/resolve.rs index 48afd7c..4fc4210 100644 --- a/tests/resolve/resolve.rs +++ b/tests/resolve/resolve.rs @@ -139,10 +139,10 @@ fn test_resolve_with_config_errors_on_missing_config_name() { } #[test] -fn test_resolve_with_config_mono_repo_from_repos() { +fn test_resolve_with_config_mono_repo_from_deps() { let config = Config::new(); let mut args = default_args(); - args.mono.repos = Some(vec!["user/lib1".to_string()]); + args.mono.deps = Some(vec!["user/lib1".to_string()]); let resolved = resolve_with_config(args, &config).unwrap(); assert!(resolved.mono.mono_repo);