#![crate_name = "cargo_build_docker"]
#![crate_type = "bin"]
#[macro_use]
extern crate clap;
use std::env;
use std::process::Command;
use clap::{App, AppSettings, Arg, SubCommand};
fn main() {
let app = App::new("cargo-build-docker")
.bin_name("cargo")
.setting(AppSettings::TrailingVarArg)
.subcommand(SubCommand::with_name("build-docker")
.version(concat!("v", crate_version!()))
.author("Steven Skone <steven@skone.net>")
.about("Build Rust code in docker")
.arg(Arg::with_name("image")
.short("i")
.long("image")
.value_name("image")
.default_value("rust:1.33.0")
.help("Image to use for building")
.takes_value(true))
.arg(Arg::with_name("pass through args")
.help("Any arguments you wish to pass to the binary being profiled.")
.last(true)
.multiple(true)
));
let m = app.get_matches();
if let Some(matches) = m.subcommand_matches("build-docker") {
let p = env::current_dir().unwrap();
let image = matches.value_of("image").unwrap();
let pass_through = matches.values_of("pass through args").unwrap();
let mut command = Command::new("docker")
.arg("run")
.arg("--rm")
.arg("-t")
.args(&["-v", &format!("{}:/usr/src/myapp", p.display())])
.args(&["-w", "/usr/src/myapp"])
.arg(image)
.arg("cargo")
.args(pass_through)
.spawn()
.expect("failed to execute docker");
command.wait().expect("docker failed");
}
}