1
0
mirror of https://github.com/jht5945/buildj.git synced 2025-12-28 09:40:04 +08:00

Merge branch 'master' of github.com:jht5945/buildj

This commit is contained in:
2019-08-16 00:42:13 +08:00
5 changed files with 143 additions and 99 deletions

View File

@@ -18,8 +18,10 @@ use rust_util::{
};
use crypto::{
sha2::Sha256,
digest::Digest,
md5::Md5,
sha1::Sha1,
sha2::{Sha256, Sha512},
};
pub fn get_args_as_vec() -> Vec<String> {
@@ -38,14 +40,27 @@ pub fn is_buildin_args(args: &Vec<String>) -> bool {
}
pub fn verify_file_integrity(integrity: &str, file_name: &str) -> XResult<bool> {
if ! integrity.starts_with("sha256:hex-") {
let digest_hex: &str;
let calc_digest_hex: String;
if integrity.starts_with("sha256:hex-") {
digest_hex = &integrity[11..];
calc_digest_hex = calc_file_sha256(file_name)?;
} else if integrity.starts_with("sha512:hex-") {
digest_hex = &integrity[11..];
calc_digest_hex = calc_file_sha512(file_name)?;
} else if integrity.starts_with("sha1:hex-") {
digest_hex = &integrity[9..];
calc_digest_hex = calc_file_sha1(file_name)?;
} else if integrity.starts_with("md5:hex-") {
digest_hex = &integrity[8..];
calc_digest_hex = calc_file_md5(file_name)?;
} else {
return Err(new_box_error(&format!("Not supported integrigty: {}", integrity)));
}
let sha256_hex = &integrity[11..];
let calc_sha256_hex = calc_file_sha256(file_name)?;
let integrity_verify_result = sha256_hex == calc_sha256_hex;
let integrity_verify_result = digest_hex == calc_digest_hex.as_str();
if ! integrity_verify_result {
print_message(MessageType::ERROR, &format!("Verify integrity failed, expected: {}, actual: {}", sha256_hex, calc_sha256_hex));
print_message(MessageType::ERROR, &format!("Verify integrity failed, expected: {}, actual: {}", digest_hex, calc_digest_hex));
}
Ok(integrity_verify_result)
}
@@ -56,8 +71,27 @@ pub fn calc_sha256(d: &[u8]) -> String {
sha256.result_str()
}
pub fn calc_file_md5(file_name: &str) -> XResult<String> {
let mut digest = Md5::new();
calc_file_digest(&mut digest, "MD5", file_name)
}
pub fn calc_file_sha1(file_name: &str) -> XResult<String> {
let mut digest = Sha1::new();
calc_file_digest(&mut digest, "SHA1", file_name)
}
pub fn calc_file_sha256(file_name: &str) -> XResult<String> {
let mut sha256 = Sha256::new();
let mut digest = Sha256::new();
calc_file_digest(&mut digest, "SHA256", file_name)
}
pub fn calc_file_sha512(file_name: &str) -> XResult<String> {
let mut digest = Sha512::new();
calc_file_digest(&mut digest, "SHA512", file_name)
}
pub fn calc_file_digest(digest: &mut Digest, digest_alg: &str, file_name: &str) -> XResult<String> {
let mut buf: [u8; DEFAULT_BUF_SIZE] = [0u8; DEFAULT_BUF_SIZE];
let mut f = File::open(file_name)?;
let file_len = match f.metadata() {
@@ -68,15 +102,15 @@ pub fn calc_file_sha256(file_name: &str) -> XResult<String> {
let mut written = 0i64;
loop {
let len = match f.read(&mut buf) {
Ok(0) => { println!(); return Ok(sha256.result_str()); },
Ok(0) => { println!(); return Ok(digest.result_str()); },
Ok(len) => len,
Err(ref e) if e.kind() == ErrorKind::Interrupted => continue,
Err(e) => return Err(Box::new(e)),
};
sha256.input(&buf[..len]);
digest.input(&buf[..len]);
written += len as i64;
let cost = SystemTime::now().duration_since(start.clone()).unwrap();
print_status_last_line("Calc SHA256", file_len, written, cost);
print_status_last_line(&format!("Calc {}", digest_alg), file_len, written, cost);
}
}

View File

@@ -122,7 +122,9 @@ fn do_with_buildin_arg_builder(first_arg: &str, args: &Vec<String>, builder_name
true => get_env_with_java_home(&java_home),
false => get_env(),
};
new_env.insert(builder_desc.get_builder_home_name(), builder_desc.home.clone());
for builder_home_name in builder_desc.get_builder_home_name() {
new_env.insert(builder_home_name, builder_desc.home.clone());
}
let mut cmd = Command::new(builder_desc.get_builder_bin());
cmd.envs(&new_env);
@@ -307,7 +309,9 @@ fn main() {
print_message(MessageType::OK, &format!("BUILDER_HOME = {}", &builder_desc.home));
let mut new_env = get_env_with_java_home(&java_home);
new_env.insert(builder_desc.get_builder_home_name(), builder_desc.home.clone());
for builder_home_name in builder_desc.get_builder_home_name() {
new_env.insert(builder_home_name, builder_desc.home.clone());
}
process_envs(&mut new_env, &build_json_object);
let mut cmd = Command::new(builder_desc.get_builder_bin());

View File

@@ -1,8 +1,9 @@
use std::env;
use rust_util::util_env::*;
lazy_static! {
pub static ref VERBOSE: bool = is_verbose();
pub static ref VERBOSE: bool = is_env_on("BUILDJ_VERBOSE");
pub static ref NOAUTH: bool = is_env_on("BUILDJ_NOAUTH");
}
pub fn print_usage() {
@@ -21,6 +22,7 @@ buildj :::maven<version> [--java<version>] - run maven with assigned v
buildj :::gradle<version> [--java<version>] - run gradle with assigned version and java version
e.g. buildj :::gradle3.5.1 --java1.8 ARGS
buildj - run build, run assigned version builder tool
BUILDJ_VERBOSE=1 buildj - run buildj in verbose mode
"#);
}
@@ -33,9 +35,3 @@ Written by Hatter Jiang
"#, super::BUDERJ_VER, &super::GIT_HASH[0..7]);
}
pub fn is_verbose() -> bool {
match env::var("BUILDJ_VERBOSE") {
Err(_) => false,
Ok(v) => (v == "TRUE" || v == "true" || v =="YES" || v == "yes" || v == "1"),
}
}

View File

@@ -21,6 +21,7 @@ use super::{
pub const LOCAL_BUILDER_HOME_BASE_DIR: &str = ".jssp/builder";
const STANDARD_CONFIG_JSON: &str = ".standard_config.json";
const TOOL_PACKAGE_DETAIL_URL: &str = "https://hatter.ink/tool/query_tool_by_name_version.json";
const TOOL_PACKAGE_DETAIL_URL_WITHOUT_AUTH: &str = "https://hatter.ink/tool/query_tool_by_name_version_without_auth.json";
#[derive(Clone, Copy)]
pub enum BuilderName {
@@ -35,10 +36,10 @@ pub struct BuilderDesc {
}
impl BuilderDesc {
pub fn get_builder_home_name(&self) -> String {
pub fn get_builder_home_name(&self) -> Vec<String> {
match self.name {
BuilderName::Maven => "MAVEN_HOME".to_string(),
BuilderName::Gradle => "GRADLE_HOME".to_string(),
BuilderName::Maven => vec!["M2_HOME".to_string(), "MAVEN_HOME".to_string()],
BuilderName::Gradle => vec!["GRADLE_HOME".to_string()],
}
}
@@ -155,19 +156,33 @@ pub fn get_tool_package_secret() -> XResult<String> {
}
pub fn get_tool_package_detail(name: &str, version: &str) -> XResult<String> {
let secret = match get_tool_package_secret() {
Err(err) => {
let new_err_message: String = format!("Get package detail secret failed: {}, from file: ~/{}", err, STANDARD_CONFIG_JSON);
return Err(new_box_error(&new_err_message))
let secret = match *NOAUTH {
true => {
print_message(MessageType::WARN, "Running in no auth mode!");
None
},
false => match get_tool_package_secret() {
Err(err) => {
print_message(MessageType::WARN, &format!("Get package detail secret failed: {}, from file: ~/{}", err, STANDARD_CONFIG_JSON));
None
},
Ok(r) => Some(r),
},
Ok(r) => r,
};
let mut url = String::new();
url.push_str(TOOL_PACKAGE_DETAIL_URL);
match secret {
None => url.push_str(TOOL_PACKAGE_DETAIL_URL_WITHOUT_AUTH),
Some(_) => url.push_str(TOOL_PACKAGE_DETAIL_URL),
};
url.push_str("?");
url.push_str("__auth_token=");
url.push_str(&urlencoding::encode(&secret));
match secret {
None => (),
Some(secret) => {
url.push_str("__auth_token=");
url.push_str(&urlencoding::encode(&secret));
},
};
url.push_str("&name=");
url.push_str(&urlencoding::encode(name));
url.push_str("&ver=");