flowey_hvlite/pipelines_shared/
cfg_common_params.rs1use flowey::node::prelude::*;
7use flowey::pipeline::prelude::*;
8use flowey_lib_hvlite::run_cargo_build::common::CommonArch;
9
10#[derive(Clone, Default, clap::Args)]
11#[clap(next_help_heading = "Local Only")]
12pub struct LocalRunArgs {
13 #[clap(long)]
15 verbose: bool,
16
17 #[clap(long)]
19 locked: bool,
20
21 #[clap(long)]
23 auto_install_deps: bool,
24
25 #[clap(long)]
27 non_interactive: bool,
28
29 #[clap(long)]
31 force_nuget_mono: bool,
32
33 #[clap(long)]
38 external_nuget_auth: bool,
39}
40
41pub type FulfillCommonRequestsParamsResolver =
42 Box<dyn for<'a> Fn(&mut PipelineJobCtx<'a>) -> flowey_lib_hvlite::_jobs::cfg_common::Params>;
43
44fn get_params_local(
45 local_run_args: Option<LocalRunArgs>,
46) -> anyhow::Result<FulfillCommonRequestsParamsResolver> {
47 Ok(Box::new(move |_ctx| {
48 let LocalRunArgs {
49 verbose,
50 locked,
51 auto_install_deps,
52 non_interactive,
53 force_nuget_mono,
54 external_nuget_auth,
55 } = local_run_args.clone().unwrap_or_default();
56
57 flowey_lib_hvlite::_jobs::cfg_common::Params {
58 local_only: Some(flowey_lib_hvlite::_jobs::cfg_common::LocalOnlyParams {
59 interactive: !non_interactive,
60 auto_install: auto_install_deps,
61 force_nuget_mono,
62 external_nuget_auth,
63 ignore_rust_version: true,
64 }),
65 verbose: ReadVar::from_static(verbose),
66 locked,
67 deny_warnings: false,
68 }
69 }))
70}
71
72fn get_params_cloud(
73 pipeline: &mut Pipeline,
74) -> anyhow::Result<FulfillCommonRequestsParamsResolver> {
75 let param_verbose = pipeline.new_parameter_bool(
76 "verbose",
77 "Run with verbose output",
78 ParameterKind::Stable,
79 Some(false),
80 );
81
82 Ok(Box::new(move |ctx: &mut PipelineJobCtx<'_>| {
83 flowey_lib_hvlite::_jobs::cfg_common::Params {
84 local_only: None,
85 verbose: ctx.use_parameter(param_verbose.clone()),
86 locked: true,
87 deny_warnings: true,
88 }
89 }))
90}
91
92pub fn get_cfg_common_params(
93 pipeline: &mut Pipeline,
94 backend_hint: PipelineBackendHint,
95 local_run_args: Option<LocalRunArgs>,
96) -> anyhow::Result<FulfillCommonRequestsParamsResolver> {
97 match backend_hint {
98 PipelineBackendHint::Local => get_params_local(local_run_args),
99 PipelineBackendHint::Ado | PipelineBackendHint::Github => {
100 if local_run_args.is_some() {
101 anyhow::bail!("cannot set local only params when emitting as non-local pipeline")
102 }
103 get_params_cloud(pipeline)
104 }
105 }
106}
107
108#[derive(clap::ValueEnum, Clone, Copy)]
109pub enum CommonArchCli {
110 X86_64,
111 Aarch64,
112}
113
114impl From<CommonArchCli> for CommonArch {
115 fn from(value: CommonArchCli) -> Self {
116 match value {
117 CommonArchCli::X86_64 => CommonArch::X86_64,
118 CommonArchCli::Aarch64 => CommonArch::Aarch64,
119 }
120 }
121}
122
123impl TryFrom<FlowArch> for CommonArchCli {
124 type Error = anyhow::Error;
125
126 fn try_from(arch: FlowArch) -> anyhow::Result<Self> {
127 Ok(match arch {
128 FlowArch::X86_64 => CommonArchCli::X86_64,
129 FlowArch::Aarch64 => CommonArchCli::Aarch64,
130 arch => anyhow::bail!("unsupported arch {arch}"),
131 })
132 }
133}