flowey_lib_hvlite/_jobs/
local_update_cca_emu.rs1use crate::_jobs::local_install_cca_emu::build_cca_rootfs;
6use crate::_jobs::local_install_cca_emu::build_plane0_linux;
7use crate::_jobs::local_install_cca_emu::sync_shrinkwrap_overlay_assets;
8use flowey::node::prelude::*;
9
10#[derive(Default, Serialize, Deserialize, PartialEq, Eq)]
11pub struct SubCmds {
12 pub rebuild_plane0_linux: bool,
13 pub rebuild_rootfs: bool,
14 pub tfa_rev: Option<String>,
15 pub tfrmm_rev: Option<String>,
16 pub plane0_linux_rev: Option<String>,
17}
18
19flowey_request! {
20 pub struct Params {
21 pub test_root: PathBuf,
22 pub openvmm_root: PathBuf,
23 pub sub_cmds: SubCmds,
24 pub done: WriteVar<SideEffect>,
25 }
26}
27
28new_simple_flow_node!(struct Node);
29
30impl SimpleFlowNode for Node {
31 type Request = Params;
32
33 fn imports(_ctx: &mut ImportCtx<'_>) {}
34
35 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
36 let Params {
37 test_root,
38 openvmm_root,
39 sub_cmds,
40 done,
41 } = request;
42
43 let SubCmds {
44 rebuild_plane0_linux,
45 rebuild_rootfs,
46 tfa_rev: _,
47 tfrmm_rev: _,
48 plane0_linux_rev: _,
49 } = sub_cmds;
50
51 ctx.emit_rust_step("update cca emulation environment", |ctx| {
52 done.claim(ctx);
53 move |rt| {
54 if rebuild_plane0_linux {
55 let plane0_linux = test_root.join("plane0-linux");
56 let plane0_image = plane0_linux
57 .join("arch")
58 .join("arm64")
59 .join("boot")
60 .join("Image");
61
62 anyhow::ensure!(
63 plane0_linux.exists(),
64 "plane0 Linux source tree is missing at {}, try --install-emu first",
65 plane0_linux.display()
66 );
67
68 build_plane0_linux(rt, &plane0_linux, &plane0_image)?;
69 }
70
71 if rebuild_rootfs {
72 let shrinkwrap_dir = test_root.join("shrinkwrap");
73 let venv_dir = shrinkwrap_dir.join("venv");
74 sync_shrinkwrap_overlay_assets(&openvmm_root, &shrinkwrap_dir)?;
75 build_cca_rootfs(rt, &test_root, &shrinkwrap_dir, &venv_dir)?;
76 }
77
78 Ok(())
79 }
80 });
81
82 Ok(())
83 }
84}