use std::path::Path;
use crate::{Network, Os, mimalloc, os, write_dockerfile};
mod execution;
use execution::*;
mod consensus;
use consensus::*;
pub fn ethereum(orchestration_path: &Path, network: Network) {
let ((el_download, el_run_as_root, el_run), (cl_download, cl_run_as_root, cl_run)) =
if network == Network::Dev {
(anvil(network), (String::new(), String::new(), String::new()))
} else {
(reth(network), nimbus(network))
};
let download = mimalloc(Os::Alpine).to_string() + &el_download + &cl_download;
let run = format!(
r#"
ADD /orchestration/{}/networks/ethereum/run.sh /run.sh
CMD ["/run.sh"]
"#,
network.label()
);
let run = mimalloc(Os::Debian).to_string() +
&os(Os::Debian, &(el_run_as_root + "\r\n" + &cl_run_as_root), "ethereum") +
&el_run +
&cl_run +
&run;
let res = download + &run;
let mut ethereum_path = orchestration_path.to_path_buf();
ethereum_path.push("networks");
ethereum_path.push("ethereum");
ethereum_path.push("Dockerfile");
write_dockerfile(ethereum_path, &res);
}