use std::error::Error;
use std::path::PathBuf;
use std::process::Command;
use crate::commands::api::build_api_prod;
use crate::commands::client::build_client_prod;
use crate::commands::server::build_server_prod;
use crate::ninja::exec;
fn _build(img: &str, channel: &str, root: &PathBuf) -> Result<(), Box<dyn Error>> {
// compile the various thingies
if img == "server" {
build_server_prod(vec![], root.clone())?;
} else if img == "api" {
build_api_prod(vec![], root.clone())?;
} else {
build_client_prod(vec![], root.clone())?
}
let git_commit_id = String::from_utf8(Command::new("git").args(&["rev-parse", "--short", "HEAD"]).current_dir(root).output().unwrap().stdout).unwrap().replace('\n', "");
exec("docker", root, vec![
"buildx", "build", "-f",
root.join(format!("{}.Dockerfile", img)).to_str().unwrap(),
"-t", &format!("registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:{}-{}", img, git_commit_id), root.to_str().unwrap()].iter().map(|u| u.to_string()).collect())?;
exec("docker", root, vec![
"buildx", "build", "-f",
root.join(format!("{}.Dockerfile", img)).to_str().unwrap(),
"-t", &format!("registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:{}-{}", img, channel), root.to_str().unwrap()].iter().map(|u| u.to_string()).collect())?;
exec("docker", root, vec![
"push", &format!("registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:{}-{}", img, git_commit_id)].iter().map(|u| u.to_string()).collect())?;
exec("docker", root, vec![
"push", &format!("registry.gitlab.com/starkingdoms.tk/starkingdoms.tk:{}-{}", img, channel)].iter().map(|u| u.to_string()).collect())?;
Ok(())
}
pub fn build_docker_api(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("api", "bleeding", &root) }
pub fn build_docker_server(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("server", "bleeding", &root) }
pub fn build_docker_web(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("web", "bleeding", &root) }
pub fn build_docker(_a: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { build_docker_api(_a.clone(), root.clone())?; build_docker_server(_a.clone(), root.clone())?; build_docker_web(_a, root.clone()) }
pub fn build_docker_api_beta(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("api", "beta", &root) }
pub fn build_docker_server_beta(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("server", "beta", &root) }
pub fn build_docker_web_beta(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("web", "beta", &root) }
pub fn build_docker_beta(_a: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { build_docker_api_beta(_a.clone(), root.clone())?; build_docker_server_beta(_a.clone(), root.clone())?; build_docker_web_beta(_a, root.clone()) }
pub fn build_docker_api_stable(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("api", "stable", &root) }
pub fn build_docker_server_stable(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("server", "stable", &root) }
pub fn build_docker_web_stable(_: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { _build("web", "stable", &root) }
pub fn build_docker_stable(_a: Vec<String>, root: PathBuf) -> Result<(), Box<dyn Error>> { build_docker_api_stable(_a.clone(), root.clone())?; build_docker_server_stable(_a.clone(), root.clone())?; build_docker_web_stable(_a, root.clone()) }