|
|
@ -1,7 +1,7 @@
|
|
|
|
use std::path::{Path, PathBuf};
|
|
|
|
|
|
|
|
use std::process::{exit, Command, Stdio};
|
|
|
|
|
|
|
|
use std::collections::hash_map::DefaultHasher;
|
|
|
|
use std::collections::hash_map::DefaultHasher;
|
|
|
|
use std::hash::{Hash, Hasher};
|
|
|
|
use std::hash::{Hash, Hasher};
|
|
|
|
|
|
|
|
use std::path::{Path, PathBuf};
|
|
|
|
|
|
|
|
use std::process::{exit, Command, Stdio};
|
|
|
|
use structopt::StructOpt;
|
|
|
|
use structopt::StructOpt;
|
|
|
|
use toml::Value;
|
|
|
|
use toml::Value;
|
|
|
|
|
|
|
|
|
|
|
@ -17,6 +17,13 @@ enum Opts {
|
|
|
|
#[structopt(short = "r", long = "remote", help = "Remote ssh build server")]
|
|
|
|
#[structopt(short = "r", long = "remote", help = "Remote ssh build server")]
|
|
|
|
remote: Option<String>,
|
|
|
|
remote: Option<String>,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[structopt(
|
|
|
|
|
|
|
|
short = "p",
|
|
|
|
|
|
|
|
long = "port",
|
|
|
|
|
|
|
|
help = "Custom port for ssh on the build server"
|
|
|
|
|
|
|
|
)]
|
|
|
|
|
|
|
|
port: Option<String>,
|
|
|
|
|
|
|
|
|
|
|
|
#[structopt(
|
|
|
|
#[structopt(
|
|
|
|
short = "b",
|
|
|
|
short = "b",
|
|
|
|
long = "build-env",
|
|
|
|
long = "build-env",
|
|
|
@ -112,6 +119,7 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
let Opts::Remote {
|
|
|
|
let Opts::Remote {
|
|
|
|
remote,
|
|
|
|
remote,
|
|
|
|
|
|
|
|
port,
|
|
|
|
build_env,
|
|
|
|
build_env,
|
|
|
|
rustup_default,
|
|
|
|
rustup_default,
|
|
|
|
env,
|
|
|
|
env,
|
|
|
@ -154,7 +162,7 @@ fn main() {
|
|
|
|
// generate a unique build path by using the hashed project dir as folder on the remote machine
|
|
|
|
// generate a unique build path by using the hashed project dir as folder on the remote machine
|
|
|
|
let mut hasher = DefaultHasher::new();
|
|
|
|
let mut hasher = DefaultHasher::new();
|
|
|
|
project_dir.hash(&mut hasher);
|
|
|
|
project_dir.hash(&mut hasher);
|
|
|
|
let build_path = format!("~/remote-builds/{}/", hasher.finish());
|
|
|
|
let build_path = format!("~/remote-builds/{}", hasher.finish());
|
|
|
|
|
|
|
|
|
|
|
|
info!("Transferring sources to build server.");
|
|
|
|
info!("Transferring sources to build server.");
|
|
|
|
// transfer project to build server
|
|
|
|
// transfer project to build server
|
|
|
@ -163,6 +171,11 @@ fn main() {
|
|
|
|
.arg("-a".to_owned())
|
|
|
|
.arg("-a".to_owned())
|
|
|
|
.arg("--delete")
|
|
|
|
.arg("--delete")
|
|
|
|
.arg("--compress")
|
|
|
|
.arg("--compress")
|
|
|
|
|
|
|
|
.arg(if port.is_some() {
|
|
|
|
|
|
|
|
format!("-e ssh -p {}", port.clone().unwrap())
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
"".to_string()
|
|
|
|
|
|
|
|
})
|
|
|
|
.arg("--info=progress2")
|
|
|
|
.arg("--info=progress2")
|
|
|
|
.arg("--exclude")
|
|
|
|
.arg("--exclude")
|
|
|
|
.arg("target");
|
|
|
|
.arg("target");
|
|
|
@ -199,6 +212,11 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
info!("Starting build process.");
|
|
|
|
info!("Starting build process.");
|
|
|
|
let output = Command::new("ssh")
|
|
|
|
let output = Command::new("ssh")
|
|
|
|
|
|
|
|
.arg(if port.is_some() {
|
|
|
|
|
|
|
|
format!("-p {}", port.clone().unwrap())
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
"".to_string()
|
|
|
|
|
|
|
|
})
|
|
|
|
.arg("-t")
|
|
|
|
.arg("-t")
|
|
|
|
.arg(&build_server)
|
|
|
|
.arg(&build_server)
|
|
|
|
.arg(build_command)
|
|
|
|
.arg(build_command)
|
|
|
@ -218,9 +236,21 @@ fn main() {
|
|
|
|
.arg("-a")
|
|
|
|
.arg("-a")
|
|
|
|
.arg("--delete")
|
|
|
|
.arg("--delete")
|
|
|
|
.arg("--compress")
|
|
|
|
.arg("--compress")
|
|
|
|
|
|
|
|
.arg(if port.is_some() {
|
|
|
|
|
|
|
|
format!("-e ssh -p {}", port.clone().unwrap())
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
"".to_string()
|
|
|
|
|
|
|
|
})
|
|
|
|
.arg("--info=progress2")
|
|
|
|
.arg("--info=progress2")
|
|
|
|
.arg(format!("{}:{}/target/{}", build_server, build_path, file_name))
|
|
|
|
.arg(format!(
|
|
|
|
.arg(format!("{}/target/{}", project_dir.to_string_lossy(), file_name))
|
|
|
|
"{}:{}/target/{}",
|
|
|
|
|
|
|
|
build_server, build_path, file_name
|
|
|
|
|
|
|
|
))
|
|
|
|
|
|
|
|
.arg(format!(
|
|
|
|
|
|
|
|
"{}/target/{}",
|
|
|
|
|
|
|
|
project_dir.to_string_lossy(),
|
|
|
|
|
|
|
|
file_name
|
|
|
|
|
|
|
|
))
|
|
|
|
.stdout(Stdio::inherit())
|
|
|
|
.stdout(Stdio::inherit())
|
|
|
|
.stderr(Stdio::inherit())
|
|
|
|
.stderr(Stdio::inherit())
|
|
|
|
.stdin(Stdio::inherit())
|
|
|
|
.stdin(Stdio::inherit())
|
|
|
@ -240,6 +270,11 @@ fn main() {
|
|
|
|
.arg("-a")
|
|
|
|
.arg("-a")
|
|
|
|
.arg("--delete")
|
|
|
|
.arg("--delete")
|
|
|
|
.arg("--compress")
|
|
|
|
.arg("--compress")
|
|
|
|
|
|
|
|
.arg(if port.is_some() {
|
|
|
|
|
|
|
|
format!("-e ssh -p {}", port.clone().unwrap())
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
"".to_string()
|
|
|
|
|
|
|
|
})
|
|
|
|
.arg("--info=progress2")
|
|
|
|
.arg("--info=progress2")
|
|
|
|
.arg(format!("{}:{}/Cargo.lock", build_server, build_path))
|
|
|
|
.arg(format!("{}:{}/Cargo.lock", build_server, build_path))
|
|
|
|
.arg(format!("{}/Cargo.lock", project_dir.to_string_lossy()))
|
|
|
|
.arg(format!("{}/Cargo.lock", project_dir.to_string_lossy()))
|
|
|
|