flowey_lib_hvlite/_jobs/
local_restore_packages.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use crate::download_uefi_mu_msvm::MuMsvmArch;
5use crate::init_openvmm_magicpath_linux_test_kernel::OpenvmmLinuxTestKernelArch;
6use crate::init_openvmm_magicpath_openhcl_sysroot::OpenvmmSysrootArch;
7use crate::run_cargo_build::common::CommonArch;
8use flowey::node::prelude::*;
9
10flowey_request! {
11    pub struct Request{
12        pub arches: Vec<CommonArch>,
13        pub done: WriteVar<SideEffect>,
14        pub release_artifact: ReadVar<PathBuf>,
15    }
16}
17
18new_simple_flow_node!(struct Node);
19
20impl SimpleFlowNode for Node {
21    type Request = Request;
22
23    fn imports(ctx: &mut ImportCtx<'_>) {
24        ctx.import::<crate::init_openvmm_magicpath_linux_test_kernel::Node>();
25        ctx.import::<crate::init_openvmm_magicpath_openhcl_sysroot::Node>();
26        ctx.import::<crate::init_openvmm_magicpath_release_openhcl_igvm::resolve::Node>();
27        ctx.import::<crate::init_openvmm_magicpath_protoc::Node>();
28        ctx.import::<crate::init_openvmm_magicpath_uefi_mu_msvm::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![ctx.reqv(crate::init_openvmm_magicpath_protoc::Request)];
39
40        for arch in arches {
41            match arch {
42                CommonArch::X86_64 => {
43                    if matches!(ctx.platform(), FlowPlatform::Linux(_)) {
44                        deps.extend_from_slice(&[ctx
45                            .reqv(|v| crate::init_openvmm_magicpath_openhcl_sysroot::Request {
46                                arch: OpenvmmSysrootArch::X64,
47                                path: v,
48                            })
49                            .into_side_effect()]);
50                    }
51                    deps.extend_from_slice(&[
52                        ctx.reqv(|done| crate::init_openvmm_magicpath_uefi_mu_msvm::Request {
53                            arch: MuMsvmArch::X86_64,
54                            done,
55                        }),
56                        ctx.reqv(
57                            |done| crate::init_openvmm_magicpath_linux_test_kernel::Request {
58                                arch: OpenvmmLinuxTestKernelArch::X64,
59                                done,
60                            },
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: OpenvmmSysrootArch::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: MuMsvmArch::Aarch64,
76                            done,
77                        }),
78                        ctx.reqv(
79                            |done| crate::init_openvmm_magicpath_linux_test_kernel::Request {
80                                arch: OpenvmmLinuxTestKernelArch::Aarch64,
81                                done,
82                            },
83                        ),
84                    ]);
85                }
86            }
87
88            deps.push(
89                ctx.reqv(
90                    |v| crate::init_openvmm_magicpath_release_openhcl_igvm::resolve::Request {
91                        arch,
92                        release_version:
93                            crate::download_release_igvm_files_from_gh::OpenhclReleaseVersion::latest(),
94                        release_artifact:release_artifact.clone(),
95                        done: v,
96                    },
97                )
98                .into_side_effect(),
99            );
100        }
101
102        ctx.emit_side_effect_step(deps, [done]);
103
104        Ok(())
105    }
106}