flowey_lib_hvlite/_jobs/
local_restore_packages.rs1use crate::common::CommonArch;
5use flowey::node::prelude::*;
6use std::collections::BTreeSet;
7
8flowey_request! {
9 pub struct Request{
10 pub arches: Vec<CommonArch>,
11 pub done: WriteVar<SideEffect>,
12 pub release_artifact: Option<ReadVar<PathBuf>>,
14 }
15}
16
17new_simple_flow_node!(struct Node);
18
19impl SimpleFlowNode for Node {
20 type Request = Request;
21
22 fn imports(ctx: &mut ImportCtx<'_>) {
23 ctx.import::<crate::init_openvmm_magicpath_openhcl_sysroot::Node>();
24 ctx.import::<crate::init_openvmm_magicpath_openvmm_deps::Node>();
25 ctx.import::<crate::init_openvmm_magicpath_release_openhcl_igvm::resolve::Node>();
26 ctx.import::<crate::init_openvmm_magicpath_protoc::Node>();
27 ctx.import::<crate::init_openvmm_magicpath_uefi_mu_msvm::Node>();
28 ctx.import::<crate::init_openvmm_magicpath_virtio_win::Node>();
29 }
30
31 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
32 let Request {
33 arches,
34 done,
35 release_artifact,
36 } = request;
37
38 let mut deps = vec![
39 ctx.reqv(crate::init_openvmm_magicpath_protoc::Request),
40 ctx.reqv(crate::init_openvmm_magicpath_virtio_win::Request),
41 ];
42
43 for arch in arches.into_iter().collect::<BTreeSet<_>>() {
44 if matches!(ctx.platform(), FlowPlatform::Linux(_)) {
45 deps.push(
46 ctx.reqv(|v| crate::init_openvmm_magicpath_openhcl_sysroot::Request {
47 arch,
48 path: v,
49 })
50 .into_side_effect(),
51 );
52 }
53 deps.extend([
54 ctx.reqv(|done| crate::init_openvmm_magicpath_uefi_mu_msvm::Request { arch, done }),
55 ctx.reqv(|done| crate::init_openvmm_magicpath_openvmm_deps::Request { arch, done }),
56 ]);
57
58 if let Some(release_artifact) = &release_artifact {
59 deps.push(
60 ctx.reqv(
61 |v| crate::init_openvmm_magicpath_release_openhcl_igvm::resolve::Request {
62 arch,
63 release_version:
64 crate::download_release_igvm_files_from_gh::OpenhclReleaseVersion::latest(),
65 release_artifact: release_artifact.clone(),
66 done: v,
67 },
68 )
69 .into_side_effect(),
70 );
71 }
72 }
73
74 ctx.emit_side_effect_step(deps, [done]);
75
76 Ok(())
77 }
78}