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
12 changes: 6 additions & 6 deletions plugins/react-native/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,22 @@
"bash {{ .Virtenv }}/scripts/user/setup.sh"
],
"start:metro": [
"metro.sh start ${1:-default}"
"segkit metro start ${1:-default}"
],
"stop:metro": [
"metro.sh stop ${1:-default}"
"segkit metro stop ${1:-default}"
],
"start:android": [
"android.sh run \"${1:-}\""
"segkit android run \"${1:-}\""
],
"start:ios": [
"ios.sh run \"${1:-}\""
"segkit ios run \"${1:-}\""
],
"rn:metro:port": [
"rn.sh metro port ${1:-default}"
"segkit rn metro port ${1:-default}"
],
"rn:metro:clean": [
"rn.sh metro clean ${1:-default}"
"segkit rn metro clean ${1:-default}"
],
"doctor": [
"bash {{ .Virtenv }}/scripts/user/doctor.sh"
Expand Down
22 changes: 12 additions & 10 deletions segkit/src/delegate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,27 @@ fn resolve_script(name: &str) -> Result<String> {
"invalid script name: {name}"
);

let platform = if name.starts_with("android") {
"ANDROID"
let env_keys: &[&str] = if name.starts_with("android") {
&["ANDROID_SCRIPTS_DIR"]
} else if name.starts_with("ios") {
"IOS"
&["IOS_SCRIPTS_DIR"]
} else {
"RN"
&["REACT_NATIVE_SCRIPTS_DIR"]
};

let env_key = format!("{}_SCRIPTS_DIR", platform);
if let Ok(scripts_dir) = std::env::var(&env_key) {
let path = format!("{}/user/{}", scripts_dir, name);
if std::path::Path::new(&path).exists() {
return Ok(path);
for env_key in env_keys {
if let Ok(scripts_dir) = std::env::var(env_key) {
let path = format!("{}/user/{}", scripts_dir, name);
if std::path::Path::new(&path).exists() {
return Ok(path);
}
}
}

let primary_key = env_keys[0];
which::which(name)
.map(|p| p.to_string_lossy().into_owned())
.with_context(|| format!("{name} not found in PATH or ${env_key}"))
.with_context(|| format!("{name} not found in PATH or ${primary_key}"))
}

fn append_timing(script: &str, args: &[String], duration_ms: u128, exit_code: i32) {
Expand Down
6 changes: 6 additions & 0 deletions segkit/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ enum Commands {
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
args: Vec<String>,
},
/// Metro bundler commands (delegates to metro.sh)
Metro {
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
args: Vec<String>,
},
/// Check and install required dependencies (devbox)
Setup,
}
Expand All @@ -40,6 +45,7 @@ fn main() -> ExitCode {
Some(Commands::Android { args }) => delegate::run("android.sh", &args),
Some(Commands::Ios { args }) => delegate::run("ios.sh", &args),
Some(Commands::Rn { args }) => delegate::run("rn.sh", &args),
Some(Commands::Metro { args }) => delegate::run("metro.sh", &args),
Some(Commands::Setup) => setup::run(),
None => {
println!("segkit {}", env!("CARGO_PKG_VERSION"));
Expand Down
14 changes: 13 additions & 1 deletion segkit/tests/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ fn help_flag() {
.stdout(predicate::str::contains("android"))
.stdout(predicate::str::contains("ios"))
.stdout(predicate::str::contains("rn"))
.stdout(predicate::str::contains("metro"))
.stdout(predicate::str::contains("setup"));
}

Expand Down Expand Up @@ -61,13 +62,24 @@ fn ios_subcommand_without_script_fails_gracefully() {
fn rn_subcommand_without_script_fails_gracefully() {
segkit()
.args(["rn", "doctor"])
.env_remove("RN_SCRIPTS_DIR")
.env_remove("REACT_NATIVE_SCRIPTS_DIR")
.env("PATH", "")
.assert()
.failure()
.stderr(predicate::str::contains("rn.sh not found"));
}

#[test]
fn metro_subcommand_without_script_fails_gracefully() {
segkit()
.args(["metro", "start", "ios"])
.env_remove("REACT_NATIVE_SCRIPTS_DIR")
.env("PATH", "")
.assert()
.failure()
.stderr(predicate::str::contains("metro.sh not found"));
}

#[test]
fn setup_detects_devbox() {
segkit()
Expand Down
Loading