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