feat: v0.1.5

This commit is contained in:
2023-11-11 12:04:02 +08:00
parent c193267f29
commit 71f8cfaeb1
6 changed files with 191 additions and 166 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.idea/
# ---> Rust
# Generated by Cargo
# will have compiled files and executables

207
Cargo.lock generated
View File

@@ -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"

View File

@@ -1,6 +1,6 @@
[package]
name = "dockerbuild"
version = "0.1.4"
version = "0.1.5"
authors = ["Hatter Jiang <jht5945@gmail.com>"]
edition = "2018"
license = "MIT"

View File

@@ -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<String>,
}
#[derive(Debug, Serialize, Deserialize)]
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct DockerBuildConfig {
pub image: Option<String>,
pub external_arguments: Option<HashMap<String, String>>,
pub images: Option<Vec<DockerBuildImage>>,
pub mirror: Option<String>,
}
@@ -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()
}
})
}

View File

@@ -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<String>,
docker_run_uid: Option<u32>,
docker_run_gid: Option<u32>,
volumns: Vec<(String, String)>,
volumes: Vec<(String, String)>,
mirror: Option<String>,
tty: bool,
builder_args: Vec<String>,
@@ -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<HashMap<String, String>>) -> XResult<ExitStatus> {
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
}

View File

@@ -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::<Vec<_>>();
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()