Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
782 changes: 509 additions & 273 deletions .github/workflows/openvmm-ci.yaml

Large diffs are not rendered by default.

782 changes: 509 additions & 273 deletions .github/workflows/openvmm-pr-release.yaml

Large diffs are not rendered by default.

907 changes: 572 additions & 335 deletions .github/workflows/openvmm-pr.yaml

Large diffs are not rendered by default.

25 changes: 21 additions & 4 deletions flowey/flowey_hvlite/src/pipelines/checkin_gates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -834,13 +834,19 @@ impl IntoPipeline for CheckinGatesCli {
.clone()
.finish()
.map_err(|missing| {
anyhow::anyhow!("missing required windows-tdx vmm_tests artifact: {missing}")
anyhow::anyhow!("missing required windows-intel-tdx vmm_tests artifact: {missing}")
})?;
let vmm_tests_artifacts_windows_amd_x86 = vmm_tests_artifacts_windows_x86
.clone()
.finish()
.map_err(|missing| {
anyhow::anyhow!("missing required windows-amd vmm_tests artifact: {missing}")
})?;
let vmm_tests_artifacts_windows_amd_snp_x86 = vmm_tests_artifacts_windows_x86
.finish()
.map_err(|missing| {
anyhow::anyhow!("missing required windows-amd-snp vmm_tests artifact: {missing}")
})?;
let vmm_tests_artifacts_linux_x86 =
vmm_tests_artifacts_linux_x86.finish().map_err(|missing| {
anyhow::anyhow!("missing required linux vmm_tests artifact: {missing}")
Expand All @@ -864,9 +870,10 @@ impl IntoPipeline for CheckinGatesCli {
}

// standard VM-based CI machines should be able to run all tests except
// those that require special hardware features (tdx) or need to be run
// on a baremetal host (hyper-v vbs doesn't seem to work nested)
let standard_filter = "all() & !test(tdx) & !(test(vbs) & test(hyperv))".to_string();
// those that require special hardware features (tdx/snp) or need to be
// run on a baremetal host (hyper-v vbs doesn't seem to work nested)
let standard_filter =
"all() & !test(tdx) & !test(snp) & !(test(vbs) & test(hyperv))".to_string();
let standard_x64_test_artifacts = vec![
KnownTestArtifacts::FreeBsd13_2X64Vhd,
KnownTestArtifacts::FreeBsd13_2X64Iso,
Expand Down Expand Up @@ -916,6 +923,16 @@ impl IntoPipeline for CheckinGatesCli {
nextest_filter_expr: standard_filter.clone(),
test_artifacts: standard_x64_test_artifacts.clone(),
},
VmmTestJobParams {
platform: FlowPlatform::Windows,
arch: FlowArch::X86_64,
gh_pool: crate::pipelines_shared::gh_pools::windows_snp_self_hosted_baremetal(),
label: "x64-windows-amd-snp",
target: CommonTriple::X86_64_WINDOWS_MSVC,
resolve_vmm_tests_artifacts: vmm_tests_artifacts_windows_amd_snp_x86,
nextest_filter_expr: "test(snp)".to_string(),
test_artifacts: vec![KnownTestArtifacts::Gen2WindowsDataCenterCore2025X64Vhd],
},
VmmTestJobParams {
platform: FlowPlatform::Linux(FlowPlatformLinuxDistro::Ubuntu),
arch: FlowArch::X86_64,
Expand Down
2 changes: 1 addition & 1 deletion flowey/flowey_hvlite/src/pipelines/vmm_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ pub struct VmmTestsCli {
///
/// Available flags with default values:
///
/// `-tdx,-hyperv_vbs,+windows,+ubuntu,+freebsd,+linux,+openhcl,+openvmm,+hyperv,+uefi,+pcat,+tmk,+guest_test_uefi`
/// `-tdx,-snp,-hyperv_vbs,+windows,+ubuntu,+freebsd,+linux,+openhcl,+openvmm,+hyperv,+uefi,+pcat,+tmk,+guest_test_uefi`
// TODO: Automatically generate the list of possible flags
#[clap(long)]
flags: Option<VmmTestSelectionFlags>,
Expand Down
10 changes: 10 additions & 0 deletions flowey/flowey_hvlite/src/pipelines_shared/gh_pools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,13 @@ pub fn windows_tdx_self_hosted_baremetal() -> GhRunner {
"Baremetal".to_string(),
])
}

pub fn windows_snp_self_hosted_baremetal() -> GhRunner {
GhRunner::SelfHosted(vec![
"self-hosted".to_string(),
"Windows".to_string(),
"X64".to_string(),
"SNP".to_string(),
"Baremetal".to_string(),
])
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ macro_rules! define_vmm_test_selection_flags {

define_vmm_test_selection_flags! {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: add a comment here to go update the comment in vmm_tests ?

tdx: false,
snp: false,
hyperv_vbs: false,
windows: true,
ubuntu: true,
Expand Down Expand Up @@ -212,6 +213,7 @@ impl SimpleFlowNode for Node {
} => (filter, artifacts, build, deps),
VmmTestSelections::Flags(VmmTestSelectionFlags {
tdx,
snp,
hyperv_vbs,
windows,
mut ubuntu,
Expand Down Expand Up @@ -247,6 +249,9 @@ impl SimpleFlowNode for Node {
if !tdx {
filter.push_str(" & !test(tdx)");
}
if !snp {
filter.push_str(" & !test(snp)");
}
if !hyperv_vbs {
filter.push_str(" & !(test(vbs) & test(hyperv))");
}
Expand Down Expand Up @@ -298,7 +303,7 @@ impl SimpleFlowNode for Node {
CommonArch::X86_64 => {
let mut artifacts = Vec::new();

if windows && (tdx || hyperv_vbs) {
if windows && (tdx || snp || hyperv_vbs) {
artifacts.push(KnownTestArtifacts::Gen2WindowsDataCenterCore2025X64Vhd);
}
if ubuntu {
Expand Down Expand Up @@ -343,7 +348,7 @@ impl SimpleFlowNode for Node {
target_lexicon::OperatingSystem::Windows => VmmTestsDepSelections::Windows {
hyperv,
whp: openvmm,
hardware_isolation: tdx,
hardware_isolation: tdx || snp,
},
target_lexicon::OperatingSystem::Linux => VmmTestsDepSelections::Linux,
_ => unreachable!(),
Expand Down
15 changes: 10 additions & 5 deletions vmm_tests/vmm_tests/tests/tests/multiarch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,8 @@ async fn reboot(config: PetriVmBuilder<OpenVmmPetriBackend>) -> Result<(), anyho
hyperv_openhcl_uefi_x64(vhd(windows_datacenter_core_2022_x64)),
// hyperv_openhcl_uefi_x64(vhd(ubuntu_2204_server_x64)),
hyperv_openhcl_uefi_x64[vbs](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64))
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[snp](vhd(windows_datacenter_core_2025_x64))
)]
async fn boot_no_agent<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> anyhow::Result<()> {
let mut vm = config.run_without_agent().await?;
Expand Down Expand Up @@ -403,7 +404,8 @@ async fn boot_no_agent<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> anyhow:
hyperv_openhcl_uefi_x64(vhd(windows_datacenter_core_2022_x64)),
// hyperv_openhcl_uefi_x64(vhd(ubuntu_2204_server_x64)),
hyperv_openhcl_uefi_x64[vbs](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64))
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[snp](vhd(windows_datacenter_core_2025_x64))
)]
async fn boot_no_agent_heavy<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> anyhow::Result<()> {
let is_openhcl = config.is_openhcl();
Expand All @@ -429,7 +431,8 @@ async fn boot_no_agent_heavy<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> a
// Test for vmbus relay
// TODO: VBS isolation was failing and other targets too
#[vmm_test(
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64))
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[snp](vhd(windows_datacenter_core_2025_x64))
)]
#[cfg_attr(not(windows), expect(dead_code))]
async fn vmbus_relay<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> anyhow::Result<()> {
Expand All @@ -443,7 +446,8 @@ async fn vmbus_relay<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> anyhow::R
// Test for vmbus relay
// TODO: VBS isolation was failing and other targets too
#[vmm_test(
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64))
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[snp](vhd(windows_datacenter_core_2025_x64))
)]
#[cfg_attr(not(windows), expect(dead_code))]
async fn vmbus_relay_heavy<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> anyhow::Result<()> {
Expand All @@ -466,7 +470,8 @@ async fn vmbus_relay_heavy<T: PetriVmmBackend>(config: PetriVmBuilder<T>) -> any
openvmm_openhcl_uefi_x64[vbs](vhd(windows_datacenter_core_2022_x64)),
openvmm_openhcl_uefi_x64[vbs](vhd(ubuntu_2204_server_x64)),
hyperv_openhcl_uefi_x64[vbs](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64))
hyperv_openhcl_uefi_x64[tdx](vhd(windows_datacenter_core_2025_x64)),
hyperv_openhcl_uefi_x64[snp](vhd(windows_datacenter_core_2025_x64))
)]
async fn boot_no_agent_single_proc<T: PetriVmmBackend>(
config: PetriVmBuilder<T>,
Expand Down