flowey_hvlite/pipelines/
mod.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use flowey::pipeline::prelude::*;
5use restore_packages::RestorePackagesCli;
6use vmm_tests::VmmTestsCli;
7
8pub mod build_docs;
9pub mod build_igvm;
10pub mod build_reproducible;
11pub mod checkin_gates;
12pub mod custom_vmfirmwareigvm_dll;
13pub mod restore_packages;
14pub mod vmm_tests;
15
16#[derive(clap::Subcommand)]
17#[expect(clippy::large_enum_variant)]
18pub enum OpenvmmPipelines {
19    /// Alias for root-level `regen` command.
20    // DEVNOTE: this enables the useful `cargo xflowey regen` alias
21    Regen {
22        #[arg(trailing_var_arg = true, allow_hyphen_values = true, hide = true)]
23        args: Vec<String>,
24    },
25
26    BuildIgvm(build_igvm::BuildIgvmCli),
27    BuildReproducible(build_reproducible::BuildReproducibleCli),
28    CustomVmfirmwareigvmDll(custom_vmfirmwareigvm_dll::CustomVmfirmwareigvmDllCli),
29
30    /// Flowey pipelines primarily designed to run in CI.
31    #[clap(subcommand)]
32    Ci(OpenvmmPipelinesCi),
33
34    /// Install tools needed to build OpenVMM
35    RestorePackages(RestorePackagesCli),
36
37    /// Build and run VMM tests
38    VmmTests(VmmTestsCli),
39}
40
41#[derive(clap::Subcommand)]
42pub enum OpenvmmPipelinesCi {
43    CheckinGates(checkin_gates::CheckinGatesCli),
44    BuildDocs(build_docs::BuildDocsCli),
45}
46
47impl IntoPipeline for OpenvmmPipelines {
48    fn into_pipeline(self, pipeline_hint: PipelineBackendHint) -> anyhow::Result<Pipeline> {
49        match self {
50            OpenvmmPipelines::Regen { args } => {
51                let status = std::process::Command::new("cargo")
52                    .args(["run", "-p", "flowey_hvlite", "--", "regen"])
53                    .args(args)
54                    .spawn()?
55                    .wait()?;
56                std::process::exit(status.code().unwrap_or(-1));
57            }
58            OpenvmmPipelines::BuildIgvm(cmd) => cmd.into_pipeline(pipeline_hint),
59            OpenvmmPipelines::BuildReproducible(cmd) => cmd.into_pipeline(pipeline_hint),
60            OpenvmmPipelines::CustomVmfirmwareigvmDll(cmd) => cmd.into_pipeline(pipeline_hint),
61            OpenvmmPipelines::Ci(cmd) => match cmd {
62                OpenvmmPipelinesCi::CheckinGates(cmd) => cmd.into_pipeline(pipeline_hint),
63                OpenvmmPipelinesCi::BuildDocs(cmd) => cmd.into_pipeline(pipeline_hint),
64            },
65            OpenvmmPipelines::RestorePackages(cmd) => cmd.into_pipeline(pipeline_hint),
66            OpenvmmPipelines::VmmTests(cmd) => cmd.into_pipeline(pipeline_hint),
67        }
68    }
69}