feat: add get_runrs
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -128,7 +128,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "runrs"
|
name = "runrs"
|
||||||
version = "0.1.9"
|
version = "0.1.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rust_util",
|
"rust_util",
|
||||||
"sha256",
|
"sha256",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "runrs"
|
name = "runrs"
|
||||||
version = "0.1.9"
|
version = "0.1.10"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT/Apache-2.0"
|
license = "MIT/Apache-2.0"
|
||||||
description = "Run Rust Scripts"
|
description = "Run Rust Scripts"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ Environment variables
|
|||||||
|---------------|----------------------------------------------------------------|
|
|---------------|----------------------------------------------------------------|
|
||||||
| `HOME` | User home, default by OS system |
|
| `HOME` | User home, default by OS system |
|
||||||
| `RUNRS_SKIP_CACHE` | Skip compiled cached file , turn on `true`, `yes`, `on` or `1` |
|
| `RUNRS_SKIP_CACHE` | Skip compiled cached file , turn on `true`, `yes`, `on` or `1` |
|
||||||
|
| `RUNRS_SILENT_BUILD` | Build new binary in silent mode |
|
||||||
| `RUNRS_RUST_SCRIPT` | `rust_script` command line bin file |
|
| `RUNRS_RUST_SCRIPT` | `rust_script` command line bin file |
|
||||||
| `RUNRS_MAX_SCRIPT_LEN` | Max script length |
|
| `RUNRS_MAX_SCRIPT_LEN` | Max script length |
|
||||||
|
|
||||||
|
|||||||
1057
scripts/get_runrs/Cargo.lock
generated
Normal file
1057
scripts/get_runrs/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
10
scripts/get_runrs/Cargo.toml
Normal file
10
scripts/get_runrs/Cargo.toml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "get_runrs"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
reqwest = { version = "0.11", features = ["blocking"] }
|
||||||
|
rust_util = { version = "0.6" }
|
||||||
55
scripts/get_runrs/src/main.rs
Normal file
55
scripts/get_runrs/src/main.rs
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env runrs
|
||||||
|
|
||||||
|
//! ```cargo
|
||||||
|
//! [dependencies]
|
||||||
|
//! reqwest = { version = "0.11", features = ["blocking"] }
|
||||||
|
//! rust_util = { version = "0.6" }
|
||||||
|
//! ```
|
||||||
|
|
||||||
|
use std::{env, fs};
|
||||||
|
use std::os::unix::fs::PermissionsExt;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use rust_util::{failure_and_exit, success, util_env, util_os, warning};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args = env::args().skip(1).collect::<Vec<_>>();
|
||||||
|
if args.is_empty() { failure_and_exit!("No arguments"); }
|
||||||
|
let script_name = args.get(0).unwrap_or_else(|| {
|
||||||
|
failure_and_exit!("No script name assigned")
|
||||||
|
});
|
||||||
|
let home = util_os::get_user_home().unwrap_or_else(|| {
|
||||||
|
failure_and_exit!("Get user home failed");
|
||||||
|
});
|
||||||
|
let home_bin = format!("{}/bin", home);
|
||||||
|
if !PathBuf::from(&home_bin).exists() {
|
||||||
|
failure_and_exit!("Home bin {} not exists", home_bin);
|
||||||
|
}
|
||||||
|
let overwrite_target_resource_script = util_env::is_env_on("OVERWRITE_SCRIPT");
|
||||||
|
let target_resource_script = format!("{}/bin/{}.rs", home, script_name);
|
||||||
|
if PathBuf::from(&target_resource_script).exists() {
|
||||||
|
if overwrite_target_resource_script {
|
||||||
|
warning!("Script: {} exists, will be overwritten", target_resource_script);
|
||||||
|
} else {
|
||||||
|
failure_and_exit!("Target script: {} exists", target_resource_script);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let fetch_resource = format!(
|
||||||
|
"https://git.hatter.ink/hatter/runrs/raw/branch/master/scripts/{}/src/main.rs", script_name);
|
||||||
|
let response = reqwest::blocking::get(&fetch_resource).unwrap_or_else(|e| {
|
||||||
|
failure_and_exit!("Get script resource failed: {}\n- {}", e, fetch_resource);
|
||||||
|
});
|
||||||
|
if response.status().as_u16() != 200 {
|
||||||
|
failure_and_exit!("Get script resource not success: {}\n- {}", response.status().as_u16(), fetch_resource);
|
||||||
|
}
|
||||||
|
let response_bytes = response.bytes().unwrap_or_else(|e| {
|
||||||
|
failure_and_exit!("Get script resource failed: {},\n- {}", e, fetch_resource);
|
||||||
|
});
|
||||||
|
fs::write(&target_resource_script, response_bytes).unwrap_or_else(|e| {
|
||||||
|
failure_and_exit!("Write to script file: {} failed: {}", target_resource_script, e);
|
||||||
|
});
|
||||||
|
fs::set_permissions(&target_resource_script, PermissionsExt::from_mode(0o755)).unwrap_or_else(|e| {
|
||||||
|
failure_and_exit!("Apply executable permission to file: {:?} failed: {}", target_resource_script, e);
|
||||||
|
});
|
||||||
|
success!("Write to script file: {} success", target_resource_script);
|
||||||
|
}
|
||||||
@@ -6,8 +6,7 @@ use std::path::PathBuf;
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
use rust_util::{util_cmd, util_msg};
|
use rust_util::util_cmd;
|
||||||
use rust_util::util_msg::MessageType;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let user_home = get_user_home();
|
let user_home = get_user_home();
|
||||||
@@ -43,7 +42,7 @@ fn build_script_command(rust_script: PathBuf, script_file: &str, script_sha256:
|
|||||||
Command::new(&cache_script_bin_name)
|
Command::new(&cache_script_bin_name)
|
||||||
} else {
|
} else {
|
||||||
let mut cmd = Command::new(rust_script);
|
let mut cmd = Command::new(rust_script);
|
||||||
if util_msg::is_logger_level_enabled(MessageType::DEBUG) {
|
if !is_env_on("RUNRS_SILENT_BUILD") {
|
||||||
cmd.arg("--cargo-output");
|
cmd.arg("--cargo-output");
|
||||||
}
|
}
|
||||||
cmd.args(&["--bin-name", &script_sha256, script_file]);
|
cmd.args(&["--bin-name", &script_sha256, script_file]);
|
||||||
@@ -99,7 +98,7 @@ runrs <script.rs> [arguments]
|
|||||||
fn read_file_and_digest(script_file: &str) -> (String, String) {
|
fn read_file_and_digest(script_file: &str) -> (String, String) {
|
||||||
let default_max_script_len = 1024 * 1024;
|
let default_max_script_len = 1024 * 1024;
|
||||||
let max_script_len: u64 = env::var("RUNRS_MAX_SCRIPT_LEN")
|
let max_script_len: u64 = env::var("RUNRS_MAX_SCRIPT_LEN")
|
||||||
.map(|len| len.parse().unwrap_or_else(|| default_max_script_len)).unwrap_or_else(|| default_max_script_len);
|
.map(|len| len.parse().unwrap_or_else(|_| default_max_script_len)).unwrap_or_else(|_| default_max_script_len);
|
||||||
match fs::metadata(script_file) {
|
match fs::metadata(script_file) {
|
||||||
Err(_) => failure_and_exit!("Script file not exists: {}", script_file),
|
Err(_) => failure_and_exit!("Script file not exists: {}", script_file),
|
||||||
Ok(metadata) => if metadata.is_dir() {
|
Ok(metadata) => if metadata.is_dir() {
|
||||||
|
|||||||
Reference in New Issue
Block a user