git.delta.rocks / jrsonnet / refs/commits / 41ecf404fcd9

difftreelog

source

cmds/fleet/src/main.rs1.7 KiBsourcehistory
1#![feature(try_blocks)]23pub mod command;4pub mod host;5pub mod keys;67pub mod cmds;8pub mod nix;910mod fleetdata;1112use std::io;1314use anyhow::{anyhow, Result};15use structopt::clap::AppSettings::*;16use structopt::StructOpt;1718use cmds::{build_systems::BuildSystems, info::Info, secrets::Secrets};19use host::{Config, FleetOpts};20use tracing::{info, metadata::LevelFilter};21use tracing_subscriber::EnvFilter;2223#[derive(StructOpt)]24enum Opts {25	/// Prepare systems for deployments26	BuildSystems(BuildSystems),27	/// Secret management28	Secrets(Secrets),29	/// Config parsing30	Info(Info),31}3233#[derive(StructOpt)]34#[structopt(35	version = "1.0",36	author,37	global_setting(ColorAuto),38	global_setting(ColoredHelp)39)]40struct RootOpts {41	#[structopt(flatten)]42	fleet_opts: FleetOpts,43	#[structopt(subcommand)]44	command: Opts,45}4647async fn run_command(config: &Config, command: Opts) -> Result<()> {48	match command {49		Opts::BuildSystems(c) => c.run(config).await?,50		Opts::Secrets(s) => s.run(config).await?,51		Opts::Info(i) => i.run(config).await?,52	};53	Ok(())54}5556#[tokio::main]57async fn main() -> Result<()> {58	let filter = EnvFilter::from_default_env().add_directive(LevelFilter::INFO.into());59	tracing_subscriber::FmtSubscriber::builder()60		.with_env_filter(filter)61		.without_time()62		.with_target(false)63		.with_writer(|| {64			// eprintln!("Line");65			io::stderr()66		})67		.try_init()68		.map_err(|e| anyhow!("Failed to initialize logger: {}", e))?;6970	info!("Starting");71	let opts = RootOpts::from_args();72	let config = opts.fleet_opts.build()?;7374	match run_command(&config, opts.command).await {75		Ok(()) => {76			config.save()?;77			Ok(())78		}79		Err(e) => {80			let _ = config.save();81			Err(e)82		}83	}84}