From 2c67f00c4679f6c172b3603c4d9f30a4be0b0a8a Mon Sep 17 00:00:00 2001 From: Justus Camp Date: Tue, 11 Nov 2025 12:29:46 -0800 Subject: [PATCH] add ability to use local openvmm_deps --- .github/workflows/openvmm-ci.yaml | 20 +-- .github/workflows/openvmm-pr-release.yaml | 20 +-- .github/workflows/openvmm-pr.yaml | 24 +-- .../flowey_hvlite/src/pipelines/build_docs.rs | 2 +- .../flowey_hvlite/src/pipelines/build_igvm.rs | 170 ++++++++++-------- .../src/pipelines/checkin_gates.rs | 2 +- .../pipelines/custom_vmfirmwareigvm_dll.rs | 2 +- flowey/flowey_hvlite/src/pipelines/mod.rs | 2 +- .../src/pipelines/restore_packages.rs | 2 +- .../flowey_hvlite/src/pipelines/vmm_tests.rs | 2 +- .../flowey_lib_hvlite/src/_jobs/cfg_common.rs | 2 +- .../src/_jobs/cfg_versions.rs | 44 ++++- .../src/build_openhcl_igvm_from_recipe.rs | 8 +- .../src/build_openhcl_initrd.rs | 8 +- ...nit_openvmm_magicpath_linux_test_kernel.rs | 8 +- .../init_openvmm_magicpath_openhcl_sysroot.rs | 6 +- .../src/init_vmm_tests_env.rs | 8 +- flowey/flowey_lib_hvlite/src/lib.rs | 2 +- ...penvmm_deps.rs => resolve_openvmm_deps.rs} | 69 ++++++- 19 files changed, 264 insertions(+), 137 deletions(-) rename flowey/flowey_lib_hvlite/src/{download_openvmm_deps.rs => resolve_openvmm_deps.rs} (71%) diff --git a/.github/workflows/openvmm-ci.yaml b/.github/workflows/openvmm-ci.yaml index 8e2c335fc1..fde51c3573 100644 --- a/.github/workflows/openvmm-ci.yaml +++ b/.github/workflows/openvmm-ci.yaml @@ -999,7 +999,7 @@ jobs: flowey e 12 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 12 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 12 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: flowey e 12 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -1762,7 +1762,7 @@ jobs: flowey e 15 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 15 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 15 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 15 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -2048,7 +2048,7 @@ jobs: flowey.exe e 16 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 16 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 16 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 16 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2326,7 +2326,7 @@ jobs: flowey.exe e 17 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 17 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 17 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 17 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2607,7 +2607,7 @@ jobs: flowey.exe e 18 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 18 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 18 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 18 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2885,7 +2885,7 @@ jobs: flowey.exe e 19 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 19 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 19 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 19 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -3373,7 +3373,7 @@ jobs: flowey e 20 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 20 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 20 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey e 20 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -3697,7 +3697,7 @@ jobs: flowey.exe e 21 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 21 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 21 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (aarch64) run: flowey.exe e 21 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -5609,7 +5609,7 @@ jobs: flowey e 8 flowey_lib_hvlite::run_cargo_build 3 shell: bash - name: unpack openvmm-deps archive - run: flowey e 8 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 8 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 8 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -5987,7 +5987,7 @@ jobs: flowey e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 30 shell: bash - name: unpack openvmm-deps archive - run: flowey e 9 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 9 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: |- diff --git a/.github/workflows/openvmm-pr-release.yaml b/.github/workflows/openvmm-pr-release.yaml index 950d7877b1..fa7a59eb85 100644 --- a/.github/workflows/openvmm-pr-release.yaml +++ b/.github/workflows/openvmm-pr-release.yaml @@ -1008,7 +1008,7 @@ jobs: flowey e 12 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 12 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 12 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: flowey e 12 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -1771,7 +1771,7 @@ jobs: flowey e 15 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 15 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 15 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 15 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -2057,7 +2057,7 @@ jobs: flowey.exe e 16 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 16 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 16 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 16 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2335,7 +2335,7 @@ jobs: flowey.exe e 17 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 17 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 17 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 17 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2616,7 +2616,7 @@ jobs: flowey.exe e 18 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 18 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 18 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 18 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2894,7 +2894,7 @@ jobs: flowey.exe e 19 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 19 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 19 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 19 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -3382,7 +3382,7 @@ jobs: flowey e 20 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 20 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 20 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey e 20 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -3706,7 +3706,7 @@ jobs: flowey.exe e 21 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 21 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 21 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (aarch64) run: flowey.exe e 21 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -5616,7 +5616,7 @@ jobs: flowey e 8 flowey_lib_hvlite::run_cargo_build 3 shell: bash - name: unpack openvmm-deps archive - run: flowey e 8 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 8 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 8 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -5970,7 +5970,7 @@ jobs: flowey e 9 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 30 shell: bash - name: unpack openvmm-deps archive - run: flowey e 9 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 9 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: |- diff --git a/.github/workflows/openvmm-pr.yaml b/.github/workflows/openvmm-pr.yaml index 5c7fec2e06..faad662d84 100644 --- a/.github/workflows/openvmm-pr.yaml +++ b/.github/workflows/openvmm-pr.yaml @@ -546,7 +546,7 @@ jobs: flowey e 10 flowey_lib_hvlite::build_openhcl_igvm_from_recipe 30 shell: bash - name: unpack openvmm-deps archive - run: flowey e 10 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 10 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: |- @@ -917,7 +917,7 @@ jobs: flowey e 11 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 11 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 11 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: flowey e 11 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -1671,7 +1671,7 @@ jobs: flowey e 14 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 14 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 14 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract X64 sysroot.tar.gz run: flowey e 14 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -2425,7 +2425,7 @@ jobs: flowey e 17 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 17 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 17 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 17 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -2711,7 +2711,7 @@ jobs: flowey.exe e 18 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 18 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 18 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 18 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -2989,7 +2989,7 @@ jobs: flowey.exe e 19 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 19 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 19 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 19 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -3484,7 +3484,7 @@ jobs: flowey.exe e 20 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 20 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 20 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 20 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -3762,7 +3762,7 @@ jobs: flowey.exe e 21 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 21 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 21 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey.exe e 21 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -4036,7 +4036,7 @@ jobs: flowey e 22 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 22 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 22 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (x64) run: flowey e 22 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -4360,7 +4360,7 @@ jobs: flowey.exe e 23 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey.exe e 23 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey.exe e 23 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: unpack mu_msvm package (aarch64) run: flowey.exe e 23 flowey_lib_hvlite::download_uefi_mu_msvm 0 @@ -6332,7 +6332,7 @@ jobs: flowey e 8 flowey_lib_hvlite::run_cargo_build 3 shell: bash - name: unpack openvmm-deps archive - run: flowey e 8 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 8 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 8 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 @@ -6628,7 +6628,7 @@ jobs: flowey e 9 flowey_lib_common::download_gh_release 1 shell: bash - name: unpack openvmm-deps archive - run: flowey e 9 flowey_lib_hvlite::download_openvmm_deps 0 + run: flowey e 9 flowey_lib_hvlite::resolve_openvmm_deps 0 shell: bash - name: extract Aarch64 sysroot.tar.gz run: flowey e 9 flowey_lib_hvlite::init_openvmm_magicpath_openhcl_sysroot 0 diff --git a/flowey/flowey_hvlite/src/pipelines/build_docs.rs b/flowey/flowey_hvlite/src/pipelines/build_docs.rs index 7d6ccdec7e..ee37fdb56d 100644 --- a/flowey/flowey_hvlite/src/pipelines/build_docs.rs +++ b/flowey/flowey_hvlite/src/pipelines/build_docs.rs @@ -89,7 +89,7 @@ impl IntoPipeline for BuildDocsCli { pipeline.inject_all_jobs_with(move |job| { job.dep_on(&cfg_common_params) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request {}) + .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request::Download) .dep_on( |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { hvlite_repo_source: openvmm_repo_source.clone(), diff --git a/flowey/flowey_hvlite/src/pipelines/build_igvm.rs b/flowey/flowey_hvlite/src/pipelines/build_igvm.rs index 1d65300406..bdf0df6e75 100644 --- a/flowey/flowey_hvlite/src/pipelines/build_igvm.rs +++ b/flowey/flowey_hvlite/src/pipelines/build_igvm.rs @@ -5,6 +5,7 @@ use flowey::node::prelude::ReadVar; use flowey::pipeline::prelude::*; +use flowey_lib_hvlite::_jobs::cfg_versions::LocalDependencyRequest; use flowey_lib_hvlite::build_openhcl_igvm_from_recipe::OpenhclIgvmRecipe; use flowey_lib_hvlite::build_openhcl_igvm_from_recipe::OpenhclKernelPackage; use flowey_lib_hvlite::build_openvmm_hcl::MaxTraceLevel; @@ -175,6 +176,18 @@ pub struct BuildIgvmCliCustomizations { /// to `trace` for debug builds and `debug` for release builds. #[clap(long)] pub max_trace_level: Option, + + /// (experimental) Only use local dependencies to build. Keeps flowey from + /// downloading any dependencies from the internet. + #[clap(long, requires_all = ["custom_openvmm_deps"])] + pub use_local_deps: bool, + + /// Use a custom openvmm_deps directory. + /// + /// Expects a parent directory with aarch64 and x64 subdirectories + /// containing an openvmm_deps release for each architecture. + #[clap(long)] + pub custom_openvmm_deps: Option, } #[derive(clap::ValueEnum, Copy, Clone, PartialEq, Eq, Debug)] @@ -294,6 +307,8 @@ impl IntoPipeline for BuildIgvmCli { custom_sidecar, mut custom_extra_rootfs, max_trace_level, + custom_openvmm_deps, + use_local_deps, }, } = self; @@ -305,80 +320,91 @@ impl IntoPipeline for BuildIgvmCli { let (pub_out_dir, _) = pipeline.new_artifact("build-igvm"); - pipeline - .new_job( - FlowPlatform::host(backend_hint), - FlowArch::host(backend_hint), - "build-igvm", - ) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request {}) - .dep_on( - |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { - hvlite_repo_source: openvmm_repo, - }, - ) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_common::Params { - local_only: Some(flowey_lib_hvlite::_jobs::cfg_common::LocalOnlyParams { - interactive: true, - auto_install: install_missing_deps, - force_nuget_mono: false, // no oss nuget packages - external_nuget_auth: false, - ignore_rust_version: true, - }), - verbose: ReadVar::from_static(verbose), - locked, - deny_warnings: false, - }) - .dep_on(|ctx| flowey_lib_hvlite::_jobs::local_build_igvm::Params { - artifact_dir: ctx.publish_artifact(pub_out_dir), - done: ctx.new_done_handle(), - - base_recipe: match recipe { - OpenhclRecipeCli::X64 => OpenhclIgvmRecipe::X64, - OpenhclRecipeCli::X64Devkern => OpenhclIgvmRecipe::X64Devkern, - OpenhclRecipeCli::X64TestLinuxDirect => OpenhclIgvmRecipe::X64TestLinuxDirect, - OpenhclRecipeCli::X64TestLinuxDirectDevkern => { - OpenhclIgvmRecipe::X64TestLinuxDirectDevkern - } - OpenhclRecipeCli::X64Cvm => OpenhclIgvmRecipe::X64Cvm, - OpenhclRecipeCli::X64CvmDevkern => OpenhclIgvmRecipe::X64CvmDevkern, - OpenhclRecipeCli::Aarch64 => OpenhclIgvmRecipe::Aarch64, - OpenhclRecipeCli::Aarch64Devkern => OpenhclIgvmRecipe::Aarch64Devkern, - }, - release, - release_cfg, + let mut job = pipeline.new_job( + FlowPlatform::host(backend_hint), + FlowArch::host(backend_hint), + "build-igvm", + ); - customizations: flowey_lib_hvlite::_jobs::local_build_igvm::Customizations { - build_label, - override_arch: override_arch.map(|a| match a { - BuildIgvmArch::X86_64 => CommonArch::X86_64, - BuildIgvmArch::Aarch64 => CommonArch::Aarch64, - }), - with_perf_tools, - with_debuginfo, - override_kernel_pkg: override_kernel_pkg.map(|p| match p { - KernelPackageKindCli::Main => OpenhclKernelPackage::Main, - KernelPackageKindCli::Cvm => OpenhclKernelPackage::Cvm, - KernelPackageKindCli::Dev => OpenhclKernelPackage::Dev, - KernelPackageKindCli::CvmDev => OpenhclKernelPackage::CvmDev, - }), - with_sidecar, - custom_extra_rootfs, - override_openvmm_hcl_feature, - custom_sidecar, - override_manifest, - override_max_trace_level: max_trace_level.map(Into::into), - custom_openvmm_hcl, - custom_openhcl_boot, - custom_uefi, - custom_kernel, - custom_kernel_modules, - custom_vtl0_kernel, - custom_layer, - custom_directory, - }, + job = if use_local_deps { + job.dep_on(|_| { + flowey_lib_hvlite::_jobs::cfg_versions::Request::Local(LocalDependencyRequest { + openvmm_deps: custom_openvmm_deps + .clone() + .expect("must specify openvmm deps path to use local deps"), + }) }) - .finish(); + } else { + job.dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request::Download) + }; + + job.dep_on( + |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { + hvlite_repo_source: openvmm_repo, + }, + ) + .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_common::Params { + local_only: Some(flowey_lib_hvlite::_jobs::cfg_common::LocalOnlyParams { + interactive: true, + auto_install: install_missing_deps, + force_nuget_mono: false, // no oss nuget packages + external_nuget_auth: false, + ignore_rust_version: true, + }), + verbose: ReadVar::from_static(verbose), + locked, + deny_warnings: false, + }) + .dep_on(|ctx| flowey_lib_hvlite::_jobs::local_build_igvm::Params { + artifact_dir: ctx.publish_artifact(pub_out_dir), + done: ctx.new_done_handle(), + + base_recipe: match recipe { + OpenhclRecipeCli::X64 => OpenhclIgvmRecipe::X64, + OpenhclRecipeCli::X64Devkern => OpenhclIgvmRecipe::X64Devkern, + OpenhclRecipeCli::X64TestLinuxDirect => OpenhclIgvmRecipe::X64TestLinuxDirect, + OpenhclRecipeCli::X64TestLinuxDirectDevkern => { + OpenhclIgvmRecipe::X64TestLinuxDirectDevkern + } + OpenhclRecipeCli::X64Cvm => OpenhclIgvmRecipe::X64Cvm, + OpenhclRecipeCli::X64CvmDevkern => OpenhclIgvmRecipe::X64CvmDevkern, + OpenhclRecipeCli::Aarch64 => OpenhclIgvmRecipe::Aarch64, + OpenhclRecipeCli::Aarch64Devkern => OpenhclIgvmRecipe::Aarch64Devkern, + }, + release, + release_cfg, + + customizations: flowey_lib_hvlite::_jobs::local_build_igvm::Customizations { + build_label, + override_arch: override_arch.map(|a| match a { + BuildIgvmArch::X86_64 => CommonArch::X86_64, + BuildIgvmArch::Aarch64 => CommonArch::Aarch64, + }), + with_perf_tools, + with_debuginfo, + override_kernel_pkg: override_kernel_pkg.map(|p| match p { + KernelPackageKindCli::Main => OpenhclKernelPackage::Main, + KernelPackageKindCli::Cvm => OpenhclKernelPackage::Cvm, + KernelPackageKindCli::Dev => OpenhclKernelPackage::Dev, + KernelPackageKindCli::CvmDev => OpenhclKernelPackage::CvmDev, + }), + with_sidecar, + custom_extra_rootfs, + override_openvmm_hcl_feature, + custom_sidecar, + override_manifest, + override_max_trace_level: max_trace_level.map(Into::into), + custom_openvmm_hcl, + custom_openhcl_boot, + custom_uefi, + custom_kernel, + custom_kernel_modules, + custom_vtl0_kernel, + custom_layer, + custom_directory, + }, + }) + .finish(); Ok(pipeline) } diff --git a/flowey/flowey_hvlite/src/pipelines/checkin_gates.rs b/flowey/flowey_hvlite/src/pipelines/checkin_gates.rs index 7c9796c045..22fc5b3193 100644 --- a/flowey/flowey_hvlite/src/pipelines/checkin_gates.rs +++ b/flowey/flowey_hvlite/src/pipelines/checkin_gates.rs @@ -123,7 +123,7 @@ impl IntoPipeline for CheckinGatesCli { pipeline.inject_all_jobs_with(move |job| { let mut job = job .dep_on(&cfg_common_params) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request {}) + .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request::Download) .dep_on( |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { hvlite_repo_source: openvmm_repo_source.clone(), diff --git a/flowey/flowey_hvlite/src/pipelines/custom_vmfirmwareigvm_dll.rs b/flowey/flowey_hvlite/src/pipelines/custom_vmfirmwareigvm_dll.rs index 2781b404c2..15288cf221 100644 --- a/flowey/flowey_hvlite/src/pipelines/custom_vmfirmwareigvm_dll.rs +++ b/flowey/flowey_hvlite/src/pipelines/custom_vmfirmwareigvm_dll.rs @@ -68,7 +68,7 @@ impl IntoPipeline for CustomVmfirmwareigvmDllCli { FlowArch::host(backend_hint), "custom-vmfirmwareigvm-dll", ) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request {}) + .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request::Download) .dep_on( |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { hvlite_repo_source: openvmm_repo, diff --git a/flowey/flowey_hvlite/src/pipelines/mod.rs b/flowey/flowey_hvlite/src/pipelines/mod.rs index 4cf48a3036..54865221e2 100644 --- a/flowey/flowey_hvlite/src/pipelines/mod.rs +++ b/flowey/flowey_hvlite/src/pipelines/mod.rs @@ -13,7 +13,7 @@ pub mod restore_packages; pub mod vmm_tests; #[derive(clap::Subcommand)] -#[cfg_attr(windows, expect(clippy::large_enum_variant))] +#[expect(clippy::large_enum_variant)] pub enum OpenvmmPipelines { /// Alias for root-level `regen` command. // DEVNOTE: this enables the useful `cargo xflowey regen` alias diff --git a/flowey/flowey_hvlite/src/pipelines/restore_packages.rs b/flowey/flowey_hvlite/src/pipelines/restore_packages.rs index 7c929e2f8f..57a6c164e5 100644 --- a/flowey/flowey_hvlite/src/pipelines/restore_packages.rs +++ b/flowey/flowey_hvlite/src/pipelines/restore_packages.rs @@ -28,7 +28,7 @@ impl IntoPipeline for RestorePackagesCli { FlowArch::host(backend_hint), "restore packages", ) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request {}) + .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request::Download) .dep_on( |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { hvlite_repo_source: openvmm_repo, diff --git a/flowey/flowey_hvlite/src/pipelines/vmm_tests.rs b/flowey/flowey_hvlite/src/pipelines/vmm_tests.rs index 8175fff573..0660e57ec6 100644 --- a/flowey/flowey_hvlite/src/pipelines/vmm_tests.rs +++ b/flowey/flowey_hvlite/src/pipelines/vmm_tests.rs @@ -135,7 +135,7 @@ impl IntoPipeline for VmmTestsCli { FlowArch::host(backend_hint), "build vmm test dependencies", ) - .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request {}) + .dep_on(|_| flowey_lib_hvlite::_jobs::cfg_versions::Request::Download) .dep_on( |_| flowey_lib_hvlite::_jobs::cfg_hvlite_reposource::Params { hvlite_repo_source: openvmm_repo.clone(), diff --git a/flowey/flowey_lib_hvlite/src/_jobs/cfg_common.rs b/flowey/flowey_lib_hvlite/src/_jobs/cfg_common.rs index 4af63a27f4..5db9c32c2f 100644 --- a/flowey/flowey_lib_hvlite/src/_jobs/cfg_common.rs +++ b/flowey/flowey_lib_hvlite/src/_jobs/cfg_common.rs @@ -43,7 +43,7 @@ impl SimpleFlowNode for Node { fn imports(ctx: &mut ImportCtx<'_>) { ctx.import::(); - ctx.import::(); + ctx.import::(); ctx.import::(); ctx.import::(); ctx.import::(); diff --git a/flowey/flowey_lib_hvlite/src/_jobs/cfg_versions.rs b/flowey/flowey_lib_hvlite/src/_jobs/cfg_versions.rs index 3f4103ecee..f1364b23aa 100644 --- a/flowey/flowey_lib_hvlite/src/_jobs/cfg_versions.rs +++ b/flowey/flowey_lib_hvlite/src/_jobs/cfg_versions.rs @@ -33,8 +33,16 @@ pub const OPENHCL_KERNEL_STABLE_VERSION: &str = "6.12.52.2"; pub const OPENVMM_DEPS: &str = "0.1.0-20250403.3"; pub const PROTOC: &str = "27.1"; +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct LocalDependencyRequest { + pub openvmm_deps: PathBuf, +} + flowey_request! { - pub struct Request {} + pub enum Request { + Download, + Local(LocalDependencyRequest), + } } new_flow_node!(struct Node); @@ -45,7 +53,7 @@ impl FlowNode for Node { fn imports(ctx: &mut ImportCtx<'_>) { ctx.import::(); ctx.import::(); - ctx.import::(); + ctx.import::(); ctx.import::(); ctx.import::(); ctx.import::(); @@ -61,12 +69,40 @@ impl FlowNode for Node { } #[rustfmt::skip] - fn emit(_requests: Vec, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> { + fn emit(requests: Vec, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> { + let mut has_download_requests = false; + let mut has_local_requests = false; + let mut local_openvmm_deps: Option = None; + + for req in requests { + match req { + Request::Download => { + has_download_requests = true; + } + Request::Local(local_req) => { + has_local_requests = true; + same_across_all_reqs("OpenvmmDepsPath", &mut local_openvmm_deps, local_req.openvmm_deps)?; + } + } + } + + if has_download_requests && has_local_requests { + anyhow::bail!("cannot mix Download and Local requests"); + } + + if has_local_requests { + if let Some(openvmm_deps_path) = local_openvmm_deps { + ctx.req(crate::resolve_openvmm_deps::Request::LocalPath(openvmm_deps_path)); + } + + anyhow::bail!("using local dependencies not yet fully implemented"); + } + ctx.req(crate::download_openhcl_kernel_package::Request::Version(OpenhclKernelPackageKind::Dev, OPENHCL_KERNEL_DEV_VERSION.into())); ctx.req(crate::download_openhcl_kernel_package::Request::Version(OpenhclKernelPackageKind::Main, OPENHCL_KERNEL_STABLE_VERSION.into())); ctx.req(crate::download_openhcl_kernel_package::Request::Version(OpenhclKernelPackageKind::Cvm, OPENHCL_KERNEL_STABLE_VERSION.into())); ctx.req(crate::download_openhcl_kernel_package::Request::Version(OpenhclKernelPackageKind::CvmDev, OPENHCL_KERNEL_DEV_VERSION.into())); - ctx.req(crate::download_openvmm_deps::Request::Version(OPENVMM_DEPS.into())); + ctx.req(crate::resolve_openvmm_deps::Request::Version(OPENVMM_DEPS.into())); ctx.req(crate::download_uefi_mu_msvm::Request::Version(MU_MSVM.into())); ctx.req(flowey_lib_common::download_azcopy::Request::Version(AZCOPY.into())); ctx.req(flowey_lib_common::download_cargo_fuzz::Request::Version(FUZZ.into())); diff --git a/flowey/flowey_lib_hvlite/src/build_openhcl_igvm_from_recipe.rs b/flowey/flowey_lib_hvlite/src/build_openhcl_igvm_from_recipe.rs index af23a7025e..a28c0d0c79 100644 --- a/flowey/flowey_lib_hvlite/src/build_openhcl_igvm_from_recipe.rs +++ b/flowey/flowey_lib_hvlite/src/build_openhcl_igvm_from_recipe.rs @@ -15,8 +15,8 @@ use crate::build_openvmm_hcl::OpenvmmHclBuildProfile; use crate::build_openvmm_hcl::OpenvmmHclFeature; use crate::download_openhcl_kernel_package::OpenhclKernelPackageArch; use crate::download_openhcl_kernel_package::OpenhclKernelPackageKind; -use crate::download_openvmm_deps::OpenvmmDepsArch; use crate::download_uefi_mu_msvm::MuMsvmArch; +use crate::resolve_openvmm_deps::OpenvmmDepsArch; use crate::run_cargo_build::BuildProfile; use crate::run_cargo_build::common::CommonArch; use crate::run_cargo_build::common::CommonPlatform; @@ -275,7 +275,7 @@ impl SimpleFlowNode for Node { ctx.import::(); ctx.import::(); ctx.import::(); - ctx.import::(); + ctx.import::(); ctx.import::(); ctx.import::(); ctx.import::(); @@ -394,7 +394,7 @@ impl SimpleFlowNode for Node { } else { match typ { Vtl0KernelType::Example => ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetLinuxTestKernel( + crate::resolve_openvmm_deps::Request::GetLinuxTestKernel( match arch { CommonArch::X86_64 => OpenvmmDepsArch::X86_64, CommonArch::Aarch64 => OpenvmmDepsArch::Aarch64, @@ -407,7 +407,7 @@ impl SimpleFlowNode for Node { }; let initrd = ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetLinuxTestInitrd( + crate::resolve_openvmm_deps::Request::GetLinuxTestInitrd( match arch { CommonArch::X86_64 => OpenvmmDepsArch::X86_64, CommonArch::Aarch64 => OpenvmmDepsArch::Aarch64, diff --git a/flowey/flowey_lib_hvlite/src/build_openhcl_initrd.rs b/flowey/flowey_lib_hvlite/src/build_openhcl_initrd.rs index 64f8069a3d..5ca31cc6b1 100644 --- a/flowey/flowey_lib_hvlite/src/build_openhcl_initrd.rs +++ b/flowey/flowey_lib_hvlite/src/build_openhcl_initrd.rs @@ -3,7 +3,7 @@ //! Wrapper around `update-rootfs.py` -use crate::download_openvmm_deps::OpenvmmDepsArch; +use crate::resolve_openvmm_deps::OpenvmmDepsArch; use crate::run_cargo_build::common::CommonArch; use flowey::node::prelude::*; use std::collections::BTreeMap; @@ -52,7 +52,7 @@ impl FlowNode for Node { type Request = Request; fn imports(ctx: &mut ImportCtx<'_>) { - ctx.import::(); + ctx.import::(); ctx.import::(); ctx.import::(); } @@ -102,11 +102,11 @@ impl FlowNode for Node { let interactive_dep = if interactive { ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetOpenhclCpioDbgrd(openvmm_deps_arch, v) + crate::resolve_openvmm_deps::Request::GetOpenhclCpioDbgrd(openvmm_deps_arch, v) }) } else { ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetOpenhclCpioShell(openvmm_deps_arch, v) + crate::resolve_openvmm_deps::Request::GetOpenhclCpioShell(openvmm_deps_arch, v) }) }; diff --git a/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_linux_test_kernel.rs b/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_linux_test_kernel.rs index 4659ebbcf6..ad1f1e7a1c 100644 --- a/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_linux_test_kernel.rs +++ b/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_linux_test_kernel.rs @@ -5,7 +5,7 @@ //! correct "magic directory" set by the project-level `[env]` table in //! `.cargo/config.toml` -use crate::download_openvmm_deps::OpenvmmDepsArch; +use crate::resolve_openvmm_deps::OpenvmmDepsArch; use flowey::node::prelude::*; use std::collections::BTreeMap; @@ -29,7 +29,7 @@ impl FlowNode for Node { fn imports(ctx: &mut ImportCtx<'_>) { ctx.import::(); - ctx.import::(); + ctx.import::(); } fn emit(requests: Vec, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> { @@ -51,10 +51,10 @@ impl FlowNode for Node { OpenvmmLinuxTestKernelArch::X64 => OpenvmmDepsArch::X86_64, }; let openvmm_linux_test_kernel = ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetLinuxTestKernel(openvmm_deps_arch, v) + crate::resolve_openvmm_deps::Request::GetLinuxTestKernel(openvmm_deps_arch, v) }); let openvmm_linux_test_initrd = ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetLinuxTestInitrd(openvmm_deps_arch, v) + crate::resolve_openvmm_deps::Request::GetLinuxTestInitrd(openvmm_deps_arch, v) }); ctx.emit_rust_step(format!("extract {arch:?} sysroot.tar.gz"), |ctx| { diff --git a/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_openhcl_sysroot.rs b/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_openhcl_sysroot.rs index 60efae3ddb..9ba08bb5b5 100644 --- a/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_openhcl_sysroot.rs +++ b/flowey/flowey_lib_hvlite/src/init_openvmm_magicpath_openhcl_sysroot.rs @@ -4,7 +4,7 @@ //! Ensure the OpenHCL sysroot is extracted into the correct "magic directory" //! set by the project-level `[env]` table in `.cargo/config.toml` -use crate::download_openvmm_deps::OpenvmmDepsArch; +use crate::resolve_openvmm_deps::OpenvmmDepsArch; use flowey::node::prelude::*; use std::collections::BTreeMap; @@ -28,7 +28,7 @@ impl FlowNode for Node { fn imports(ctx: &mut ImportCtx<'_>) { ctx.import::(); - ctx.import::(); + ctx.import::(); } fn emit(requests: Vec, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> { @@ -50,7 +50,7 @@ impl FlowNode for Node { for (arch, out_vars) in sysroot_arch { let openhcl_sysroot_tar_gz = ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetOpenhclSysroot( + crate::resolve_openvmm_deps::Request::GetOpenhclSysroot( match arch { OpenvmmSysrootArch::Aarch64 => OpenvmmDepsArch::Aarch64, OpenvmmSysrootArch::X64 => OpenvmmDepsArch::X86_64, diff --git a/flowey/flowey_lib_hvlite/src/init_vmm_tests_env.rs b/flowey/flowey_lib_hvlite/src/init_vmm_tests_env.rs index 97d0cee558..be74b998de 100644 --- a/flowey/flowey_lib_hvlite/src/init_vmm_tests_env.rs +++ b/flowey/flowey_lib_hvlite/src/init_vmm_tests_env.rs @@ -6,9 +6,9 @@ use crate::build_openhcl_igvm_from_recipe::OpenhclIgvmRecipe; use crate::build_tpm_guest_tests::TpmGuestTestsOutput; -use crate::download_openvmm_deps::OpenvmmDepsArch; use crate::download_release_igvm_files_from_gh::OpenhclReleaseVersion; use crate::download_uefi_mu_msvm::MuMsvmArch; +use crate::resolve_openvmm_deps::OpenvmmDepsArch; use flowey::node::prelude::*; use std::collections::BTreeMap; @@ -72,7 +72,7 @@ impl SimpleFlowNode for Node { type Request = Request; fn imports(ctx: &mut ImportCtx<'_>) { - ctx.import::(); + ctx.import::(); ctx.import::(); ctx.import::(); } @@ -106,10 +106,10 @@ impl SimpleFlowNode for Node { }; let test_linux_initrd = ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetLinuxTestInitrd(openvmm_deps_arch, v) + crate::resolve_openvmm_deps::Request::GetLinuxTestInitrd(openvmm_deps_arch, v) }); let test_linux_kernel = ctx.reqv(|v| { - crate::download_openvmm_deps::Request::GetLinuxTestKernel(openvmm_deps_arch, v) + crate::resolve_openvmm_deps::Request::GetLinuxTestKernel(openvmm_deps_arch, v) }); let mu_msvm_arch = match vmm_tests_target.architecture { diff --git a/flowey/flowey_lib_hvlite/src/lib.rs b/flowey/flowey_lib_hvlite/src/lib.rs index b1ddecbe91..83f469cbe2 100644 --- a/flowey/flowey_lib_hvlite/src/lib.rs +++ b/flowey/flowey_lib_hvlite/src/lib.rs @@ -35,7 +35,6 @@ pub mod build_vmgstool; pub mod build_xtask; pub mod cfg_openvmm_magicpath; pub mod download_openhcl_kernel_package; -pub mod download_openvmm_deps; pub mod download_openvmm_vmm_tests_artifacts; pub mod download_release_igvm_files_from_gh; pub mod download_uefi_mu_msvm; @@ -51,6 +50,7 @@ pub mod init_vmm_tests_env; pub mod install_git_credential_manager; pub mod install_openvmm_rust_build_essential; pub mod install_vmm_tests_deps; +pub mod resolve_openvmm_deps; pub mod run_cargo_build; pub mod run_cargo_nextest_run; pub mod run_igvmfilegen; diff --git a/flowey/flowey_lib_hvlite/src/download_openvmm_deps.rs b/flowey/flowey_lib_hvlite/src/resolve_openvmm_deps.rs similarity index 71% rename from flowey/flowey_lib_hvlite/src/download_openvmm_deps.rs rename to flowey/flowey_lib_hvlite/src/resolve_openvmm_deps.rs index b6cdbd8696..ddb2889667 100644 --- a/flowey/flowey_lib_hvlite/src/download_openvmm_deps.rs +++ b/flowey/flowey_lib_hvlite/src/resolve_openvmm_deps.rs @@ -14,6 +14,8 @@ pub enum OpenvmmDepsArch { flowey_request! { pub enum Request { + /// Use a locally downloaded openvmm-deps + LocalPath(PathBuf), /// Specify version of the github release to pull from Version(String), GetLinuxTestKernel(OpenvmmDepsArch, WriteVar), @@ -36,6 +38,7 @@ impl FlowNode for Node { fn emit(requests: Vec, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> { let mut version = None; + let mut local_path = None; let mut linux_test_kernel: BTreeMap<_, Vec<_>> = BTreeMap::new(); let mut linux_test_initrd: BTreeMap<_, Vec<_>> = BTreeMap::new(); let mut openhcl_cpio_dbgrd: BTreeMap<_, Vec<_>> = BTreeMap::new(); @@ -45,7 +48,7 @@ impl FlowNode for Node { for req in requests { match req { Request::Version(v) => same_across_all_reqs("Version", &mut version, v)?, - + Request::LocalPath(p) => same_across_all_reqs("LocalPath", &mut local_path, p)?, Request::GetLinuxTestKernel(arch, var) => { linux_test_kernel.entry(arch).or_default().push(var) } @@ -64,7 +67,13 @@ impl FlowNode for Node { } } - let version = version.ok_or(anyhow::anyhow!("Missing essential request: Version"))?; + if version.is_some() && local_path.is_some() { + anyhow::bail!("Cannot specify both Version and Path requests"); + } + + if version.is_none() && local_path.is_none() { + anyhow::bail!("Must specify a Version or Path request"); + } // -- end of req processing -- // @@ -77,6 +86,59 @@ impl FlowNode for Node { return Ok(()); } + if let Some(local_path) = local_path { + ctx.emit_rust_step("use local openvmm-deps", |ctx| { + let linux_test_kernel = linux_test_kernel.claim(ctx); + let linux_test_initrd = linux_test_initrd.claim(ctx); + let openhcl_cpio_dbgrd = openhcl_cpio_dbgrd.claim(ctx); + let openhcl_cpio_shell = openhcl_cpio_shell.claim(ctx); + let openhcl_sysroot = openhcl_sysroot.claim(ctx); + let local_path = local_path.clone(); + move |rt| { + // The local path assumes the provided path has an x64 and aarch64 subdirectory + // to avoid having to pass separate paths as arguments through multiple requests + let base_dir = move |arch| match arch { + OpenvmmDepsArch::X86_64 => local_path.join("x64"), + OpenvmmDepsArch::Aarch64 => local_path.join("aarch64"), + }; + + let kernel_file_name = |arch| match arch { + OpenvmmDepsArch::X86_64 => "vmlinux", + OpenvmmDepsArch::Aarch64 => "Image", + }; + + for (arch, vars) in linux_test_kernel { + let path = base_dir(arch).join(kernel_file_name(arch)); + rt.write_all(vars, &path) + } + + for (arch, vars) in linux_test_initrd { + let path = base_dir(arch).join("initrd"); + rt.write_all(vars, &path) + } + + for (arch, vars) in openhcl_cpio_dbgrd { + let path = base_dir(arch).join("dbgrd.cpio.gz"); + rt.write_all(vars, &path) + } + + for (arch, vars) in openhcl_cpio_shell { + let path = base_dir(arch).join("shell.cpio.gz"); + rt.write_all(vars, &path) + } + + for (arch, vars) in openhcl_sysroot { + let path = base_dir(arch).join("sysroot.tar.gz"); + rt.write_all(vars, &path) + } + + Ok(()) + } + }); + + return Ok(()); + } + let extract_tar_bz2_deps = flowey_lib_common::_util::extract::extract_tar_bz2_if_new_deps(ctx); @@ -86,6 +148,7 @@ impl FlowNode for Node { || openhcl_cpio_shell.contains_key(&OpenvmmDepsArch::X86_64) || openhcl_sysroot.contains_key(&OpenvmmDepsArch::X86_64) { + let version = version.clone().expect("local requests handled above"); Some( ctx.reqv(|v| flowey_lib_common::download_gh_release::Request { repo_owner: "microsoft".into(), @@ -107,6 +170,7 @@ impl FlowNode for Node { || openhcl_cpio_shell.contains_key(&OpenvmmDepsArch::Aarch64) || openhcl_sysroot.contains_key(&OpenvmmDepsArch::Aarch64) { + let version = version.clone().expect("local requests handled above"); Some( ctx.reqv(|v| flowey_lib_common::download_gh_release::Request { repo_owner: "microsoft".into(), @@ -131,6 +195,7 @@ impl FlowNode for Node { let openhcl_cpio_dbgrd = openhcl_cpio_dbgrd.claim(ctx); let openhcl_cpio_shell = openhcl_cpio_shell.claim(ctx); let openhcl_sysroot = openhcl_sysroot.claim(ctx); + let version = version.clone().expect("local requests handled above"); move |rt| { let extract_dir_x64 = openvmm_deps_tar_bz2_x64 .map(|file| {