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