You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tourmaline/src/utils.rs

59 lines
1.3 KiB
Rust

use std::path::Path;
use std::{env, path::PathBuf};
use tokio::fs;
use crate::error::AppResult;
use crate::tasks::all_tasks;
const DEFAULT_CONFIG_DIR: &str = "/etc";
lazy_static::lazy_static! {
pub static ref CFG_PATH: PathBuf = env::var("TRM_CFG_PATH").map(PathBuf::from).unwrap_or_else(|_| PathBuf::from(DEFAULT_CONFIG_DIR).join("tourmaline"));
pub static ref SCRIPT_PATH: PathBuf = CFG_PATH.join("scripts");
}
pub async fn generate_script_files<P: AsRef<Path>>(output: P) -> AppResult<()> {
let output = output.as_ref();
2 years ago
let tasks = all_tasks();
for (name, up_script, down_script) in tasks {
let script_dir = output.join(&name);
if !script_dir.exists() {
fs::create_dir_all(&script_dir).await?;
}
fs::write(
output.join(up_script),
format!(
r#"
# Applies all system changes of `{name}`
def main [cfg] {{
echo "Executing up task `{name}` with config" $cfg
}}
"#
)
.trim(),
)
.await?;
fs::write(
output.join(down_script),
format!(
r#"
# Reverts all system changes of `{name}`
def main [cfg] {{
echo "Executing up task `{name}` with config" $cfg
}}
"#
)
.trim(),
)
.await?;
}
Ok(())
}