flowey_lib_hvlite/_jobs/
cfg_versions.rs1use crate::common::CommonArch;
9use crate::resolve_openhcl_kernel_package::OpenhclKernelPackageKind;
10use flowey::node::prelude::*;
11use std::collections::BTreeMap;
12
13pub const AZCOPY: &str = "10.27.1";
20pub const AZURE_CLI: &str = "2.56.0";
21pub const DOTNET: &str = "8.0";
22pub const FUZZ: &str = "0.12.0";
23pub const GH_CLI: &str = "2.52.0";
24pub const MDBOOK: &str = "0.4.40";
25pub const MDBOOK_ADMONISH: &str = "1.18.0";
26pub const MDBOOK_MERMAID: &str = "0.14.0";
27pub const MU_MSVM: &str = "26.0.31";
28pub const NEXTEST: &str = "0.9.133";
29pub const NODEJS: &str = "24.x";
30pub const OPENHCL_KERNEL_DEV_VERSION: Option<&str> = None;
32pub const OPENHCL_KERNEL_STABLE_VERSION: &str = "6.18.37.5";
33pub const OPENVMM_DEPS: &str = "0.3.0-136";
34pub const PROTOC: &str = "27.1";
35
36flowey_request! {
37 pub enum Request {
38 Init,
40 LocalOpenvmmDeps(CommonArch, ReadVar<PathBuf>),
42 LocalProtoc(ReadVar<PathBuf>),
44 LocalKernel {
46 arch: CommonArch,
47 kernel: ReadVar<PathBuf>,
48 modules: ReadVar<PathBuf>,
49 },
50 LocalUefi(CommonArch, ReadVar<PathBuf>),
52 }
53}
54
55new_flow_node!(struct Node);
56
57impl FlowNode for Node {
58 type Request = Request;
59
60 fn imports(ctx: &mut ImportCtx<'_>) {
61 ctx.import::<crate::resolve_openhcl_kernel_package::Node>();
62 ctx.import::<crate::resolve_openvmm_deps::Node>();
63 ctx.import::<crate::resolve_openvmm_qemu::Node>();
64 ctx.import::<crate::resolve_openvmm_test_initrd::Node>();
65 ctx.import::<crate::resolve_openvmm_test_linux_kernel::Node>();
66 ctx.import::<crate::resolve_openvmm_test_virtio_win::Node>();
67 ctx.import::<crate::download_uefi_mu_msvm::Node>();
68 ctx.import::<crate::cfg_rustup_version::Node>();
69 ctx.import::<flowey_lib_common::download_azcopy::Node>();
70 ctx.import::<flowey_lib_common::download_cargo_fuzz::Node>();
71 ctx.import::<flowey_lib_common::download_cargo_nextest::Node>();
72 ctx.import::<flowey_lib_common::download_gh_cli::Node>();
73 ctx.import::<flowey_lib_common::download_mdbook_admonish::Node>();
74 ctx.import::<flowey_lib_common::download_mdbook_mermaid::Node>();
75 ctx.import::<flowey_lib_common::download_mdbook::Node>();
76 ctx.import::<flowey_lib_common::resolve_protoc::Node>();
77 ctx.import::<flowey_lib_common::install_azure_cli::Node>();
78 ctx.import::<flowey_lib_common::install_dotnet_cli::Node>();
79 ctx.import::<flowey_lib_common::install_nodejs::Node>();
80 }
81
82 #[rustfmt::skip]
83 fn emit(requests: Vec<Self::Request>, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
84 let mut local_openvmm_deps: BTreeMap<CommonArch, ReadVar<PathBuf>> = BTreeMap::new();
85 let mut local_protoc: Option<ReadVar<PathBuf>> = None;
86 let mut local_kernel: BTreeMap<CommonArch, (ReadVar<PathBuf>, ReadVar<PathBuf>)> = BTreeMap::new();
87 let mut local_uefi: BTreeMap<CommonArch, ReadVar<PathBuf>> = BTreeMap::new();
88
89 for req in requests {
90 match req {
91 Request::Init => {
92 }
94 Request::LocalOpenvmmDeps(arch, path) => {
95 if local_openvmm_deps.contains_key(&arch) {
96 anyhow::bail!(
97 "OpenvmmDepsPath for {:?} must not be specified multiple times",
98 arch
99 );
100 }
101 local_openvmm_deps.insert(arch, path);
102 }
103 Request::LocalProtoc(path) => {
104 if local_protoc.is_some() {
105 anyhow::bail!("ProtocPath must not be specified multiple times");
106 }
107 local_protoc = Some(path);
108 }
109 Request::LocalKernel { arch, kernel, modules } => {
110 if local_kernel.contains_key(&arch) {
111 anyhow::bail!(
112 "LocalKernel for {:?} must not be specified multiple times",
113 arch
114 );
115 }
116 local_kernel.insert(arch, (kernel, modules));
117 }
118 Request::LocalUefi(arch, path) => {
119 if local_uefi.contains_key(&arch) {
120 anyhow::bail!(
121 "LocalUefi for {:?} must not be specified multiple times",
122 arch
123 );
124 }
125 local_uefi.insert(arch, path);
126 }
127 }
128 }
129
130 let has_local_openvmm_deps = !local_openvmm_deps.is_empty();
132 let has_local_protoc = local_protoc.is_some();
133 let has_local_kernel = !local_kernel.is_empty();
134 let has_local_uefi = !local_uefi.is_empty();
135
136 if !local_openvmm_deps.is_empty() {
138 let deps_local_paths = local_openvmm_deps
139 .into_iter()
140 .map(|(arch, path)| (arch, ConfigVar(path)))
141 .collect();
142 ctx.config(crate::resolve_openvmm_deps::Config {
143 local_paths: deps_local_paths,
144 ..Default::default()
145 });
146 }
147
148 if let Some(protoc_path) = local_protoc {
150 ctx.config(flowey_lib_common::resolve_protoc::Config {
151 local_path: Some(ConfigVar(protoc_path)),
152 ..Default::default()
153 });
154 }
155
156 if !local_kernel.is_empty() {
158 let kernel_local_paths = local_kernel
159 .into_iter()
160 .map(|(arch, (kernel, modules))| {
161 (arch, (ConfigVar(kernel), ConfigVar(modules)))
162 })
163 .collect();
164 ctx.config(crate::resolve_openhcl_kernel_package::Config {
165 local_paths: kernel_local_paths,
166 ..Default::default()
167 });
168 }
169
170 if !local_uefi.is_empty() {
172 let uefi_local_paths = local_uefi
173 .into_iter()
174 .map(|(arch, path)| (arch, ConfigVar(path)))
175 .collect();
176 ctx.config(crate::download_uefi_mu_msvm::Config {
177 local_paths: uefi_local_paths,
178 ..Default::default()
179 });
180 }
181
182 if !has_local_kernel {
185 let mut versions = BTreeMap::from([
186 (
187 OpenhclKernelPackageKind::Main,
188 OPENHCL_KERNEL_STABLE_VERSION.into(),
189 ),
190 (
191 OpenhclKernelPackageKind::Cvm,
192 OPENHCL_KERNEL_STABLE_VERSION.into(),
193 ),
194 ]);
195 if let Some(version) = OPENHCL_KERNEL_DEV_VERSION {
196 versions.insert(OpenhclKernelPackageKind::Dev, version.into());
197 versions.insert(OpenhclKernelPackageKind::CvmDev, version.into());
198 }
199 ctx.config(crate::resolve_openhcl_kernel_package::Config {
200 versions,
201 ..Default::default()
202 });
203 }
204 if !has_local_openvmm_deps {
205 ctx.config(crate::resolve_openvmm_deps::Config {
206 version: Some(OPENVMM_DEPS.into()),
207 ..Default::default()
208 });
209 }
210 ctx.config(crate::resolve_openvmm_test_linux_kernel::Config {
215 version: Some(OPENVMM_DEPS.into()),
216 ..Default::default()
217 });
218 ctx.config(crate::resolve_openvmm_test_initrd::Config {
219 version: Some(OPENVMM_DEPS.into()),
220 ..Default::default()
221 });
222 ctx.config(crate::resolve_openvmm_test_virtio_win::Config {
223 version: Some(OPENVMM_DEPS.into()),
224 ..Default::default()
225 });
226 ctx.config(crate::resolve_openvmm_qemu::Config {
227 version: Some(OPENVMM_DEPS.into()),
228 ..Default::default()
229 });
230 if !has_local_uefi {
231 ctx.config(crate::download_uefi_mu_msvm::Config {
232 version: Some(MU_MSVM.into()),
233 ..Default::default()
234 });
235 }
236 ctx.config(flowey_lib_common::download_azcopy::Config {
237 version: Some(AZCOPY.into()),
238 });
239 ctx.config(flowey_lib_common::download_cargo_fuzz::Config {
240 version: Some(FUZZ.into()),
241 });
242 ctx.config(flowey_lib_common::download_cargo_nextest::Config {
243 version: Some(NEXTEST.into()),
244 });
245 ctx.config(flowey_lib_common::download_gh_cli::Config {
246 version: Some(GH_CLI.into()),
247 });
248 ctx.config(flowey_lib_common::download_mdbook::Config {
249 version: Some(MDBOOK.into()),
250 });
251 ctx.config(flowey_lib_common::download_mdbook_admonish::Config {
252 version: Some(MDBOOK_ADMONISH.into()),
253 });
254 ctx.config(flowey_lib_common::download_mdbook_mermaid::Config {
255 version: Some(MDBOOK_MERMAID.into()),
256 });
257 if !has_local_protoc {
258 ctx.config(flowey_lib_common::resolve_protoc::Config {
259 version: Some(PROTOC.into()),
260 ..Default::default()
261 });
262 }
263 ctx.config(flowey_lib_common::install_azure_cli::Config {
264 version: Some(AZURE_CLI.into()),
265 ..Default::default()
266 });
267 ctx.config(flowey_lib_common::install_dotnet_cli::Config {
268 version: Some(DOTNET.into()),
269 ..Default::default()
270 });
271 ctx.config(flowey_lib_common::install_nodejs::Config {
272 version: Some(NODEJS.into()),
273 ..Default::default()
274 });
275 ctx.req(crate::cfg_rustup_version::Request::Init);
276 Ok(())
277 }
278}