flowey_lib_hvlite/
run_prep_steps.rs1use crate::build_prep_steps::PrepStepsOutput;
7use flowey::node::prelude::*;
8use std::collections::BTreeMap;
9
10flowey_request! {
11 pub struct Request {
12 pub prep_steps: ReadVar<PrepStepsOutput>,
14 pub env: ReadVar<BTreeMap<String, String>>,
16 pub done: WriteVar<SideEffect>,
18 }
19}
20
21new_simple_flow_node!(struct Node);
22
23impl SimpleFlowNode for Node {
24 type Request = Request;
25
26 fn imports(_ctx: &mut ImportCtx<'_>) {}
27
28 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
29 let Request {
30 prep_steps,
31 env,
32 done,
33 } = request;
34
35 ctx.emit_rust_step("running vmm_test prep_steps", |ctx| {
36 let prep_steps = prep_steps.claim(ctx);
37 let env = env.claim(ctx);
38 done.claim(ctx);
39 move |rt| {
40 let prep_steps = rt.read(prep_steps);
41 let env = rt.read(env);
42
43 #[cfg(windows)]
44 if !matches!(rt.backend(), FlowBackend::Local) {
45 let vms = powershell_builder::PowerShellBuilder::new()
48 .cmdlet("Get-VM")
49 .finish()
50 .build()
51 .output()?;
52 log::info!(
53 "removing any existing VMs: {}",
54 String::from_utf8_lossy(&vms.stdout)
55 );
56
57 powershell_builder::PowerShellBuilder::new()
58 .cmdlet("Get-VM")
59 .pipeline()
60 .cmdlet("Stop-VM")
61 .flag("TurnOff")
62 .finish()
63 .build()
64 .output()?;
65
66 powershell_builder::PowerShellBuilder::new()
67 .cmdlet("Get-VM")
68 .pipeline()
69 .cmdlet("Remove-VM")
70 .flag("Force")
71 .finish()
72 .build()
73 .output()?;
74 }
75
76 let sh = xshell::Shell::new()?;
77 let binary_path = match prep_steps {
78 PrepStepsOutput::WindowsBin { exe, .. } => exe,
79 PrepStepsOutput::LinuxBin { bin, .. } => bin,
80 };
81 xshell::cmd!(sh, "{binary_path}").envs(env).run()?;
82
83 Ok(())
84 }
85 });
86
87 Ok(())
88 }
89}