feat: v0.1.5
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
.idea/
|
||||
# ---> Rust
|
||||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
|
||||
207
Cargo.lock
generated
207
Cargo.lock
generated
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
48
src/main.rs
48
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::<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()
|
||||
|
||||
Reference in New Issue
Block a user