feat: update script-meta
This commit is contained in:
7
script-meta.json
Normal file
7
script-meta.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"helloworld-go": {
|
||||||
|
"script_name": "helloworld-go",
|
||||||
|
"script_length": 128,
|
||||||
|
"script_sha256": "b807f5d29dd2dbd4dc8c665616c836b1e1c0274d377672109a3e2397bb1139bf"
|
||||||
|
}
|
||||||
|
}
|
||||||
75
update-meta.rs
Executable file
75
update-meta.rs
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/usr/bin/env runrs
|
||||||
|
|
||||||
|
//! ```cargo
|
||||||
|
//! [dependencies]
|
||||||
|
//! serde = { version = "1.0", features = ["derive"] }
|
||||||
|
//! serde_json = "1.0"
|
||||||
|
//! sha256 = "1.5"
|
||||||
|
//! rust_util = { version = "0.6" }
|
||||||
|
//! ```
|
||||||
|
|
||||||
|
use rust_util::{debugging, failure_and_exit, opt_result, opt_value_result, success, XResult};
|
||||||
|
use serde::Serialize;
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
use std::fs;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
const SCRIPT_META_FILE: &str = "script-meta.json";
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct ScriptMeta {
|
||||||
|
script_name: String,
|
||||||
|
script_length: u64,
|
||||||
|
script_sha256: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> XResult<()> {
|
||||||
|
if fs::metadata(SCRIPT_META_FILE).is_err() {
|
||||||
|
failure_and_exit!("Script meta file {} not found.", SCRIPT_META_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut script_meta_map = BTreeMap::new();
|
||||||
|
|
||||||
|
let current_read_dir = opt_result!(fs::read_dir("."), "Read dir '.' failed: {}");
|
||||||
|
for dir in current_read_dir {
|
||||||
|
let dir_entry = opt_result!(dir, "Get dir failed: {}");
|
||||||
|
let dir_file_type = opt_result!(dir_entry.file_type(), "Get dir type failed: {}");
|
||||||
|
let file_name_os_string = dir_entry.file_name();
|
||||||
|
let script_dir = opt_value_result!(file_name_os_string.to_str(), "Cannot get file name.");
|
||||||
|
if !dir_file_type.is_dir() {
|
||||||
|
debugging!("Skip none dir: {}", script_dir);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if /*"update-meta-rs" == script_dir ||*/ script_dir.starts_with(".") {
|
||||||
|
debugging!("Skip update meta rs: {}", script_dir);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let abs_dir_entry = std::path::absolute(&dir_entry.path())?;
|
||||||
|
let main_rs = abs_dir_entry
|
||||||
|
.join("main.go");
|
||||||
|
|
||||||
|
script_meta_map.insert(
|
||||||
|
script_dir.to_string(),
|
||||||
|
read_script_meta(script_dir, &main_rs)?,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let script_meta_json = serde_json::to_string_pretty(&script_meta_map)?;
|
||||||
|
|
||||||
|
fs::write(SCRIPT_META_FILE, script_meta_json.as_bytes())?;
|
||||||
|
|
||||||
|
success!("Update file: {} succeed.", SCRIPT_META_FILE);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_script_meta(file_name: &str, main_rs: &PathBuf) -> XResult<ScriptMeta> {
|
||||||
|
let main_rs_meta = opt_result!(main_rs.metadata(), "Read file: {:?} meta failed: {}", main_rs);
|
||||||
|
let main_rs_content = fs::read(main_rs)?;
|
||||||
|
let script_sha256 = sha256::digest(&main_rs_content);
|
||||||
|
Ok(ScriptMeta {
|
||||||
|
script_name: file_name.to_string(),
|
||||||
|
script_length: main_rs_meta.len(),
|
||||||
|
script_sha256,
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user