diff --git a/Cargo.lock b/Cargo.lock index 897e911..2ef5471 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1221,7 +1221,7 @@ dependencies = [ [[package]] name = "runrs" -version = "1.1.1" +version = "1.1.2" dependencies = [ "argh", "reqwest", diff --git a/Cargo.toml b/Cargo.toml index d1aac7f..12186dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "runrs" -version = "1.1.1" +version = "1.1.2" edition = "2018" license = "MIT/Apache-2.0" description = "A Tool for Run Rust Scripts" diff --git a/src/main.rs b/src/main.rs index 243bda7..ceb26a9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,8 @@ mod run_rs; mod template; mod util; mod verify; +#[cfg(feature = "switch-ts-lang")] +mod run_ts; #[derive(FromArgs, PartialEq, Debug)] /// Run script @@ -75,5 +77,10 @@ fn do_run_script(rs_args: &RunScriptArgs) { run_rs::do_run_script(&rs_args); return; } + #[cfg(feature = "switch-ts-lang")] + { + run_ts::do_run_script(&rs_args); + return; + } failure_and_exit!("Only rust script supported."); } diff --git a/src/run_rs.rs b/src/run_rs.rs index 76b832d..6749eb0 100644 --- a/src/run_rs.rs +++ b/src/run_rs.rs @@ -1,5 +1,5 @@ -use rust_util::util_env::is_env_on; use crate::{util, verify, RunScriptArgs}; +use rust_util::util_env::is_env_on; use rust_util::util_os::get_user_home; pub fn do_run_script(rs_args: &RunScriptArgs) { diff --git a/src/run_ts.rs b/src/run_ts.rs new file mode 100644 index 0000000..f83b7ff --- /dev/null +++ b/src/run_ts.rs @@ -0,0 +1,24 @@ +use crate::{verify, RunScriptArgs}; +use rust_util::util_cmd; +use rust_util::util_env::is_env_on; +use std::process::Command; + +pub fn do_run_script(ts_args: &RunScriptArgs) { + if ts_args.arguments.is_empty() { + failure_and_exit!("Must assign a script file name"); + } + debugging!("Run ts args: {:?}", ts_args.arguments); + let script_file = &ts_args.arguments[ts_args.arguments.len() - 1]; + verify::verify_script(script_file, is_env_on("RUNTS_SKIP_VERIFY")); + + let mut cmd = Command::new("/usr/bin/env"); + cmd.args(["-S", "deno", "run"]); + for arg in &ts_args.arguments { + cmd.arg(arg); + } + + debugging!("Run command: {cmd:?}"); + if let Err(e) = util_cmd::run_command_and_wait(&mut cmd) { + failure_and_exit!("Run deno: {script_file} failed: {e}"); + } +} diff --git a/src/script.help.ts.txt b/src/script.help.ts.txt index 24361d2..c04b3f2 100644 --- a/src/script.help.ts.txt +++ b/src/script.help.ts.txt @@ -11,3 +11,10 @@ $ runts -l|--list [filter] Install script: $ runts -i|--install + +Environment variables: +┌──────────────────────┬────────────────────────────────────────────────┐ +│ Variable │ Description │ +├──────────────────────┼────────────────────────────────────────────────┤ +│ RUNTS_SKIP_VERIFY │ Skip script verification, `bool` │ +└──────────────────────┴────────────────────────────────────────────────┘ diff --git a/src/script.template.ts b/src/script.template.ts index faf8007..238b967 100644 --- a/src/script.template.ts +++ b/src/script.template.ts @@ -1,3 +1,3 @@ -#!/usr/bin/env -S deno run --allow-env +#!/usr/bin/env runts -- --allow-env -console.log("Hello world."); \ No newline at end of file +console.log("Hello world."); diff --git a/src/verify.rs b/src/verify.rs index 1c1521f..762dce1 100644 --- a/src/verify.rs +++ b/src/verify.rs @@ -7,8 +7,9 @@ pub fn verify_script(file: &str, skip_verify: bool) { } match Script::verify_script_file_with_system_key_map(file) { Ok(true) => { - debugging!("Script {file} verification success"); // Verify file ok! + debugging!("Script {file} verification success"); + return; } Ok(false) => { failure_and_exit!("Verify script {file} failed, no signature or bad signature");