Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 <REPOS>...` | List of dependency repositories |
| `--mono-dir <DIR>` | Workspace directory (default: `build-mono`) |
| `--profile <NAME>` | Use a saved profile |
| Flag | Description |
|------ |------------- |
| `--deps <DEPS>...` | List of dependency repositories |
| `--mono-dir <DIR>` | Workspace directory (default: `build-mono`) |
| `--profile <NAME>` | Use a saved profile |

#### Diagnostic
| Flag | Description |
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
8 changes: 4 additions & 4 deletions src/cli/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ pub struct MonoRepoFlags {
#[arg(long)]
pub mono_dir: Option<String>,

/// 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<Vec<String>>,
pub deps: Option<Vec<String>>,

/// 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<String>,
}

Expand Down
2 changes: 1 addition & 1 deletion src/commands/mono/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)))
Expand Down
8 changes: 4 additions & 4 deletions src/interactive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
_ => {}
Expand Down
9 changes: 2 additions & 7 deletions src/profile/crud.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(())
}
Expand All @@ -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}'?"),
Expand Down
5 changes: 2 additions & 3 deletions src/profile/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -15,7 +14,7 @@ pub fn print_profile_details(
if !deps.is_empty() {
writeln!(
output,
" {label}: {}",
" Dependencies: {}",
deps.values().map(Vec::len).sum::<usize>()
)
.ok();
Expand All @@ -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();
}
}
2 changes: 1 addition & 1 deletion src/resolve/resolved.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ pub struct ResolvedBuildFlags {
pub struct ResolvedMonoFlags {
pub mono_repo: bool,
pub mono_dir: String,
pub repos: Option<Vec<String>>,
pub deps: Option<Vec<String>>,
pub profile: Option<String>,
}

Expand Down
6 changes: 3 additions & 3 deletions src/resolve/resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
}
Expand Down
4 changes: 2 additions & 2 deletions tests/commands/mono/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand Down
6 changes: 3 additions & 3 deletions tests/common/args.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ pub fn default_args() -> Args {
mono: MonoRepoFlags {
mono_repo: false,
mono_dir: None,
repos: None,
deps: None,
profile: None,
},
}
Expand All @@ -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<String>) -> ResolvedArgs {
pub fn default_resolved_mono(deps: Vec<String>) -> 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()
}
4 changes: 2 additions & 2 deletions tests/config/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions tests/interactive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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()])
);
}
Expand Down
4 changes: 2 additions & 2 deletions tests/resolve/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading