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