feat: add :image:* 🪞*

This commit is contained in:
2020-11-15 13:20:31 +08:00
parent 6fdc680d38
commit dc95e3adf5
3 changed files with 45 additions and 11 deletions

View File

@@ -12,26 +12,51 @@ use rust_util::util_file;
pub use docker_util::DockerCmd;
fn main() {
information!("dockerbuild v0.1");
information!("dockerbuild v0.1.1");
let docker_build_config = config::load_docker_build_config().expect("Read config failed, not found or parse error!");
let docker_image = &docker_build_config.image.expect("Image is not configed in config file!");
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 !!");
let mut args_iter = env::args().skip(1).peekable();
let mut get_docker_image = || {
if let Some(first_arg) = args_iter.peek() {
if first_arg.starts_with(":image:") {
let image_name = first_arg[7..].to_string();
args_iter.next(); // skip ':image:*'
return image_name;
}
}
docker_build_config.image.clone().expect("Image is not configed in config file!")
};
let docker_image = get_docker_image();
let mut get_crates_mirror = || {
if let Some(first_arg) = args_iter.peek() {
if first_arg.starts_with(":mirror:") {
let mirror = first_arg[8..].to_string();
args_iter.next(); // skip ':mirror:*'
return Some(mirror);
}
}
None
};
let crates_mirror = get_crates_mirror();
check_docker_registry_exists(&docker_registry).expect("Check docker registry exists failed!");
let args_iter = env::args().skip(1);
let args = args_iter.map(|a| a.to_owned()).collect::<Vec<_>>();
let mut docker_cmd = DockerCmd::new(docker_image);
docker_cmd.add_volumn(docker_registry, "/usr/local/cargo/registry");
if let Some(mirror) = &docker_build_config.mirror {
let mut docker_cmd = DockerCmd::new(&docker_image);
docker_cmd.add_volumn(&get_final_docker_registry(&docker_image), "/usr/local/cargo/registry");
if let Some(mirror) = &crates_mirror.or(docker_build_config.mirror) {
docker_cmd.mirror(mirror);
}
docker_cmd.exec(&args).unwrap();
}
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 = 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()
}
fn check_docker_registry_exists(docker_registry: &str) -> Option<()> {
let p = Path::new(docker_registry);
if !p.exists() {