flowey_lib_hvlite/_jobs/
test_local_flowey_build_igvm.rs1use flowey::node::prelude::*;
6
7use crate::build_openhcl_igvm_from_recipe::OpenhclIgvmRecipe;
8
9flowey_request! {
10 pub struct Request {
11 pub base_recipe: OpenhclIgvmRecipe,
12 pub done: WriteVar<SideEffect>,
13 }
14}
15
16new_simple_flow_node!(struct Node);
17
18impl SimpleFlowNode for Node {
19 type Request = Request;
20
21 fn imports(ctx: &mut ImportCtx<'_>) {
22 ctx.import::<crate::git_checkout_openvmm_repo::Node>();
23 ctx.import::<flowey_lib_common::install_rust::Node>();
24 }
25
26 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
27 let Request { base_recipe, done } = request;
28
29 let hvlite_repo = ctx.reqv(crate::git_checkout_openvmm_repo::req::GetRepoDir);
30 let rust_install = ctx.reqv(flowey_lib_common::install_rust::Request::EnsureInstalled);
31 let rust_toolchain = ctx.reqv(flowey_lib_common::install_rust::Request::GetRustupToolchain);
32 let gh_token = (ctx.backend() == FlowBackend::Github)
33 .then(|| ctx.get_gh_context_var().global().token());
34
35 let test_local = ctx.emit_rust_step(
36 "test cargo xflowey build-igvm x64 --install-missing-deps",
37 |ctx| {
38 rust_install.claim(ctx);
39 let rust_toolchain = rust_toolchain.claim(ctx);
40 let hvlite_repo = hvlite_repo.claim(ctx);
41 let gh_token = gh_token.claim(ctx);
42 move |rt| {
43 let hvlite_repo = rt.read(hvlite_repo);
44 let gh_token = rt.read(gh_token);
45 let rust_toolchain = rt.read(rust_toolchain);
46 let base_recipe = base_recipe.non_production_tag();
47 rt.sh.change_dir(hvlite_repo);
48 let mut cmd = if let Some(rust_toolchain) = &rust_toolchain {
49 flowey::shell_cmd!(rt, "rustup run {rust_toolchain} cargo")
50 } else {
51 flowey::shell_cmd!(rt, "cargo")
52 }
53 .args(["xflowey", "build-igvm", &base_recipe])
54 .arg("--install-missing-deps")
55 .env("I_HAVE_A_GOOD_REASON_TO_RUN_BUILD_IGVM_IN_CI", "true");
56 if let Some(gh_token) = gh_token {
57 cmd = cmd.env("GITHUB_TOKEN", gh_token);
58 }
59 cmd.run()?;
60 Ok(())
61 }
62 },
63 );
64
65 ctx.emit_side_effect_step([test_local], [done]);
66
67 Ok(())
68 }
69}