1
0
mirror of https://github.com/jht5945/buildj.git synced 2026-01-13 00:30:04 +08:00

Compare commits

...

8 Commits

9 changed files with 125 additions and 196 deletions

8
Cargo.lock generated
View File

@@ -65,14 +65,14 @@ dependencies = [
[[package]] [[package]]
name = "buildj" name = "buildj"
version = "0.1.2" version = "0.1.3"
dependencies = [ dependencies = [
"dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
"json 0.11.15 (registry+https://github.com/rust-lang/crates.io-index)", "json 0.11.15 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)",
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
"rust_util 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rust_util 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"urlencoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "urlencoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
@@ -1008,7 +1008,7 @@ dependencies = [
[[package]] [[package]]
name = "rust_util" name = "rust_util"
version = "0.2.3" version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1602,7 +1602,7 @@ dependencies = [
"checksum reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "2c2064233e442ce85c77231ebd67d9eca395207dec2127fe0bbedde4bd29a650" "checksum reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)" = "2c2064233e442ce85c77231ebd67d9eca395207dec2127fe0bbedde4bd29a650"
"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf" "checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf"
"checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a"
"checksum rust_util 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "454c4fd8ae19dd245bdc073cb297e222362adf938c3e6f0c2f8ea1abc7be2fd0" "checksum rust_util 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fedaf744d95f50bb12bc754c5143005bb588eb0cdc125f0e1412e04185f6ec31"
"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" "checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
"checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "buildj" name = "buildj"
version = "0.1.2" version = "0.1.3"
authors = ["Hatter Jiang <jht5945@gmail.com>"] authors = ["Hatter Jiang <jht5945@gmail.com>"]
edition = "2018" edition = "2018"
@@ -12,4 +12,4 @@ urlencoding = "1.0.0"
dirs = "2.0.1" dirs = "2.0.1"
rust-crypto = "0.2.36" rust-crypto = "0.2.36"
lazy_static = "1.3.0" lazy_static = "1.3.0"
rust_util = "0.2.3" rust_util = "0.6.1"

View File

@@ -1,19 +1,8 @@
use std::{ fs, path::Path, }; use std::{ fs, path::Path };
use rust_util::{ XResult, new_box_ioerror };
use rust_util::{ use crate::http::get_url_content;
iff, use crate::misc::VERBOSE;
XResult,
new_box_ioerror,
util_msg::{
print_ok,
print_debug,
print_warn,
print_error,
}
};
use super::http::get_url_content;
use super::misc::VERBOSE;
pub const BUILD_JSON: &str = "build.json"; pub const BUILD_JSON: &str = "build.json";
@@ -21,7 +10,7 @@ const GET_ARCHIVER_VERSION_URL: &str= "https://hatter.ink/repo/archive_info_vers
pub fn get_archive_version(gid: &str, aid: &str) -> XResult<String> { pub fn get_archive_version(gid: &str, aid: &str) -> XResult<String> {
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Start get archive info: {}:{}", gid, aid)); debugging!("Start get archive info: {}:{}", gid, aid);
} }
let mut url = String::with_capacity(1024); let mut url = String::with_capacity(1024);
url.push_str(GET_ARCHIVER_VERSION_URL); url.push_str(GET_ARCHIVER_VERSION_URL);
@@ -31,7 +20,7 @@ pub fn get_archive_version(gid: &str, aid: &str) -> XResult<String> {
url.push_str(&urlencoding::encode(aid)); url.push_str(&urlencoding::encode(aid));
let version_result = get_url_content(url.as_str())?; let version_result = get_url_content(url.as_str())?;
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Get archive result: {}", version_result)); debugging!("Get archive result: {}", version_result);
} }
let version_result_object = json::parse(&version_result)?; let version_result_object = json::parse(&version_result)?;
if version_result_object["status"] != 200 { if version_result_object["status"] != 200 {
@@ -43,7 +32,7 @@ pub fn get_archive_version(gid: &str, aid: &str) -> XResult<String> {
pub fn create_build_json(args: &[String]) { pub fn create_build_json(args: &[String]) {
if find_build_json_in_current().is_some() { if find_build_json_in_current().is_some() {
print_error(&format!("File exits: {}", BUILD_JSON)); failure!("File exits: {}", BUILD_JSON);
return; return;
} }
@@ -62,7 +51,7 @@ pub fn create_build_json(args: &[String]) {
} }
} }
if java_version.is_empty() || builder.is_empty() || builder_version.is_empty() { if java_version.is_empty() || builder.is_empty() || builder_version.is_empty() {
print_error("Args java version, builder or builder version is not assigned or format error."); failure!("Args java version, builder or builder version is not assigned or format error.");
return; return;
} }
let mut build_json_object = object!{ let mut build_json_object = object!{
@@ -73,7 +62,7 @@ pub fn create_build_json(args: &[String]) {
}, },
}; };
match get_archive_version("me.hatter", "commons") { match get_archive_version("me.hatter", "commons") {
Err(err) => print_error(&format!("Get me.hatter:commons version failed: {}", err)), Err(err) => failure!("Get me.hatter:commons version failed: {}", err),
Ok(ver) => build_json_object["repo"] = object! { Ok(ver) => build_json_object["repo"] = object! {
"dependencies" => array! [ "dependencies" => array! [
format!("me.hatter:commons:{}", ver).as_str() format!("me.hatter:commons:{}", ver).as_str()
@@ -81,8 +70,8 @@ pub fn create_build_json(args: &[String]) {
}, },
} }
match fs::write(BUILD_JSON, json::stringify_pretty(build_json_object, 4)) { match fs::write(BUILD_JSON, json::stringify_pretty(build_json_object, 4)) {
Ok(_) => print_ok(&format!("Write file success: {}", BUILD_JSON)), Ok(_) => success!("Write file success: {}", BUILD_JSON),
Err(err) => print_error(&format!("Write file failed: {}, error message: {}", BUILD_JSON, err)), Err(err) => failure!("Write file failed: {}, error message: {}", BUILD_JSON, err),
} }
} }
@@ -99,7 +88,7 @@ pub fn find_build_json_in_parents() -> Option<String> {
loop { loop {
loop_count += 1_usize; loop_count += 1_usize;
if loop_count > 100_usize { if loop_count > 100_usize {
print_error("Find build.json loop more than 100 loop!"); failure!("Find build.json loop more than 100 loop!");
return None; return None;
} }
@@ -121,11 +110,11 @@ pub fn find_build_json() -> Option<String> {
Some(p) => Some(p), Some(p) => Some(p),
None => match find_build_json_in_parents() { None => match find_build_json_in_parents() {
Some(p) => { Some(p) => {
print_warn(&format!("Cannot find {} in current dir, find: {}", BUILD_JSON, p)); warning!("Cannot find {} in current dir, find: {}", BUILD_JSON, p);
Some(p) Some(p)
}, },
None => { None => {
print_error(&format!("Cannot find {}", BUILD_JSON)); failure!("Cannot find {}", BUILD_JSON);
None None
}, },
}, },

View File

@@ -1,40 +1,31 @@
use std::fs::File; use std::fs::File;
use rust_util::{ XResult, util_io::copy_io };
use rust_util::{ use crate::misc::VERBOSE;
XResult,
util_io::copy_io,
util_msg::{
print_debug,
print_warn,
},
};
use super::misc::VERBOSE;
pub fn download_url(url: &str, dest: &mut File) -> XResult<()> { pub fn download_url(url: &str, dest: &mut File) -> XResult<()> {
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Start download URL: {}", url)); debugging!("Start download URL: {}", url);
} }
let mut response = reqwest::get(url)?; let mut response = reqwest::get(url)?;
let header_content_length: i64 = match response.headers().get("content-length") { let header_content_length: i64 = match response.headers().get("content-length") {
None => -1_i64, None => -1_i64, Some(len_value) => {
Some(len_value) => {
let len_str = match len_value.to_str() { let len_str = match len_value.to_str() {
Ok(len_str) => len_str, Err(err) => { Ok(len_str) => len_str, Err(err) => {
print_warn(&format!("Get content length for {:?}, error: {}", len_value, err)); warning!("Get content length for {:?}, error: {}", len_value, err);
"-1" "-1"
}, },
}; };
match len_str.parse::<i64>() { match len_str.parse::<i64>() {
Ok(len) => len, Err(err) => { Ok(len) => len, Err(err) => {
print_warn(&format!("Get content length for {:?}, error: {}", len_value, err)); warning!("Get content length for {:?}, error: {}", len_value, err);
-1 -1
} }
} }
}, },
}; };
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Content-Length: {}", header_content_length)); warning!("Content-Length: {}", header_content_length);
} }
copy_io(&mut response, dest, header_content_length)?; copy_io(&mut response, dest, header_content_length)?;
Ok(()) Ok(())
@@ -42,7 +33,7 @@ pub fn download_url(url: &str, dest: &mut File) -> XResult<()> {
pub fn get_url_content(url: &str) -> XResult<String> { pub fn get_url_content(url: &str) -> XResult<String> {
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Get URL: {}", url)); warning!("Get URL: {}", url);
} }
Ok(reqwest::get(url)?.text()?) Ok(reqwest::get(url)?.text()?)
} }

View File

@@ -6,19 +6,8 @@ use std::{
path::Path, path::Path,
process::Command, process::Command,
}; };
use rust_util::{ use rust_util::util_os::*;
iff, use crate::{ local_util, tool, misc::* };
util_os::*,
util_msg::{
print_error,
print_debug,
},
};
use super::{
local_util,
tool,
misc::*,
};
const PATH: &str = "PATH"; const PATH: &str = "PATH";
const JAVA_HOME: &str = "JAVA_HOME"; const JAVA_HOME: &str = "JAVA_HOME";
@@ -37,8 +26,7 @@ lazy_static! {
pub fn get_java_home(version: &str) -> Option<String> { pub fn get_java_home(version: &str) -> Option<String> {
match get_macos_java_home(version) { match get_macos_java_home(version) {
Some(j) => Some(j), Some(j) => Some(j), None => match get_local_java_home(version) {
None => match get_local_java_home(version) {
Some(j) => Some(j), Some(j) => Some(j),
None => iff!(get_cloud_java(version), get_local_java_home(version), None), None => iff!(get_cloud_java(version), get_local_java_home(version), None),
}, },
@@ -67,7 +55,7 @@ pub fn get_cloud_java(version: &str) -> bool {
return true; return true;
} }
} }
print_error(&format!("Get java failed, version: {}", version)); failure!("Get java failed, version: {}", version);
false false
} }
@@ -78,7 +66,7 @@ pub fn get_macos_java_home(version: &str) -> Option<String> {
let output = Command::new(MACOS_LIBEXEC_JAVAHOME).arg("-version").arg(version).output().ok()?; let output = Command::new(MACOS_LIBEXEC_JAVAHOME).arg("-version").arg(version).output().ok()?;
let output_in_utf8 = str::from_utf8(&output.stderr).ok()?; let output_in_utf8 = str::from_utf8(&output.stderr).ok()?;
if *VERBOSE { if *VERBOSE {
print_debug(&format!("java_home outputs: {}", output_in_utf8)); debugging!("java_home outputs: {}", output_in_utf8);
} }
if output_in_utf8.contains("Unable to find any JVMs") { if output_in_utf8.contains("Unable to find any JVMs") {
None None
@@ -94,7 +82,7 @@ pub fn get_local_java_home(version: &str) -> Option<String> {
if let Ok(dir_entry) = path { if let Ok(dir_entry) = path {
if let Some(p)= dir_entry.path().to_str() { if let Some(p)= dir_entry.path().to_str() {
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Try match path: {}", p)); debugging!("Try match path: {}", p);
} }
let mut path_name = p; let mut path_name = p;
if p.ends_with('/') { if p.ends_with('/') {
@@ -111,7 +99,7 @@ pub fn get_local_java_home(version: &str) -> Option<String> {
}; };
if let Some(matched_path) = matched_path_opt { if let Some(matched_path) = matched_path_opt {
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Matched JDK path found: {}", matched_path)); debugging!("Matched JDK path found: {}", matched_path);
} }
return if local_util::is_path_exists(matched_path, "Contents/Home") { return if local_util::is_path_exists(matched_path, "Contents/Home") {
Some(format!("{}/{}", matched_path, "Contents/Home")) Some(format!("{}/{}", matched_path, "Contents/Home"))
@@ -128,7 +116,7 @@ pub fn get_local_java_home(version: &str) -> Option<String> {
pub fn extract_jdk_and_wait(file_name: &str) { pub fn extract_jdk_and_wait(file_name: &str) {
if let Ok(local_java_home_base_dir) = local_util::get_user_home_dir(LOCAL_JAVA_HOME_BASE_DIR) { if let Ok(local_java_home_base_dir) = local_util::get_user_home_dir(LOCAL_JAVA_HOME_BASE_DIR) {
local_util::extract_package_and_wait(&local_java_home_base_dir, file_name).unwrap_or_else(|err| { local_util::extract_package_and_wait(&local_java_home_base_dir, file_name).unwrap_or_else(|err| {
print_error(&format!("Extract file: {}, failed: {}", file_name, err)); failure!("Extract file: {}, failed: {}", file_name, err);
}); });
} }
} }

View File

@@ -6,16 +6,7 @@ use std::{
process::Command, process::Command,
time::SystemTime, time::SystemTime,
}; };
use rust_util::{ XResult, new_box_ioerror, util_io::* };
use rust_util::{
XResult,
new_box_ioerror,
util_msg::{
print_error,
},
util_io::*,
};
use crypto::{ use crypto::{
digest::Digest, digest::Digest,
md5::Md5, md5::Md5,
@@ -53,7 +44,7 @@ pub fn verify_file_integrity(integrity: &str, file_name: &str) -> XResult<bool>
}; };
let integrity_verify_result = digest_hex == calc_digest_hex.as_str(); let integrity_verify_result = digest_hex == calc_digest_hex.as_str();
if ! integrity_verify_result { if ! integrity_verify_result {
print_error(&format!("Verify integrity failed, expected: {}, actual: {}", digest_hex, calc_digest_hex)); failure!("Verify integrity failed, expected: {}, actual: {}", digest_hex, calc_digest_hex);
} }
Ok(integrity_verify_result) Ok(integrity_verify_result)
}, },
@@ -81,7 +72,7 @@ pub fn calc_file_digest(digest: &mut dyn Digest, digest_alg: &str, file_name: &s
}; };
digest.input(&buf[..len]); digest.input(&buf[..len]);
written += len as i64; written += len as i64;
let cost = SystemTime::now().duration_since(start.clone()).unwrap(); let cost = SystemTime::now().duration_since(start).unwrap();
print_status_last_line(&format!("Calc {}", digest_alg), file_len, written, cost); print_status_last_line(&format!("Calc {}", digest_alg), file_len, written, cost);
} }
} }
@@ -133,7 +124,7 @@ pub fn init_home_dir(home_sub_dir: &str) {
pub fn init_dir(dir: &str) { pub fn init_dir(dir: &str) {
if ! Path::new(dir).exists() { if ! Path::new(dir).exists() {
fs::create_dir_all(dir).unwrap_or_else(|err| { fs::create_dir_all(dir).unwrap_or_else(|err| {
print_error(&format!("Init dir {} failed: {}", dir, err)); failure!("Init dir {} failed: {}", dir, err);
}); });
} }
} }

View File

@@ -6,8 +6,11 @@ extern crate term;
extern crate dirs; extern crate dirs;
extern crate crypto; extern crate crypto;
extern crate urlencoding; extern crate urlencoding;
#[macro_use]
extern crate rust_util; extern crate rust_util;
use std::{ collections::HashMap, fs, process::Command };
pub mod jdk; pub mod jdk;
pub mod local_util; pub mod local_util;
pub mod http; pub mod http;
@@ -15,23 +18,7 @@ pub mod tool;
pub mod build_json; pub mod build_json;
pub mod misc; pub mod misc;
use std::{ use rust_util::util_cmd::run_command_and_wait;
collections::HashMap,
fs,
process::Command,
};
use rust_util::{
iff,
util_msg::{
print_ok,
print_info,
print_warn,
print_error,
print_debug,
},
util_cmd::run_command_and_wait,
};
use tool::*; use tool::*;
use jdk::*; use jdk::*;
use build_json::*; use build_json::*;
@@ -46,13 +33,13 @@ const BUILD_DATE: &str = env!("BUILD_DATE");
fn do_with_buildin_arg_java(first_arg: &str, args: &[String]) { fn do_with_buildin_arg_java(first_arg: &str, args: &[String]) {
let ver = &first_arg[7..]; let ver = &first_arg[7..];
if ver.is_empty() { if ver.is_empty() {
print_error("Java version is not assigned!"); failure!("Java version is not assigned!");
return; return;
} }
match get_java_home(ver) { match get_java_home(ver) {
None => print_error(&format!("Assigned java version not found: {}", ver)), None => failure!("Assigned java version not found: {}", ver),
Some(java_home) => { Some(java_home) => {
print_ok(&format!("Find java home: {}", java_home)); success!("Find java home: {}", java_home);
let java_bin = &format!("{}/bin/java", java_home); let java_bin = &format!("{}/bin/java", java_home);
let mut cmd = Command::new(java_bin); let mut cmd = Command::new(java_bin);
cmd.envs(&get_env_with_java_home(&java_home)); cmd.envs(&get_env_with_java_home(&java_home));
@@ -60,7 +47,7 @@ fn do_with_buildin_arg_java(first_arg: &str, args: &[String]) {
cmd.args(&args[2..]); cmd.args(&args[2..]);
} }
run_command_and_wait(&mut cmd).unwrap_or_else(|err| { run_command_and_wait(&mut cmd).unwrap_or_else(|err| {
print_error(&format!("Exec java failed: {}", err)); failure!("Exec java failed: {}", err);
}); });
}, },
}; };
@@ -76,32 +63,32 @@ fn do_with_buildin_arg_gradle(first_arg: &str, args: &[String]) {
fn do_with_buildin_arg_config(_first_arg: &str, args: &[String]) { fn do_with_buildin_arg_config(_first_arg: &str, args: &[String]) {
if args.len() <= 2 { if args.len() <= 2 {
print_error("No arguments, get or set."); failure!("No arguments, get or set.");
return; return;
} }
match args[2].as_str() { match args[2].as_str() {
"get" => match get_tool_package_secret() { "get" => match get_tool_package_secret() {
Err(_) => print_warn("No config found."), Err(_) => warning!("No config found."),
Ok(secret) => print_ok(&format!("Config secret: {}", secret)), Ok(secret) => success!("Config secret: {}", secret),
}, },
"set" => { "set" => {
if args.len() < 4 { if args.len() < 4 {
print_error("Need secret for set, :::config set <secret>"); failure!("Need secret for set, :::config set <secret>");
} else { } else {
match set_tool_package_secret(&args[3]) { match set_tool_package_secret(&args[3]) {
Err(err) => print_error(&format!("Config secret failed: {}", err)), Err(err) => failure!("Config secret failed: {}", err),
Ok(_) => print_ok("Config secret success."), Ok(_) => success!("Config secret success."),
} }
} }
}, },
arg => print_error(&format!("Unknown argument: {}", arg)) arg => failure!("Unknown argument: {}", arg)
} }
} }
fn do_with_buildin_arg_builder(first_arg: &str, args: &[String], builder_name: &str) { fn do_with_buildin_arg_builder(first_arg: &str, args: &[String], builder_name: &str) {
let builder_version = &first_arg[(builder_name.len() + 3)..]; let builder_version = &first_arg[(builder_name.len() + 3)..];
if builder_version.is_empty() { if builder_version.is_empty() {
print_error("Builder version is not assigned!"); failure!("Builder version is not assigned!");
return; return;
} }
let mut has_java = false; let mut has_java = false;
@@ -112,7 +99,7 @@ fn do_with_buildin_arg_builder(first_arg: &str, args: &[String], builder_name: &
if !java_version.is_empty() { if !java_version.is_empty() {
java_home = match get_java_home(java_version) { java_home = match get_java_home(java_version) {
Some(h) => h, None => { Some(h) => h, None => {
print_error(&format!("Assigned java version not found: {}", java_version)); failure!("Assigned java version not found: {}", java_version);
return; return;
}, },
}; };
@@ -120,14 +107,14 @@ fn do_with_buildin_arg_builder(first_arg: &str, args: &[String], builder_name: &
} }
let builder_desc = match tool::get_builder_home(builder_name, builder_version) { let builder_desc = match tool::get_builder_home(builder_name, builder_version) {
Some(h) => h, None => { Some(h) => h, None => {
print_error(&format!("Assigned builder: {}, version: {} not found.", builder_name, builder_version)); failure!("Assigned builder: {}, version: {} not found.", builder_name, builder_version);
return; return;
}, },
}; };
if has_java { if has_java {
print_ok(&format!("JAVA_HOME = {}", java_home)); success!("JAVA_HOME = {}", java_home);
} }
print_ok(&format!("BUILDER_HOME = {}", &builder_desc.home)); success!("BUILDER_HOME = {}", &builder_desc.home);
let mut new_env = iff!(has_java, get_env_with_java_home(&java_home), get_env()); let mut new_env = iff!(has_java, get_env_with_java_home(&java_home), get_env());
for builder_home_name in builder_desc.get_builder_home_name() { for builder_home_name in builder_desc.get_builder_home_name() {
@@ -141,7 +128,7 @@ fn do_with_buildin_arg_builder(first_arg: &str, args: &[String], builder_name: &
cmd.arg(&arg); cmd.arg(&arg);
} }
run_command_and_wait(&mut cmd).unwrap_or_else(|err| { run_command_and_wait(&mut cmd).unwrap_or_else(|err| {
print_error(&format!("Run build command failed: {}", err)); failure!("Run build command failed: {}", err);
}); });
} }
@@ -151,7 +138,7 @@ fn do_with_buildin_arg_ddd(first_arg: &str, args: &[String]) {
}; };
let build_json_object_xrun = &build_json_object["xRuns"][&first_arg[3..]]; let build_json_object_xrun = &build_json_object["xRuns"][&first_arg[3..]];
if build_json_object_xrun.is_null() { if build_json_object_xrun.is_null() {
print_error(&format!("Cannot find build.json#xRuns#{}", &first_arg[3..])); failure!("Cannot find build.json#xRuns#{}", &first_arg[3..]);
return; return;
} }
let cmd_name = build_json_object_xrun[0].to_string(); let cmd_name = build_json_object_xrun[0].to_string();
@@ -171,33 +158,25 @@ fn do_with_buildin_arg_ddd(first_arg: &str, args: &[String]) {
cmd.arg(arg.to_string()); cmd.arg(arg.to_string());
} }
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Running cmd: {}, args: {:?}", &cmd_name, cmd_args)); debugging!("Running cmd: {}, args: {:?}", &cmd_name, cmd_args);
} }
run_command_and_wait(&mut cmd).unwrap_or_else(|err| { run_command_and_wait(&mut cmd).unwrap_or_else(|err| {
print_error(&format!("Run xRun command failed: {}", err)); failure!("Run xRun command failed: {}", err);
}); });
} }
fn do_with_buildin_args(args: &[String]) { fn do_with_buildin_args(args: &[String]) {
let first_arg = args.get(1).unwrap(); let first_arg = args.get(1).unwrap();
if first_arg == ":::" || first_arg == ":::help" { match first_arg.as_str() {
print_usage(); ":::" | ":::help" => print_usage(),
} else if first_arg == ":::version" { ":::version" => print_version(),
print_version(); ":::create" => create_build_json(args),
} else if first_arg == ":::create" { ":::config" => do_with_buildin_arg_config(first_arg, args),
create_build_json(args); a if a.starts_with(":::java") => do_with_buildin_arg_java (a, args),
} else if first_arg == ":::config" { a if a.starts_with(":::maven") => do_with_buildin_arg_maven (a, args),
do_with_buildin_arg_config(first_arg, args); a if a.starts_with(":::gradle") => do_with_buildin_arg_gradle(a, args),
} else if first_arg.starts_with(":::java") { a if a.starts_with("...") => do_with_buildin_arg_ddd (a, args),
do_with_buildin_arg_java(first_arg, args); _ => failure!("Unknown args: {:?}", &args),
} else if first_arg.starts_with(":::maven") {
do_with_buildin_arg_maven(first_arg, args);
} else if first_arg.starts_with(":::gradle") {
do_with_buildin_arg_gradle(first_arg, args);
} else if first_arg.starts_with("...") {
do_with_buildin_arg_ddd(first_arg, args);
} else {
print_error(&format!("Unknown args: {:?}", &args));
} }
} }
@@ -207,31 +186,31 @@ fn get_java_and_builder(build_json_object: &json::JsonValue) -> Option<(String,
let builder_version_j = &build_json_object["builder"]["version"]; let builder_version_j = &build_json_object["builder"]["version"];
if java_version_j.is_null() { if java_version_j.is_null() {
print_error("Java version is not assigned!"); failure!("Java version is not assigned!");
return None; return None;
} }
if builder_name_j.is_null() || builder_version_j.is_null() { if builder_name_j.is_null() || builder_version_j.is_null() {
print_error("Builder name or version is not assigned!"); failure!("Builder name or version is not assigned!");
return None; return None;
} }
let java_version = java_version_j.as_str().unwrap(); let java_version = java_version_j.as_str().unwrap();
let builder_name = builder_name_j.as_str().unwrap(); let builder_name = builder_name_j.as_str().unwrap();
let builder_version = builder_version_j.as_str().unwrap(); let builder_version = builder_version_j.as_str().unwrap();
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Java version: {}", java_version)); debugging!("Java version: {}", java_version);
print_debug(&format!("Builder name: {}", builder_name)); debugging!("Builder name: {}", builder_name);
print_debug(&format!("Builder version: {}", builder_version)); debugging!("Builder version: {}", builder_version);
} }
let java_home = match get_java_home(java_version) { let java_home = match get_java_home(java_version) {
Some(h) => h, None => { Some(h) => h, None => {
print_error(&format!("Assigned java version not found: {}", java_version)); failure!("Assigned java version not found: {}", java_version);
return None; return None;
}, },
}; };
let builder_desc = match tool::get_builder_home(builder_name, builder_version) { let builder_desc = match tool::get_builder_home(builder_name, builder_version) {
Some(h) => h, None => { Some(h) => h, None => {
print_error(&format!("Assigned builder: {}, version: {} not found.", builder_name, builder_version)); failure!("Assigned builder: {}, version: {} not found.", builder_name, builder_version);
return None; return None;
}, },
}; };
@@ -246,9 +225,9 @@ fn get_final_args(args: &[String], build_json_object: &json::JsonValue) -> Optio
let a_cmd = &arg1[2..]; let a_cmd = &arg1[2..];
let a_cmd_j = &build_json_object["xArgs"][a_cmd]; let a_cmd_j = &build_json_object["xArgs"][a_cmd];
if a_cmd_j.is_null() { if a_cmd_j.is_null() {
print_warn(&format!("xArgs argument not found: {}", a_cmd)); warning!("xArgs argument not found: {}", a_cmd);
if args.len() == 2 { if args.len() == 2 {
print_error("Only one xArgs argument, exit."); failure!("Only one xArgs argument, exit.");
return None; return None;
} }
final_args.push(arg1.to_string()); final_args.push(arg1.to_string());
@@ -276,10 +255,9 @@ fn process_envs(the_env: &mut HashMap<String, String>, build_json_object: &json:
if ! envs_j.is_null() { if ! envs_j.is_null() {
for env in envs_j.members() { for env in envs_j.members() {
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Env: {}", env)); debugging!("Env: {}", env);
} }
let env_k = &env[0]; let (env_k, env_v) = (&env[0], &env[1]);
let env_v = &env[1];
if let (Some(env_k_str), Some(env_v_str)) = (env_k.as_str(), env_v.as_str()) { if let (Some(env_k_str), Some(env_v_str)) = (env_k.as_str(), env_v.as_str()) {
the_env.insert(env_k_str.to_owned(), env_v_str.to_owned()); the_env.insert(env_k_str.to_owned(), env_v_str.to_owned());
} }
@@ -306,13 +284,13 @@ fn read_build_json_object_from_env() -> Option<json::JsonValue> {
"version" => builder_version[5..], "version" => builder_version[5..],
}; };
} else { } else {
print_warn(&format!("Unknown builder: {}", builder_version)); warning!("Unknown builder: {}", builder_version);
} }
} }
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Use env configed build.json: {}", json::stringify(build_json_object.clone()))); debugging!("Use env configed build.json: {}", json::stringify(build_json_object.clone()));
} }
print_ok("Find build.json @ENV"); success!("Find build.json @ENV");
Some(build_json_object) Some(build_json_object)
} else { } else {
None None
@@ -328,16 +306,16 @@ fn read_build_json_object() -> Option<json::JsonValue> {
Some(p) => p, None => return None, Some(p) => p, None => return None,
}; };
print_ok(&format!("Find {} @ {}", BUILD_JSON, build_json)); success!("Find {} @ {}", BUILD_JSON, build_json);
let build_json_content = match fs::read_to_string(build_json) { let build_json_content = match fs::read_to_string(build_json) {
Ok(content) => content, Err(err) => { Ok(content) => content, Err(err) => {
print_error(&format!("Read {} failed: {}", BUILD_JSON, err)); failure!("Read {} failed: {}", BUILD_JSON, err);
return None; return None;
}, },
}; };
match json::parse(&build_json_content) { match json::parse(&build_json_content) {
Ok(object) => Some(object), Err(err) => { Ok(object) => Some(object), Err(err) => {
print_error(&format!("Parse JSON failed: {}", err)); failure!("Parse JSON failed: {}", err);
None None
}, },
} }
@@ -345,26 +323,26 @@ fn read_build_json_object() -> Option<json::JsonValue> {
fn main() { fn main() {
print_info(&format!("{} - version {} - {}", BUILDJ, BUDERJ_VER, &GIT_HASH[0..7])); information!("{} - version {} - {}", BUILDJ, BUDERJ_VER, &GIT_HASH[0..7]);
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Full GIT_HASH: {}", GIT_HASH)); debugging!("Full GIT_HASH: {}", GIT_HASH);
print_debug(&format!("Build date: {}", BUILD_DATE)); debugging!("Build date: {}", BUILD_DATE);
} }
let args = local_util::get_args_as_vec(); let args = local_util::get_args_as_vec();
print_info(&format!("Arguments: {:?}", args)); information!("Arguments: {:?}", args);
if (! *NOBUILDIN) && local_util::is_buildin_args(&args) { if (! *NOBUILDIN) && local_util::is_buildin_args(&args) {
do_with_buildin_args(&args); do_with_buildin_args(&args);
return; return;
} }
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Init home dir: {}", tool::LOCAL_BUILDER_HOME_BASE_DIR)); debugging!("Init home dir: {}", tool::LOCAL_BUILDER_HOME_BASE_DIR);
} }
local_util::init_home_dir(tool::LOCAL_BUILDER_HOME_BASE_DIR); local_util::init_home_dir(tool::LOCAL_BUILDER_HOME_BASE_DIR);
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Init home dir: {}", jdk::LOCAL_JAVA_HOME_BASE_DIR)); debugging!("Init home dir: {}", jdk::LOCAL_JAVA_HOME_BASE_DIR);
} }
local_util::init_home_dir(jdk::LOCAL_JAVA_HOME_BASE_DIR); local_util::init_home_dir(jdk::LOCAL_JAVA_HOME_BASE_DIR);
@@ -377,8 +355,8 @@ fn main() {
Some((java_home, builder_desc)) => (java_home, builder_desc), Some((java_home, builder_desc)) => (java_home, builder_desc),
}; };
print_ok(&format!("JAVA_HOME = {}", java_home)); success!("JAVA_HOME = {}", java_home);
print_ok(&format!("BUILDER_HOME = {}", &builder_desc.home)); success!("BUILDER_HOME = {}", &builder_desc.home);
let mut new_env = get_env_with_java_home(&java_home); let mut new_env = get_env_with_java_home(&java_home);
for builder_home_name in builder_desc.get_builder_home_name() { for builder_home_name in builder_desc.get_builder_home_name() {
@@ -393,19 +371,19 @@ fn main() {
Some(fa) => fa, None => return, Some(fa) => fa, None => return,
}; };
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Final arguments: {:?}", &final_args)); debugging!("Final arguments: {:?}", &final_args);
} }
for f_arg in final_args { for f_arg in final_args {
cmd.arg(f_arg); cmd.arg(f_arg);
} }
if *VERBOSE { if *VERBOSE {
print_debug("-----BEGIN ENVIRONMENT VARIABLES-----"); debugging!("-----BEGIN ENVIRONMENT VARIABLES-----");
for (k, v) in new_env { for (k, v) in new_env {
print_debug(&format!("{}={}", k, v)); debugging!("{}={}", k, v);
} }
print_debug("-----END ENVIRONMENT VARIABLES-----"); debugging!("-----END ENVIRONMENT VARIABLES-----");
} }
run_command_and_wait(&mut cmd).unwrap_or_else(|err| { run_command_and_wait(&mut cmd).unwrap_or_else(|err| {
print_error(&format!("Run build command failed: {}", err)); failure!("Run build command failed: {}", err);
}); });
} }

View File

@@ -1,4 +1,3 @@
use std::env; use std::env;
use rust_util::util_env::*; use rust_util::util_env::*;

View File

@@ -6,16 +6,9 @@ use rust_util::{
XResult, XResult,
new_box_ioerror, new_box_ioerror,
util_os::is_macos_or_linux, util_os::is_macos_or_linux,
util_msg::{
print_ok,
print_info,
print_warn,
print_error,
print_debug,
},
}; };
use super::{ use crate::{
http::{ download_url, get_url_content, }, http::{ download_url, get_url_content },
local_util::{ self, * }, local_util::{ self, * },
misc::*, misc::*,
}; };
@@ -68,7 +61,7 @@ pub fn get_builder_home(builder: &str, version: &str) -> Option<BuilderDesc> {
"maven" => BuilderName::Maven, "maven" => BuilderName::Maven,
"gradle" => BuilderName::Gradle, "gradle" => BuilderName::Gradle,
_ => { _ => {
print_error(&format!("Unknown builder: {}", builder)); failure!("Unknown builder: {}", builder);
return None; return None;
}, },
}; };
@@ -90,7 +83,7 @@ pub fn get_cloud_builder(builder: &str, version: &str) -> bool {
}; };
match get_and_extract_tool_package(&local_builder_home_base_dir, true, builder, version, true) { match get_and_extract_tool_package(&local_builder_home_base_dir, true, builder, version, true) {
Ok(_) => true, Err(err) => { Ok(_) => true, Err(err) => {
print_error(&format!("Get builder: {} failed, version: {}, error: {}", builder, version, err)); failure!("Get builder: {} failed, version: {}, error: {}", builder, version, err);
false false
}, },
} }
@@ -99,7 +92,7 @@ pub fn get_cloud_builder(builder: &str, version: &str) -> bool {
pub fn get_local_builder_home_sub(builder_name: BuilderName, local_builder_home_dir: &str) -> Option<BuilderDesc> { pub fn get_local_builder_home_sub(builder_name: BuilderName, local_builder_home_dir: &str) -> Option<BuilderDesc> {
match get_local_builder_home_sub_first_sub_dir(local_builder_home_dir) { match get_local_builder_home_sub_first_sub_dir(local_builder_home_dir) {
None => { None => {
print_error(&format!("Cannot find builder home in: {}", local_builder_home_dir)); failure!("Cannot find builder home in: {}", local_builder_home_dir);
None None
}, },
Some(p) => Some(BuilderDesc{name: builder_name, home: p, bin: None}), Some(p) => Some(BuilderDesc{name: builder_name, home: p, bin: None}),
@@ -121,7 +114,7 @@ pub fn get_local_builder_home_sub_first_sub_dir(local_builder_home_dir: &str) ->
pub fn get_tool_package_secret() -> XResult<String> { pub fn get_tool_package_secret() -> XResult<String> {
if (*AUTH_TOKEN).is_some() { if (*AUTH_TOKEN).is_some() {
if *VERBOSE { if *VERBOSE {
print_debug("Use auth token from env 'BUILDJ_AUTH_TOKEN'"); debugging!("Use auth token from env 'BUILDJ_AUTH_TOKEN'");
} }
return Ok((*AUTH_TOKEN).as_ref().unwrap().clone()); return Ok((*AUTH_TOKEN).as_ref().unwrap().clone());
} }
@@ -175,12 +168,12 @@ pub fn set_tool_package_secret(secret: &str) -> XResult<()> {
pub fn get_tool_package_detail(name: &str, version: &str) -> XResult<String> { pub fn get_tool_package_detail(name: &str, version: &str) -> XResult<String> {
let secret: Option<String> = if *NOAUTH { let secret: Option<String> = if *NOAUTH {
print_warn("Running in no auth mode!"); warning!("Running in no auth mode!");
None None
} else { } else {
match get_tool_package_secret() { match get_tool_package_secret() {
Ok(r) => Some(r), Err(err) => { Ok(r) => Some(r), Err(err) => {
print_warn(&format!("Get package detail secret failed: {}, from file: ~/{}", err, STANDARD_CONFIG_JSON)); warning!("Get package detail secret failed: {}, from file: ~/{}", err, STANDARD_CONFIG_JSON);
None None
}, },
} }
@@ -210,7 +203,7 @@ pub fn get_and_extract_tool_package(base_dir: &str, dir_with_name: bool, name: &
let tool_package_detail = get_tool_package_detail(name, version)?; let tool_package_detail = get_tool_package_detail(name, version)?;
let build_json_object = json::parse(&tool_package_detail)?; let build_json_object = json::parse(&tool_package_detail)?;
if *VERBOSE { if *VERBOSE {
print_debug(&format!("Get tool {}:{}, result JSON: {}", name, version, json::stringify_pretty(build_json_object.clone(), 4))); debugging!("Get tool {}:{}, result JSON: {}", name, version, json::stringify_pretty(build_json_object.clone(), 4));
} }
if build_json_object["status"] != 200 { if build_json_object["status"] != 200 {
return Err(new_box_ioerror(&format!("Error in get tool package detail: {}", build_json_object["message"]))); return Err(new_box_ioerror(&format!("Error in get tool package detail: {}", build_json_object["message"])));
@@ -238,17 +231,17 @@ pub fn get_and_extract_tool_package(base_dir: &str, dir_with_name: bool, name: &
init_dir(&target_base_dir); init_dir(&target_base_dir);
let target_file_name = format!("{}/{}", &target_base_dir, name.to_string()); let target_file_name = format!("{}/{}", &target_base_dir, name.to_string());
print_info(&format!("Start download: {} -> {}", &url.to_string(), &target_file_name)); information!("Start download: {} -> {}", &url.to_string(), &target_file_name);
download_url(&url.to_string(), &mut File::create(&target_file_name)?)?; download_url(&url.to_string(), &mut File::create(&target_file_name)?)?;
print_info(&format!("Start verify integrity: {} ...", &target_file_name)); information!("Start verify integrity: {} ...", &target_file_name);
if local_util::verify_file_integrity(&integrity.to_string(), &target_file_name)? { if local_util::verify_file_integrity(&integrity.to_string(), &target_file_name)? {
print_ok("Verify integrity success."); success!("Verify integrity success.");
} else { } else {
return Err(new_box_ioerror("Verify integrity failed!")); return Err(new_box_ioerror("Verify integrity failed!"));
} }
print_info(&format!("Start extract file: {}", &target_file_name)); success!("Start extract file: {}", &target_file_name);
local_util::extract_package_and_wait(&target_base_dir, &name.to_string())?; local_util::extract_package_and_wait(&target_base_dir, &name.to_string())?;
Ok(true) Ok(true)