mod build;
mod cmd;
mod common;
mod config;
mod pipelines;
mod proxy;
mod serve;
mod watch;
use std::path::PathBuf;
use anyhow::{Context, Result};
use structopt::StructOpt;
use tracing_subscriber::prelude::*;
#[async_std::main]
async fn main() -> Result<()> {
let cli = Trunk::from_args();
#[cfg(windows)]
if let Err(err) = ansi_term::enable_ansi_support() {
eprintln!("error enabling ANSI support: {:?}", err);
}
tracing_subscriber::registry()
.with(tracing_subscriber::EnvFilter::new(
if cli.v { "error,trunk=debug" } else { "error,trunk=info" }
))
.with(
tracing_subscriber::fmt::layer()
.with_target(false)
.with_level(true)
.compact()
)
.try_init()
.context("error initializing logging")?;
cli.run().await
}
#[derive(StructOpt)]
#[structopt(name = "trunk")]
struct Trunk {
#[structopt(subcommand)]
action: TrunkSubcommands,
#[structopt(long, parse(from_os_str), env = "TRUNK_CONFIG")]
pub config: Option<PathBuf>,
#[structopt(short)]
pub v: bool,
}
impl Trunk {
#[tracing::instrument(level = "trace", skip(self))]
pub async fn run(self) -> Result<()> {
match self.action {
TrunkSubcommands::Build(inner) => inner.run(self.config).await,
TrunkSubcommands::Clean(inner) => inner.run(self.config).await,
TrunkSubcommands::Serve(inner) => inner.run(self.config).await,
TrunkSubcommands::Watch(inner) => inner.run(self.config).await,
TrunkSubcommands::Config(inner) => inner.run(self.config).await,
}
}
}
#[derive(StructOpt)]
enum TrunkSubcommands {
Build(cmd::build::Build),
Watch(cmd::watch::Watch),
Serve(cmd::serve::Serve),
Clean(cmd::clean::Clean),
Config(cmd::config::Config),
}