Skip to main content

flowey_lib_hvlite/
download_vmm_tests_built_artifacts.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use crate::init_vmm_tests_content_dir::VmmTestsBuiltArtifactsWrite;
5use flowey::node::prelude::*;
6use flowey_lib_common::gh_workflow_id;
7
8flowey_request! {
9    pub struct Request {
10        pub built_artifacts_write: VmmTestsBuiltArtifactsWrite,
11    }
12}
13
14new_simple_flow_node!(struct Node);
15
16impl SimpleFlowNode for Node {
17    type Request = Request;
18
19    fn imports(ctx: &mut ImportCtx<'_>) {
20        ctx.import::<flowey_lib_common::download_gh_artifact::Node>();
21        ctx.import::<gh_workflow_id::Node>();
22        ctx.import::<resolve_artifact::Node>();
23    }
24
25    fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
26        let Request {
27            built_artifacts_write:
28                VmmTestsBuiltArtifactsWrite {
29                    flowey_hvlite_windows_x64,
30                    flowey_hvlite_windows_aarch64,
31                    flowey_hvlite_linux_x64,
32                    flowey_hvlite_linux_musl_x64,
33                    nextest_vmm_tests_archive_windows_x64,
34                    nextest_vmm_tests_archive_windows_aarch64,
35                    nextest_vmm_tests_archive_linux_x64,
36                    nextest_vmm_tests_archive_linux_musl_x64,
37                    nextest_vmm_tests_archive_linux_musl_aarch64,
38                    prep_steps_windows_x64,
39                    prep_steps_linux_musl_x64,
40                    test_igvm_agent_rpc_server_windows_x64,
41                    openvmm_windows_x64,
42                    openvmm_windows_aarch64,
43                    openvmm_linux_x64,
44                    openvmm_linux_aarch64,
45                    openvmm_linux_musl_x64,
46                    openvmm_linux_musl_aarch64,
47                    openvmm_vhost_linux_x64,
48                    openvmm_vhost_linux_aarch64,
49                    openvmm_vhost_linux_musl_x64,
50                    openvmm_vhost_linux_musl_aarch64,
51                    pipette_windows_x64,
52                    pipette_windows_aarch64,
53                    pipette_linux_musl_x64,
54                    pipette_linux_musl_aarch64,
55                    guest_test_uefi_x64,
56                    guest_test_uefi_aarch64,
57                    openhcl_standard_x64,
58                    openhcl_standard_aarch64,
59                    openhcl_standard_dev_x64,
60                    openhcl_standard_dev_aarch64,
61                    openhcl_cvm_x64,
62                    vmfirmwareigvm_cvm_x64,
63                    openhcl_linux_direct_x64,
64                    openhcl_sivm_x64,
65                    snp_linux_direct_igvm_x64,
66                    tmks_x64,
67                    tmks_aarch64,
68                    tmk_vmm_windows_x64,
69                    tmk_vmm_windows_aarch64,
70                    tmk_vmm_linux_musl_x64,
71                    tmk_vmm_linux_musl_aarch64,
72                    vmgstool_windows_x64,
73                    vmgstool_windows_aarch64,
74                    vmgstool_linux_x64,
75                    vmgstool_dev_windows_x64,
76                    vmgstool_dev_windows_aarch64,
77                    vmgstool_dev_linux_x64,
78                    tpm_guest_tests_windows_x64,
79                    tpm_guest_tests_linux_x64,
80                },
81        } = request;
82
83        let run = ctx.reqv(|v| gh_workflow_id::Request {
84            repo_owner: crate::common::OPENVMM_GITHUB_OWNER.into(),
85            repo_name: crate::common::OPENVMM_GITHUB_REPO.into(),
86            commit_or_branch: gh_workflow_id::GitCommitOrBranch::Branch(ReadVar::from_static(
87                "main".into(),
88            )),
89            pipeline_name: "openvmm-ci.yaml".into(),
90            require_run_status: Some(gh_workflow_id::GhRunStatus::Success),
91            require_successful_job_with_name: None,
92            gh_workflow: v,
93        });
94        let run_id = run.map(ctx, |r| r.id);
95
96        macro_rules! download {
97            ($output:expr, $file_name:literal) => {
98                if let Some(output) = $output {
99                    download_artifact(ctx, $file_name.into(), run_id.clone(), output);
100                }
101            };
102        }
103
104        if flowey_hvlite_windows_x64.is_some()
105            || flowey_hvlite_windows_aarch64.is_some()
106            || flowey_hvlite_linux_x64.is_some()
107            || flowey_hvlite_linux_musl_x64.is_some()
108        {
109            anyhow::bail!("downloading flowey_hvlite is not supported");
110        }
111
112        download!(
113            nextest_vmm_tests_archive_windows_x64,
114            "x64-windows-vmm-tests-archive"
115        );
116        download!(
117            nextest_vmm_tests_archive_windows_aarch64,
118            "aarch64-windows-vmm-tests-archive"
119        );
120        download!(
121            nextest_vmm_tests_archive_linux_x64,
122            "x64-linux-vmm-tests-archive"
123        );
124        download!(
125            nextest_vmm_tests_archive_linux_musl_x64,
126            "x64-linux-musl-vmm-tests-archive"
127        );
128        download!(
129            nextest_vmm_tests_archive_linux_musl_aarch64,
130            "aarch64-linux-musl-vmm-tests-archive"
131        );
132
133        download!(prep_steps_windows_x64, "x64-windows-prep_steps");
134        download!(prep_steps_linux_musl_x64, "x64-linux-musl-prep_steps");
135        download!(
136            test_igvm_agent_rpc_server_windows_x64,
137            "x64-windows-test_igvm_agent_rpc_server"
138        );
139
140        download!(openvmm_windows_x64, "x64-windows-openvmm");
141        download!(openvmm_windows_aarch64, "aarch64-windows-openvmm");
142        download!(openvmm_linux_x64, "x64-linux-openvmm");
143        download!(openvmm_linux_aarch64, "aarch64-linux-openvmm");
144        download!(openvmm_linux_musl_x64, "x64-linux-musl-openvmm");
145        download!(openvmm_linux_musl_aarch64, "aarch64-linux-musl-openvmm");
146
147        download!(openvmm_vhost_linux_x64, "x64-linux-openvmm_vhost");
148        download!(openvmm_vhost_linux_aarch64, "aarch64-linux-openvmm_vhost");
149        download!(openvmm_vhost_linux_musl_x64, "x64-linux-musl-openvmm_vhost");
150        download!(
151            openvmm_vhost_linux_musl_aarch64,
152            "aarch64-linux-musl-openvmm_vhost"
153        );
154
155        download!(pipette_windows_x64, "x64-windows-pipette");
156        download!(pipette_windows_aarch64, "aarch64-windows-pipette");
157        download!(pipette_linux_musl_x64, "x64-linux-musl-pipette");
158        download!(pipette_linux_musl_aarch64, "aarch64-linux-musl-pipette");
159
160        download!(guest_test_uefi_x64, "x64-guest_test_uefi");
161        download!(guest_test_uefi_aarch64, "aarch64-guest_test_uefi");
162
163        download!(openhcl_standard_x64, "x64-openhcl-igvm");
164        download!(openhcl_standard_aarch64, "aarch64-openhcl-igvm");
165        download!(openhcl_standard_dev_x64, "x64-openhcl-igvm-devkern");
166        download!(openhcl_standard_dev_aarch64, "aarch64-openhcl-igvm-devkern");
167        download!(openhcl_cvm_x64, "x64-openhcl-igvm-cvm");
168        download!(vmfirmwareigvm_cvm_x64, "x64-vmfirmwareigvm-cvm");
169        download!(
170            openhcl_linux_direct_x64,
171            "x64-openhcl-igvm-test-linux-direct"
172        );
173        download!(snp_linux_direct_igvm_x64, "x64-linux-snp-linux-direct-igvm");
174        download!(openhcl_sivm_x64, "x64-openhcl-igvm-test-sivm");
175
176        download!(tmks_x64, "x64-tmks");
177        download!(tmks_aarch64, "aarch64-tmks");
178
179        download!(tmk_vmm_windows_x64, "x64-windows-tmk_vmm");
180        download!(tmk_vmm_windows_aarch64, "aarch64-windows-tmk_vmm");
181        download!(tmk_vmm_linux_musl_x64, "x64-linux-musl-tmk_vmm");
182        download!(tmk_vmm_linux_musl_aarch64, "aarch64-linux-musl-tmk_vmm");
183
184        download!(vmgstool_windows_x64, "x64-windows-vmgstool");
185        download!(vmgstool_windows_aarch64, "aarch64-windows-vmgstool");
186        download!(vmgstool_linux_x64, "x64-linux-vmgstool");
187
188        download!(vmgstool_dev_windows_x64, "x64-windows-vmgstool-dev");
189        download!(vmgstool_dev_windows_aarch64, "aarch64-windows-vmgstool-dev");
190        download!(vmgstool_dev_linux_x64, "x64-linux-vmgstool-dev");
191
192        download!(tpm_guest_tests_windows_x64, "x64-windows-tpm_guest_tests");
193        download!(tpm_guest_tests_linux_x64, "x64-linux-tpm_guest_tests");
194
195        Ok(())
196    }
197}
198
199fn download_artifact<T: Artifact>(
200    ctx: &mut NodeCtx<'_>,
201    file_name: String,
202    run_id: ReadVar<String>,
203    output: WriteVar<T>,
204) {
205    let downloaded_artifact = ctx.reqv(|v| flowey_lib_common::download_gh_artifact::Request {
206        repo_owner: crate::common::OPENVMM_GITHUB_OWNER.into(),
207        repo_name: crate::common::OPENVMM_GITHUB_REPO.into(),
208        file_name,
209        path: v,
210        run_id,
211    });
212    ctx.req(resolve_artifact::Request::new(downloaded_artifact, output));
213}