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