git-next/crates/cli/src/main.rs
Paul Campbell 622e144986
All checks were successful
Rust / build (push) Successful in 6m27s
ci/woodpecker/push/cron-docker-builder Pipeline was successful
ci/woodpecker/push/push-next Pipeline was successful
ci/woodpecker/push/tag-created Pipeline was successful
Release Please / Release-plz (push) Successful in 50s
ci/woodpecker/cron/cron-docker-builder Pipeline was successful
ci/woodpecker/cron/push-next Pipeline was successful
ci/woodpecker/cron/tag-created Pipeline was successful
feat(tui): (experimental) tui option
When the 'tui' feature is enabled, then server start accepts an optional
--ui parameter. When specified a ratatui ui will display, showing
liveness and a ping update when a valid config is loaded.
2024-08-12 10:01:35 +01:00

74 lines
1.7 KiB
Rust

//
mod alerts;
mod file_watcher;
mod forge;
mod init;
mod repo;
mod server;
#[cfg(feature = "tui")]
mod tui;
#[cfg(test)]
mod tests;
mod webhook;
use git_next_core::git;
use std::path::PathBuf;
use anyhow::Result;
use clap::Parser;
use kxio::{fs, network::Network};
#[derive(Parser, Debug)]
#[clap(version = clap::crate_version!(), author = clap::crate_authors!(), about = clap::crate_description!())]
struct Commands {
#[clap(subcommand)]
command: Command,
}
#[derive(Parser, Debug)]
enum Command {
Init,
#[clap(subcommand)]
Server(Server),
}
#[derive(Parser, Debug)]
enum Server {
Init,
Start {
/// Display a UI (experimental)
#[cfg(feature = "tui")]
#[arg(long, required = false)]
ui: bool,
},
}
fn main() -> Result<()> {
let fs = fs::new(PathBuf::default());
let net = Network::new_real();
let repository_factory = git::repository::factory::real();
let commands = Commands::parse();
match commands.command {
Command::Init => {
init::run(&fs)?;
}
Command::Server(server) => match server {
Server::Init => {
server::init(&fs)?;
}
#[cfg(not(feature = "tui"))]
Server::Start {} => {
let sleep_duration = std::time::Duration::from_secs(10);
server::start(false, fs, net, repository_factory, sleep_duration)?;
}
#[cfg(feature = "tui")]
Server::Start { ui } => {
let sleep_duration = std::time::Duration::from_secs(10);
server::start(ui, fs, net, repository_factory, sleep_duration)?;
}
},
}
Ok(())
}