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