flowey_lib_hvlite/_jobs/
local_restore_packages.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use crate::download_lxutil::LxutilArch;
5use crate::download_uefi_mu_msvm::MuMsvmArch;
6use crate::init_openvmm_magicpath_linux_test_kernel::OpenvmmLinuxTestKernelArch;
7use crate::init_openvmm_magicpath_openhcl_sysroot::OpenvmmSysrootArch;
8use crate::run_cargo_build::common::CommonArch;
9use flowey::node::prelude::*;
10
11flowey_request! {
12    pub struct Request{
13        pub arches: Vec<CommonArch>,
14        pub done: WriteVar<SideEffect>,
15        pub release_artifact: ReadVar<PathBuf>,
16    }
17}
18
19new_simple_flow_node!(struct Node);
20
21impl SimpleFlowNode for Node {
22    type Request = Request;
23
24    fn imports(ctx: &mut ImportCtx<'_>) {
25        ctx.import::<crate::init_openvmm_magicpath_linux_test_kernel::Node>();
26        ctx.import::<crate::init_openvmm_magicpath_lxutil::Node>();
27        ctx.import::<crate::init_openvmm_magicpath_openhcl_sysroot::Node>();
28        ctx.import::<crate::init_openvmm_magicpath_release_openhcl_igvm::resolve::Node>();
29        ctx.import::<crate::init_openvmm_magicpath_protoc::Node>();
30        ctx.import::<crate::init_openvmm_magicpath_uefi_mu_msvm::Node>();
31    }
32
33    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
34        let Request {
35            arches,
36            done,
37            release_artifact,
38        } = request;
39
40        let mut deps = vec![ctx.reqv(crate::init_openvmm_magicpath_protoc::Request)];
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: OpenvmmSysrootArch::X64,
49                                path: v,
50                            })
51                            .into_side_effect()]);
52                    }
53                    deps.extend_from_slice(&[
54                        ctx.reqv(|done| crate::init_openvmm_magicpath_lxutil::Request {
55                            arch: LxutilArch::X86_64,
56                            done,
57                        }),
58                        ctx.reqv(|done| crate::init_openvmm_magicpath_uefi_mu_msvm::Request {
59                            arch: MuMsvmArch::X86_64,
60                            done,
61                        }),
62                        ctx.reqv(
63                            |done| crate::init_openvmm_magicpath_linux_test_kernel::Request {
64                                arch: OpenvmmLinuxTestKernelArch::X64,
65                                done,
66                            },
67                        ),
68                    ]);
69                }
70                CommonArch::Aarch64 => {
71                    if matches!(ctx.platform(), FlowPlatform::Linux(_)) {
72                        deps.extend_from_slice(&[ctx
73                            .reqv(|v| crate::init_openvmm_magicpath_openhcl_sysroot::Request {
74                                arch: OpenvmmSysrootArch::Aarch64,
75                                path: v,
76                            })
77                            .into_side_effect()]);
78                    }
79                    deps.extend_from_slice(&[
80                        ctx.reqv(|done| crate::init_openvmm_magicpath_lxutil::Request {
81                            arch: LxutilArch::Aarch64,
82                            done,
83                        }),
84                        ctx.reqv(|done| crate::init_openvmm_magicpath_uefi_mu_msvm::Request {
85                            arch: MuMsvmArch::Aarch64,
86                            done,
87                        }),
88                        ctx.reqv(
89                            |done| crate::init_openvmm_magicpath_linux_test_kernel::Request {
90                                arch: OpenvmmLinuxTestKernelArch::Aarch64,
91                                done,
92                            },
93                        ),
94                    ]);
95                }
96            }
97
98            deps.push(
99                ctx.reqv(
100                    |v| crate::init_openvmm_magicpath_release_openhcl_igvm::resolve::Request {
101                        arch,
102                        release_version:
103                            crate::download_release_igvm_files_from_gh::OpenhclReleaseVersion::latest(),
104                        release_artifact:release_artifact.clone(),
105                        done: v,
106                    },
107                )
108                .into_side_effect(),
109            );
110        }
111
112        ctx.emit_side_effect_step(deps, [done]);
113
114        Ok(())
115    }
116}