use owo_colors::AnsiColors;
use prox::{Config, Proc, Prox};
use std::time::Duration;
use std::{collections::HashMap, path::PathBuf};
fn main() -> anyhow::Result<()> {
let mut manager = Prox::builder()
.config(
Config::builder()
.readiness_fallback_timeout(Duration::from_secs(15))
.build(),
)
.procs(
[
Proc::builder()
.name("api".into())
.command("cargo".into())
.args(vec!["run".into(), "--bin".into(), "api".into()])
.working_dir(PathBuf::from("./api"))
.readiness_pattern("Server listening".into())
.watch(vec![
PathBuf::from("./api/src"),
PathBuf::from("./shared/src"),
])
.env(HashMap::from_iter([("LOG_LEVEL".into(), "debug".into())]))
.color(AnsiColors::BrightGreen)
.build(),
Proc::builder()
.name("database".into())
.command("docker".into())
.args(["run".into()].into())
.env(
[
("POSTGRES_DB".into(), "myapp".into()),
("POSTGRES_PASSWORD".into(), "password".into()),
]
.into(),
)
.readiness_pattern("database system is ready to accept connections".into())
.build(),
Proc::builder()
.name("frontend".into())
.command("npm".into())
.args(vec!["run".into(), "dev".into()])
.working_dir(PathBuf::from("./frontend"))
.readiness_pattern("Local:".into())
.watch(vec![PathBuf::from("./frontend/src")])
.color(AnsiColors::BrightYellow)
.build(),
]
.into(),
)
.build();
println!("Starting development environment...");
manager.start()?;
Ok(())
}