feat: add :image:* 🪞*
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "dockerbuild"
|
name = "dockerbuild"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
authors = ["Hatter Jiang <jht5945@gmail.com>"]
|
authors = ["Hatter Jiang <jht5945@gmail.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
repository = "https://git.hatter.ink/hatter/dockerbuild"
|
||||||
description = "Build linux binary under macOS using Docker"
|
description = "Build linux binary under macOS using Docker"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|||||||
@@ -17,4 +17,12 @@ echo '{
|
|||||||
Build:
|
Build:
|
||||||
```shell
|
```shell
|
||||||
$ dockerbuild build --release --target-dir linux_target
|
$ dockerbuild build --release --target-dir linux_target
|
||||||
|
|
||||||
|
$ dockerbuild :image:i386/rust:1.47 build --release --target-dir linux_i386_target
|
||||||
|
|
||||||
|
$ dockerbuild :image:i386/rust:1.47 :mirror:git:*** build --release --target-dir linux_i386_target
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Docker official images:
|
||||||
|
https://hub.docker.com/_/rust
|
||||||
|
|
||||||
|
|||||||
45
src/main.rs
45
src/main.rs
@@ -12,26 +12,51 @@ use rust_util::util_file;
|
|||||||
pub use docker_util::DockerCmd;
|
pub use docker_util::DockerCmd;
|
||||||
|
|
||||||
fn main() {
|
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_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 mut args_iter = env::args().skip(1).peekable();
|
||||||
let docker_registry = docker_registry_path_buf.to_str().expect("Cannot find $HOME !!");
|
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 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");
|
let mut docker_cmd = DockerCmd::new(&docker_image);
|
||||||
if let Some(mirror) = &docker_build_config.mirror {
|
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.mirror(mirror);
|
||||||
}
|
}
|
||||||
docker_cmd.exec(&args).unwrap();
|
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<()> {
|
fn check_docker_registry_exists(docker_registry: &str) -> Option<()> {
|
||||||
let p = Path::new(docker_registry);
|
let p = Path::new(docker_registry);
|
||||||
if !p.exists() {
|
if !p.exists() {
|
||||||
|
|||||||
Reference in New Issue
Block a user