diff --git a/README.md b/README.md index 18b63c8..726336b 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ cargo install --path . ```sh xboctploy --list # показать проекты из конфига +xboctploy --list-servers # показать серверы из конфига xboctploy --dry-run demo # напечатать план деплоя без выполнения xboctploy demo # задеплоить проект demo ``` diff --git a/src/cli.rs b/src/cli.rs index 979f8e5..9f3ab66 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -5,7 +5,8 @@ use clap::{ArgGroup, Parser}; /// Deploy hobby projects from a local PC to a VPS over SSH. #[derive(Debug, Parser)] #[command(name = "xboctploy", version, about)] -#[command(group = ArgGroup::new("target").required(true).args(["project", "list"]))] +#[command(arg_required_else_help = true)] +#[command(group = ArgGroup::new("target").required(true).args(["project", "list", "list_servers"]))] pub struct Cli { /// Project name from deploy.toml pub project: Option, @@ -18,4 +19,7 @@ pub struct Cli { /// List configured projects and exit #[arg(long)] pub list: bool, + /// List configured servers and exit + #[arg(long)] + pub list_servers: bool, } diff --git a/src/main.rs b/src/main.rs index 45ab005..df91263 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,6 +31,22 @@ fn run(cli: &cli::Cli) -> Result<()> { let path = config::resolve(cli.config.as_deref())?; let cfg = config::load(&path)?; + if cli.list_servers { + println!("config: {}", path.display()); + println!("configured servers:"); + for (name, server) in &cfg.servers { + let mut line = format!(" - {name} {}", server.host); + if let Some(port) = server.port { + line.push_str(&format!(":{port}")); + } + if let Some(user) = &server.user { + line.push_str(&format!(" as {user}")); + } + println!("{line}"); + } + return Ok(()); + } + if cli.list { println!("config: {}", path.display()); println!("configured projects:");