use clap::Args;
use serde::Serialize;
use homeboy::release::{self, ReleaseCommandInput, ReleaseCommandResult};
use super::utils::args::{DryRunArgs, HiddenJsonArgs, PositionalComponentArgs};
use super::CmdResult;
#[derive(Args)]
pub struct ReleaseArgs {
#[command(flatten)]
comp: PositionalComponentArgs,
#[command(flatten)]
dry_run_args: DryRunArgs,
#[command(flatten)]
_json: HiddenJsonArgs,
#[arg(long)]
deploy: bool,
#[arg(long)]
recover: bool,
#[arg(long)]
skip_checks: bool,
#[arg(long)]
major: bool,
#[arg(long)]
skip_publish: bool,
}
#[derive(Serialize)]
#[serde(tag = "command", rename = "release")]
pub struct ReleaseOutput {
pub result: ReleaseCommandResult,
}
pub fn run(args: ReleaseArgs, _global: &crate::commands::GlobalArgs) -> CmdResult<ReleaseOutput> {
let (result, exit_code) = release::run_command(ReleaseCommandInput {
component_id: args.comp.id().to_string(),
path_override: args.comp.path.clone(),
dry_run: args.dry_run_args.dry_run,
deploy: args.deploy,
recover: args.recover,
skip_checks: args.skip_checks,
major: args.major,
skip_publish: args.skip_publish,
})?;
Ok((ReleaseOutput { result }, exit_code))
}