feat: add list servers command

This commit is contained in:
2026-08-23 07:42:41 +05:00
parent 0374af34fa
commit de9b6ad0dd
3 changed files with 22 additions and 1 deletions
+1
View File
@@ -20,6 +20,7 @@ cargo install --path .
```sh ```sh
xboctploy --list # показать проекты из конфига xboctploy --list # показать проекты из конфига
xboctploy --list-servers # показать серверы из конфига
xboctploy --dry-run demo # напечатать план деплоя без выполнения xboctploy --dry-run demo # напечатать план деплоя без выполнения
xboctploy demo # задеплоить проект demo xboctploy demo # задеплоить проект demo
``` ```
+5 -1
View File
@@ -5,7 +5,8 @@ use clap::{ArgGroup, Parser};
/// Deploy hobby projects from a local PC to a VPS over SSH. /// Deploy hobby projects from a local PC to a VPS over SSH.
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
#[command(name = "xboctploy", version, about)] #[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 { pub struct Cli {
/// Project name from deploy.toml /// Project name from deploy.toml
pub project: Option<String>, pub project: Option<String>,
@@ -18,4 +19,7 @@ pub struct Cli {
/// List configured projects and exit /// List configured projects and exit
#[arg(long)] #[arg(long)]
pub list: bool, pub list: bool,
/// List configured servers and exit
#[arg(long)]
pub list_servers: bool,
} }
+16
View File
@@ -31,6 +31,22 @@ fn run(cli: &cli::Cli) -> Result<()> {
let path = config::resolve(cli.config.as_deref())?; let path = config::resolve(cli.config.as_deref())?;
let cfg = config::load(&path)?; 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 { if cli.list {
println!("config: {}", path.display()); println!("config: {}", path.display());
println!("configured projects:"); println!("configured projects:");