From 71f8cfaeb1aba68bad882285dcf95462167ccf75 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 11 Nov 2023 12:04:02 +0800 Subject: [PATCH] feat: v0.1.5 --- .gitignore | 1 + Cargo.lock | 207 ++++++++++++++++++++++----------------------- Cargo.toml | 2 +- src/config.rs | 10 ++- src/docker_util.rs | 89 ++++++++++++------- src/main.rs | 48 ++++++----- 6 files changed, 191 insertions(+), 166 deletions(-) diff --git a/.gitignore b/.gitignore index c6d3e2d..bfb0902 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea/ # ---> Rust # Generated by Cargo # will have compiled files and executables diff --git a/Cargo.lock b/Cargo.lock index 20bcf7a..98961bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,74 +1,40 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +version = 3 [[package]] -name = "arrayvec" -version = "0.5.2" +name = "bitflags" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "autocfg" -version = "1.0.1" +name = "bitflags" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - -[[package]] -name = "blake2b_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "byteorder" -version = "1.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "autocfg", "cfg-if", - "lazy_static", + "dirs-sys-next", ] [[package]] -name = "dirs" -version = "1.0.5" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", @@ -77,7 +43,7 @@ dependencies = [ [[package]] name = "dockerbuild" -version = "0.1.4" +version = "0.1.5" dependencies = [ "rust_util", "serde", @@ -87,9 +53,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.15" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "libc", @@ -98,9 +64,9 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "lazy_static" @@ -110,71 +76,70 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.80" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] -name = "log" -version = "0.4.11" +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "cfg-if", + "bitflags 2.4.1", + "libc", + "redox_syscall", ] [[package]] -name = "proc-macro2" -version = "1.0.24" +name = "log" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "quote" -version = "1.0.7" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] [[package]] name = "redox_syscall" -version = "0.1.57" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" - -[[package]] -name = "redox_users" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "getrandom", - "redox_syscall", - "rust-argon2", + "bitflags 1.3.2", ] [[package]] -name = "rust-argon2" -version = "0.8.2" +name = "redox_users" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "base64", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils", + "getrandom", + "libredox", + "thiserror", ] [[package]] name = "rust_util" -version = "0.6.15" +version = "0.6.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754278eaff41b86ced9e2913b3f5ee8bd7c2446be81f0739a567e9d0ad6cdb3a" +checksum = "cffc8cab4e18f1320f13ac0c357b4bef1c120723885a187799440440e563f7a4" dependencies = [ "lazy_static", "libc", @@ -183,25 +148,31 @@ dependencies = [ ] [[package]] -name = "ryu" -version = "1.0.5" +name = "rustversion" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "serde" -version = "1.0.117" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.117" +version = "1.0.192" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" dependencies = [ "proc-macro2", "quote", @@ -210,9 +181,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.59" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -221,23 +192,23 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.48" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] name = "term" -version = "0.5.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" dependencies = [ - "byteorder", - "dirs", + "dirs-next", + "rustversion", "winapi", ] @@ -252,10 +223,30 @@ dependencies = [ ] [[package]] -name = "unicode-xid" -version = "0.2.1" +name = "thiserror" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "users" @@ -269,9 +260,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "winapi" diff --git a/Cargo.toml b/Cargo.toml index e377b2d..49d7609 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dockerbuild" -version = "0.1.4" +version = "0.1.5" authors = ["Hatter Jiang "] edition = "2018" license = "MIT" diff --git a/src/config.rs b/src/config.rs index f29d948..f40601b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,7 +1,9 @@ +use std::collections::HashMap; use std::fs; use std::path::PathBuf; -use serde::{Serialize, Deserialize}; + use rust_util::util_file; +use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] pub struct DockerBuildImage { @@ -10,9 +12,10 @@ pub struct DockerBuildImage { pub target_dir: Option, } -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize, Default)] pub struct DockerBuildConfig { pub image: Option, + pub external_arguments: Option>, pub images: Option>, pub mirror: Option, } @@ -21,8 +24,7 @@ pub fn load_docker_build_config_or_default() -> DockerBuildConfig { load_docker_build_config().unwrap_or_else(|| { DockerBuildConfig { image: Some("rust".into()), - images: None, - mirror: None, + ..Default::default() } }) } diff --git a/src/docker_util.rs b/src/docker_util.rs index e47f322..5dfb99a 100644 --- a/src/docker_util.rs +++ b/src/docker_util.rs @@ -1,11 +1,14 @@ +use std::collections::HashMap; use std::fs; -use std::process::Command; -use rust_util::{XResult, util_cmd}; +use std::process::{Command, ExitStatus}; + +use rust_util::{util_cmd, XResult}; + use crate::build_util; use crate::build_util::Builder; const DOCKER_CMD: &str = "docker"; -const DCOLER_TEMP_CMD: &str = "temp_sub_cmd"; +const DOCKER_TEMP_CMD: &str = "temp_sub_cmd"; const DOCKER_WORK_DIR: &str = "/usr/src/app"; // $ docker run --rm --user "$(id -u)":"$(id -g)" \ @@ -17,7 +20,7 @@ pub struct DockerCmd { docker_current_dir: Option, docker_run_uid: Option, docker_run_gid: Option, - volumns: Vec<(String, String)>, + volumes: Vec<(String, String)>, mirror: Option, tty: bool, builder_args: Vec, @@ -59,8 +62,8 @@ impl DockerCmd { self } - pub fn add_volumn(&mut self, outer_vol: &str, docker_vol: &str) -> &mut Self { - self.volumns.push((outer_vol.into(), docker_vol.into())); + pub fn add_volume(&mut self, outer_vol: &str, docker_vol: &str) -> &mut Self { + self.volumes.push((outer_vol.into(), docker_vol.into())); self } @@ -69,21 +72,29 @@ impl DockerCmd { self } - pub fn exec(self, cmds: &[String]) -> XResult<()> { + pub fn exec(self, cmds: &[String], external_arguments: &Option>) -> XResult { let mut cmd = Command::new(DOCKER_CMD); cmd.arg("run"); cmd.arg("--rm"); if self.tty { cmd.arg("-t"); } + if let Some(external_arguments) = external_arguments { + for (k, v) in external_arguments { + if !k.is_empty() { + cmd.arg(k); + if !v.is_empty() { cmd.arg(k); } + } + } + } cmd.arg("--user"); cmd.arg(&format!("{}:{}", - self.docker_run_uid.unwrap_or_else(|| users::get_current_uid() as u32), - self.docker_run_gid.unwrap_or_else(|| users::get_current_gid() as u32), + self.docker_run_uid.unwrap_or_else(|| users::get_current_uid() as u32), + self.docker_run_gid.unwrap_or_else(|| users::get_current_gid() as u32), )); cmd.arg("-v"); cmd.arg(&format!("{}:{}", build_util::get_work_dir(&self.docker_current_dir)?, DOCKER_WORK_DIR)); - for (outer_vol, docker_vol) in self.volumns { + for (outer_vol, docker_vol) in &self.volumes { cmd.arg("-v"); cmd.arg(&format!("{}:{}", outer_vol, docker_vol)); } @@ -92,14 +103,33 @@ impl DockerCmd { let builder = Builder::from(&self.docker_current_dir)?; let builder_name = match builder.get_name() { - Some(n) => n, None => { + Some(n) => n, + None => { warning!("Unknown builder, use default: cargo"); "cargo".into() // default use cargo? - }, + } }; + let (sub_cmd, final_sub_cmd) = self.build_sub_cmd(cmds, builder_name); + opt_result!(fs::write(DOCKER_TEMP_CMD, &sub_cmd),"Write {} failed: {}", DOCKER_TEMP_CMD); + + cmd.args(vec!["bash", DOCKER_TEMP_CMD]); + + success!("Docker cmd exec: {:?}", cmd); + if let Some(mirror) = &self.mirror { + success!("Build crates mirror: {}", mirror); + } + success!("Build command: {}", final_sub_cmd); + debugging!("Docker temp sub cmd: \n-----BEGIN TEMP SUB CMD-----\n{}\n-----END TEMP SUB CMD-----", sub_cmd); + let r = util_cmd::run_command_and_wait(&mut cmd).map_err(|e| e.into()); + fs::remove_file(DOCKER_TEMP_CMD).ok(); + r + } + + fn build_sub_cmd(&self, cmds: &[String], builder_name: String) -> (String, String) { let mut sub_cmd = String::with_capacity(1024); if let Some(mirror) = &self.mirror { + debugging!("Using mirror: {}", mirror); sub_cmd.push_str(&make_cmd(mirror)); sub_cmd.push_str("\n"); success!("Build crates mirror: {}", mirror); @@ -130,20 +160,7 @@ impl DockerCmd { } } sub_cmd.push_str(&final_sub_cmd); - - fs::write(DCOLER_TEMP_CMD, &sub_cmd).ok(); - - cmd.args(vec!["bash", DCOLER_TEMP_CMD]); - - success!("Docker cmd exec: {:?}", cmd); - if let Some(mirror) = &self.mirror { - success!("Build crates mirror: {}", mirror); - } - success!("Build command: {}", final_sub_cmd); - debugging!("Docker temp sub cmd: {}", sub_cmd); - let r = util_cmd::run_command_and_wait(&mut cmd).map_err(|e| e.into()); - fs::remove_file(DCOLER_TEMP_CMD).ok(); - r + (sub_cmd, final_sub_cmd) } } @@ -162,11 +179,19 @@ fn escape_arg(arg: &str) -> String { fn make_cmd(mirror: &str) -> String { let mut s = String::with_capacity(256); - s.push_str(&format!(r#"echo '[source.crates-io] - registry = "https://github.com/rust-lang/crates.io-index" - replace-with = "mirror" - [source.mirror] - registry = "{}" - ' > /usr/local/cargo/config"#, mirror)); + let mirror = mirror.to_lowercase(); + if mirror == "rsproxy" || mirror == "default" { + s.push_str(&format!(r#"echo '[source.crates-io] +replace-with = "rsproxy-sparse" + +[source.rsproxy] +registry = "https://rsproxy.cn/crates.io-index" + +[source.rsproxy-sparse] +registry = "sparse+https://rsproxy.cn/index/" +' > /usr/local/cargo/config"#)); + } else { + s.push_str(&mirror); + } s } diff --git a/src/main.rs b/src/main.rs index a02165b..edf2dd7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,20 @@ #[macro_use] extern crate rust_util; +use fs::File; +use std::{fs, process}; +use std::env; +use std::path::{Path, PathBuf}; + +use rust_util::util_file; + +use config::{DockerBuildConfig, DockerBuildImage}; +use docker_util::DockerCmd; + mod config; mod build_util; mod docker_util; -use std::fs; -use std::env; -use std::path::{Path, PathBuf}; -use config::{DockerBuildConfig, DockerBuildImage}; -use fs::File; -use rust_util::util_file; -use docker_util::DockerCmd; - fn main() { let is_display_logo = std::env::var("LOGO").ok().unwrap_or_else(|| "show".into()); if vec!["on", "yes", "display", "show"].iter().any(|v| **v == is_display_logo) { @@ -26,7 +28,7 @@ fn main() { let mut args_iter = env::args().skip(1).peekable(); if args_iter.peek().map(|arg| vec!["--help", "-h", "::help"].contains(&&arg.as_str())).unwrap_or(false) { - println!("{}",include_str!("../dockerbuild.usage.txt")); + println!("{}", include_str!("../dockerbuild.usage.txt")); return; } @@ -36,22 +38,22 @@ fn main() { failure!("File exists: {}", docker_build_json); return; } - let config = DockerBuildConfig{ - image: None, - images: Some(vec![DockerBuildImage{ + let config = DockerBuildConfig { + images: Some(vec![DockerBuildImage { name: "linux_x64".into(), image: "rust".into(), target_dir: Some("target_linux_x64".into()), - }, DockerBuildImage{ + }, DockerBuildImage { name: "linux_x86".into(), image: "i386/rust".into(), target_dir: Some("target_linux_x86".into()), }]), mirror: Some("git://mirrors.ustc.edu.cn/crates.io-index".into()), + ..Default::default() }; fs::write( - docker_build_json, - serde_json::to_string_pretty(&config).expect("Generate file failed!") + docker_build_json, + serde_json::to_string_pretty(&config).expect("Generate file failed!"), ).expect("Write file failed!"); return; } @@ -65,17 +67,17 @@ fn main() { None => { failure!("Images is not configed: {}", &name); return; - }, + } Some(images) => { let docker_build_image = images.iter().find(|i| i.name == name); match docker_build_image { None => { failure!("Image name not found: {}", &name); return; - }, + } Some(docker_build_image) => Some(docker_build_image), } - }, + } } } else { None } } else { None }; @@ -109,7 +111,7 @@ fn main() { let args = args_iter.map(|a| a.to_owned()).collect::>(); let mut docker_cmd = DockerCmd::new(&docker_image); - docker_cmd.add_volumn(&get_final_docker_registry(&docker_image), "/usr/local/cargo/registry"); + docker_cmd.add_volume(&get_final_docker_registry(&docker_image), "/usr/local/cargo/registry"); if let Some(mirror) = &crates_mirror.or(docker_build_config.mirror) { if mirror.to_lowercase() == "none" { docker_cmd.mirror(&None); @@ -123,11 +125,15 @@ fn main() { docker_cmd.add_build_arg(target_dir); } } - docker_cmd.exec(&args).unwrap(); + + match docker_cmd.exec(&args, &docker_build_config.external_arguments) { + Ok(exit_status) => process::exit(exit_status.code().unwrap_or(-1)), + Err(e) => failure_and_exit!("Exit with error: {}", e), + } } fn get_final_docker_registry(docker_image: &str) -> String { - let docker_registry_path_buf =get_resolved_docker_registry(docker_image).expect("Cannot find $HOME !"); + let docker_registry_path_buf = get_resolved_docker_registry(docker_image).expect("Cannot find $HOME !"); let docker_registry = docker_registry_path_buf.to_str().expect("Cannot find $HOME !!"); check_docker_registry_exists(&docker_registry).expect("Check docker registry exists failed!"); docker_registry.to_string()