-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathcommands.rs
More file actions
135 lines (110 loc) · 3.32 KB
/
Copy pathcommands.rs
File metadata and controls
135 lines (110 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
use std::path::PathBuf;
use blue_build_utils::constants::BB_NO_LOG_FILTER;
use log::error;
use clap::{Parser, Subcommand, crate_authors};
use clap_verbosity_flag::{InfoLevel, Verbosity};
use crate::shadow;
pub mod bug_report;
pub mod build;
pub mod completions;
pub mod generate;
pub mod generate_iso;
pub mod init;
pub mod login;
pub mod prune;
#[cfg(feature = "recipe-v2")]
pub mod recipe;
pub mod switch;
pub mod validate;
pub trait BlueBuildCommand {
/// Runs the command and returns a result
/// of the execution
///
/// # Errors
/// Can return an `anyhow` Error
fn try_run(&mut self) -> miette::Result<()>;
/// Runs the command and exits if there is an error.
fn run(&mut self) {
if let Err(e) = self.try_run() {
error!("Failed:\n{e:?}");
std::process::exit(1);
}
std::process::exit(0);
}
}
#[derive(Parser, Debug)]
#[clap(
name = "BlueBuild",
about,
long_about = None,
author=crate_authors!(),
version=shadow::PKG_VERSION,
long_version=shadow::CLAP_LONG_VERSION,
)]
pub struct BlueBuildArgs {
#[command(subcommand)]
pub command: CommandArgs,
/// Allows printing logs from all crates.
///
/// WARNING: This can print sensitive information.
/// Be sure to run this in a non-public setting.
#[arg(long, env = BB_NO_LOG_FILTER)]
pub no_log_filter: bool,
/// The directory to output build logs.
#[arg(long)]
pub log_out: Option<PathBuf>,
#[clap(flatten)]
pub verbosity: Verbosity<InfoLevel>,
}
#[derive(Debug, Subcommand)]
pub enum CommandArgs {
/// Build an image from a recipe
Build(build::BuildCommand),
/// Generate a Containerfile from a recipe
#[clap(visible_alias = "template")]
Generate(generate::GenerateCommand),
/// Generate an ISO for an image or recipe.
GenerateIso(generate_iso::GenerateIsoCommand),
/// Switch your current OS onto the image
/// being built.
///
/// This will create a tarball of your image at
/// `/etc/bluebuild/` and invoke `rpm-ostree` to
/// rebase/upgrade onto the image using `oci-archive`.
///
/// NOTE: This can only be used if you have `rpm-ostree`
/// installed. This image will not be signed.
#[command(
visible_alias("update"),
visible_alias("upgrade"),
visible_alias("rebase")
)]
Switch(switch::SwitchCommand),
/// Login to all services used for building.
Login(login::LoginCommand),
/// Create a new bluebuild project.
New(init::NewCommand),
/// Create a new bluebuild project.
Init(init::InitCommand),
/// Validate your recipe file and display
/// errors to help fix problems.
Validate(Box<validate::ValidateCommand>),
/// Clean up cache and images for build drivers.
Prune(prune::PruneCommand),
/// Create a pre-populated GitHub issue with information about your configuration
BugReport(bug_report::BugReportCommand),
/// Generate shell completions for your shell to stdout
Completions(completions::CompletionsCommand),
/// Perform operations on recipe files
#[cfg(feature = "recipe-v2")]
Recipe(recipe::RecipeCommand),
}
#[cfg(test)]
mod test {
use clap::CommandFactory;
use super::BlueBuildArgs;
#[test]
fn test_cli() {
BlueBuildArgs::command().debug_assert();
}
}