generate shell completions
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

This commit is contained in:
2023-07-10 16:17:31 +02:00
parent d4c579c4c8
commit b8505790f2
4 changed files with 73 additions and 7 deletions

View File

@@ -24,6 +24,7 @@ tracing = { version = "0.1.37", features = ["release_max_level_debug"] }
tracing-subscriber = "0.3.16"
url = { version = "2.3.1" }
ssh-cert-dist-common = { path = "../common" }
clap_complete_command = "0.5.1"
[dev-dependencies]
tempfile = "3.3.0"

View File

@@ -1,6 +1,7 @@
use anyhow::{bail, Context};
use axum_extra::routing::TypedPath;
use clap::{Parser, Subcommand};
use clap::{CommandFactory, Parser, Subcommand, ValueHint};
use clap_complete_command::Shell;
use reqwest::{Client, StatusCode};
use ssh_key::Certificate;
use std::path::PathBuf;
@@ -17,7 +18,7 @@ use ssh_cert_dist_common::*;
#[derive(Parser)]
pub struct ClientArgs {
/// Url for the API endpoint
#[clap(short = 'a', long = "api-endpoint", env = env_key!("API"))]
#[clap(short = 'a', long = "api-endpoint",value_hint = ValueHint::Url, env = env_key!("API"))]
api: Url,
/// Require interaction before writing certificates
#[clap(short = 'i', long = "interactive", env = env_key!("INTERACTIVE"))]
@@ -30,7 +31,7 @@ pub struct FetchArgs {
args: ClientArgs,
#[clap(short = 'k', long = "key-update", env = env_key!("KEY_UPDATE"))]
prohibit_key_update: bool,
#[clap(short = 'c', long = "cert-dir", env = env_key!("CERT_DIR"))]
#[clap(short = 'c', long = "cert-dir",value_hint = ValueHint::DirPath, env = env_key!("CERT_DIR"))]
cert_dir: PathBuf,
/// minimum time in days between now and expiry to consider checking
#[clap(short = 'd', long = "days", default_value = "60", env = env_key!("MIN_DELTA_DAYS"))]
@@ -42,7 +43,7 @@ pub struct UploadArgs {
#[clap(flatten)]
args: ClientArgs,
/// Certificates to be uploaded
#[clap(env = env_key!("FILES"))]
#[clap(value_hint = ValueHint::FilePath, env = env_key!("FILES"))]
files: Vec<PathBuf>,
}
@@ -52,10 +53,10 @@ pub struct RenewCommandArgs {
#[clap(short = 'x')]
execute: bool,
/// Path to the CA private key
#[clap(long="ca", env = env_key!("CA_KEY"))]
#[clap(long="ca",value_hint = ValueHint::DirPath, env = env_key!("CA_KEY"))]
ca_key: Option<PathBuf>,
/// Certificates to generate commands for
#[clap(env = env_key!("FILES"))]
#[clap(value_hint = ValueHint::FilePath,env = env_key!("FILES"))]
files: Vec<PathBuf>,
}
@@ -70,6 +71,11 @@ pub enum ClientCommands {
Fetch(FetchArgs),
Upload(UploadArgs),
RenewCommand(RenewCommandArgs),
#[clap(hide = true)]
Completions {
#[arg(long = "shell", value_enum)]
shell: Shell,
}
}
pub async fn run(ClientCommand { cmd }: ClientCommand) -> anyhow::Result<()> {
@@ -77,6 +83,10 @@ pub async fn run(ClientCommand { cmd }: ClientCommand) -> anyhow::Result<()> {
ClientCommands::Fetch(args) => fetch(args).await,
ClientCommands::Upload(args) => upload(args).await,
ClientCommands::RenewCommand(args) => renew(args).await,
ClientCommands::Completions { shell } => {
shell.generate(&mut ClientCommand::command(), &mut std::io::stdout());
Ok(())
}
}
}