1use 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}