flowey_lib_hvlite/
init_openvmm_magicpath_release_openhcl_igvm.rs1pub mod resolve {
5 use crate::download_release_igvm_files_from_gh;
6 use crate::run_cargo_build::common::CommonArch;
7 use flowey::node::prelude::new_simple_flow_node;
8 use flowey::node::prelude::*;
9
10 new_simple_flow_node!(struct Node);
11
12 flowey_request! {
13 pub struct Request{
14 pub arch: CommonArch,
15 pub done: WriteVar<SideEffect>,
16 pub release_artifact: ReadVar<PathBuf>,
17 pub release_version: download_release_igvm_files_from_gh::OpenhclReleaseVersion
18 }
19 }
20
21 impl SimpleFlowNode for Node {
22 type Request = Request;
23
24 fn imports(ctx: &mut ImportCtx<'_>) {
25 ctx.import::<download_release_igvm_files_from_gh::resolve::Node>();
26 }
27
28 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
29 let Request {
30 arch,
31 release_version,
32 release_artifact,
33 done,
34 } = request;
35
36 let latest_release_igvm_files =
37 ctx.reqv(|v| download_release_igvm_files_from_gh::resolve::Request {
38 arch,
39 release_igvm_files: v,
40 release_version,
41 });
42
43 let release_version_str = release_version.to_string();
44
45 ctx.emit_rust_step(
46 "copy downloaded release igvm files to artifact dir",
47 move |ctx| {
48 let latest_release_igvm_files = latest_release_igvm_files.claim(ctx);
49 let latest_release_artifact = release_artifact.claim(ctx);
50 done.claim(ctx);
51
52 move |rt| {
53 let latest_release_igvm_files = rt.read(latest_release_igvm_files);
54 let latest_release_artifact = rt.read(latest_release_artifact);
55
56 match arch {
57 CommonArch::Aarch64 => {
58 let aarch64_name =
59 format!("{}-aarch64-openhcl.bin", release_version_str);
60 if let Some(src) = &latest_release_igvm_files.openhcl_aarch64 {
61 fs_err::copy(src, latest_release_artifact.join(&aarch64_name))?;
62 }
63 }
64 CommonArch::X86_64 => {
65 let x64_name = format!("{}-x64-openhcl.bin", release_version_str);
66 let direct_name =
67 format!("{}-x64-direct-openhcl.bin", release_version_str);
68 if let Some(src) = &latest_release_igvm_files.openhcl {
69 fs_err::copy(src, latest_release_artifact.join(&x64_name))?;
70 }
71 if let Some(src) = &latest_release_igvm_files.openhcl_direct {
72 fs_err::copy(src, latest_release_artifact.join(&direct_name))?;
73 }
74 }
75 }
76
77 Ok(())
78 }
79 },
80 );
81
82 Ok(())
83 }
84 }
85}