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