Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
178 commits
Select commit Hold shift + click to select a range
5cc8d31
vmm: Revert "vmm: create memfd for private mappings"
rbradford May 18, 2026
1336d26
vm-migration: be explicit about commands
phip1611 May 15, 2026
b925a00
vmm: migration: better observe and log invalid states
phip1611 May 15, 2026
0de3ba7
vmm: Don't store the snapshot on the DeviceManager
rbradford May 19, 2026
6effdc2
vmm: remove redundant SocketStream overrides
amphi Apr 14, 2026
aacc763
vmm: remove AsRawFd trait for SocketStream
amphi Apr 14, 2026
e20f19f
vm-migration: client-side of a TLS connection
amphi Apr 14, 2026
b8cc358
vm-migration: server-side of a TLS connection
amphi Apr 14, 2026
a8e538e
vmm: add TLS streams to migration transport
amphi Apr 14, 2026
99bfc0b
vmm: accept migration connections over TLS
amphi Apr 14, 2026
93f4029
vmm: tighten migration URL validation
amphi Apr 15, 2026
96abfb4
vmm: add TLS API option to send migration call
amphi Apr 15, 2026
0111b16
vmm: add TLS API option to receive migration call
amphi Apr 15, 2026
9c064fd
vmm: encrypt migration data with TLS if configured
amphi Apr 15, 2026
b7cd61e
docs: document live migration TLS encryption
amphi Apr 24, 2026
1a14b83
docs: update README for gardenlinux Cloud Hypervisor
phip1611 Aug 15, 2025
696ef51
misc: adjust AGENTS.md for our fork
phip1611 Mar 30, 2026
e765e69
ci: enforce SAP commit style
phip1611 Oct 30, 2025
e84b16d
ci: remove irrelevant CI for this fork
phip1611 Apr 28, 2026
6440bd9
build: flake: init
phip1611 Jan 28, 2026
14803af
build: nix: add commit to version info
arctic-alpaca Apr 9, 2026
7e43a27
build: ci/nix: build cloud-hypervisor
phip1611 Jan 28, 2026
164f96f
build: cargo: add optimized-dev profile
phip1611 Aug 27, 2025
c62a95b
build: cargo: don't strip binary
phip1611 Dec 1, 2025
ca62d52
main: print build version and date on startup
phip1611 Mar 30, 2026
6d3ca5d
vmm: cpu: improve timeout handling in wait_until_signal_acknowledged()
phip1611 Mar 19, 2026
bdc95e3
vmm: increase logging level of precopy from debug -> info
phip1611 May 12, 2026
669ef2a
vmm: pci: rename pci_device_id -> device_id
phip1611 May 5, 2026
1ebc727
main: restore absolute timestamp behavior in logger
phip1611 May 12, 2026
0741bb9
misc: live-migration with virtio-net devices with network fds
phip1611 Jun 27, 2025
e9d7478
vmm: properly unset immediate_exit on -EINTR
phip1611 Sep 10, 2025
acee45a
vmm: vcpu: optimize lock usage
phip1611 Sep 11, 2025
d79dfb3
vmm: prerequisites for accessing KVM_RUN in the vCPU loop
phip1611 Apr 30, 2026
44f1547
vmm: fix kicking vCPU out of KVM_RUN from signal handler
phip1611 Sep 10, 2025
693cca0
vmm: temporarily make "resize" API call fail fast
phip1611 Sep 11, 2025
d13078d
vm-migration: mTLS -> TLS (make upstream compatible with our fork)
phip1611 May 4, 2026
c36d35f
vmm: add vCPU throttling (auto-converge) for pre-copy
phip1611 Jun 10, 2025
678dae0
vmm: console: add tcp option
hertrste Sep 11, 2025
cbcb7ba
vmm: serial: add Tcp enum entry
hertrste Sep 11, 2025
daf6be3
vmm: serial: rename CloneUnixStream -> CloneStream
hertrste Sep 11, 2025
cf11a27
vmm: serial: add serial tcp implementation
hertrste Sep 11, 2025
6cdae49
vmm: serial: implement writer combiner
hertrste Sep 16, 2025
1964430
vmm: config: allow additional file when mode TCP
hertrste Sep 17, 2025
bc4d117
vmm: serial: additional log to file
hertrste Sep 17, 2025
62d1dea
vmm: serial_manager: use TypeId trait for key type in FanoutWriter
hertrste Sep 29, 2025
354d410
vmm: api: receive_migration can get a tcp_serial_url
hertrste Oct 21, 2025
d2e0362
arch: x86_64: refactor SMBIOS helpers
Coffeeri Feb 9, 2026
651a5b8
vmm: plumb legacy SMBIOS config
Coffeeri Feb 9, 2026
6bbb2d3
vmm: platform: add structured SMBIOS config
Coffeeri Feb 9, 2026
928100b
vmm: deprecate legacy SMBIOS keys in API and CLI
Coffeeri Feb 9, 2026
dfe79f1
arch: smbios: add tests for table serialization
Coffeeri Feb 10, 2026
8800531
vmm: Allow to modify host numa settings
scholzp Feb 10, 2026
ed0ec02
vmm: migration: prepare EventFd for async migration events
phip1611 Nov 21, 2025
a244daa
vmm: migration: handle in dedicated thread (make async)
phip1611 Nov 21, 2025
b6cc817
vmm: better VM ownership handling in context of live migration
phip1611 Oct 30, 2025
4566932
vmm: api: temporarily make VmSendMigration call blocking again
phip1611 Oct 30, 2025
8656932
vmm: migration: fix missing resume() VM after failed live migration
phip1611 Feb 12, 2026
3feefee
vmm: migration: limit to running VMs only
phip1611 Feb 12, 2026
12e6e4a
vm-migration: prepare progress types for new API endpoint
phip1611 Jan 13, 2026
13833c1
vmm: add migration-progress API endpoint
phip1611 Jan 13, 2026
e208ec6
vmm: add migration-progress HTTP endpoint
phip1611 Jan 12, 2026
4f4891f
vmm: actually populate migration progress
phip1611 Jan 22, 2026
50a5464
ch-remote: add `migration-progress` command
phip1611 Feb 12, 2026
51aa60c
vmm: migration: switch to non-blocking SendMigration call
phip1611 Feb 12, 2026
4b00b26
ch-remote: wait for migration to finish by querying migration progress
phip1611 Feb 12, 2026
e098d47
vmm: api: less verbose log
phip1611 Feb 19, 2026
2036a14
devices: stop reset loops when vCPUs are paused
Coffeeri Feb 19, 2026
1f09252
devices: cmos: simplify pause/kill wait flags
Coffeeri Feb 19, 2026
1cf6c55
vmm: set timeouts on sockets used for live migrations
amphi Feb 12, 2026
f90d5e9
vmm: make aborted migrations return errors
amphi Feb 11, 2026
116f32b
vm-migration: send periodic keep alive messages during live migration
amphi Feb 12, 2026
fa613eb
vmm: return error if the migration sender never connects
amphi Feb 23, 2026
52c37f8
vmm: add context to MigrateSend-Error
amphi Feb 26, 2026
9d1a1da
vmm: return error if prefaulting fails
amphi Feb 26, 2026
20c39c6
vmm: migration receiver: report error when migration is aborted
amphi Mar 2, 2026
a177bd2
vmm: add context to MigrateReceive-Error
amphi Feb 27, 2026
0a463da
vmm: add post-migration event to VmSnapshot
Coffeeri Feb 17, 2026
a14fc60
vmm: postpone reset/exit during migration
Coffeeri Feb 17, 2026
4006c8d
vmm: migration: switch downtime on postponed event
Coffeeri Feb 17, 2026
bd4c841
vmm: streamline migration failure cleanup
phip1611 Feb 17, 2026
73a0a48
vmm: api: add VmCancelMigration action
phip1611 Feb 19, 2026
681581a
vmm: http api: add VmCancelMigration action
phip1611 Feb 19, 2026
0b28942
vmm: migration: add handle wrapper for MigrationWorker
phip1611 Feb 19, 2026
685643a
vmm: add try_resume_vm() helper
phip1611 Feb 27, 2026
9166bdd
vmm: migration: actually support cancellation
phip1611 Mar 2, 2026
4930f82
vmm: migration: early cancellation (add more checks)
phip1611 Mar 2, 2026
fb07603
vmm: migration cancellation: integrate into TCP threads
phip1611 Mar 5, 2026
3362de0
ch-remote: add cancel-migration
phip1611 Feb 19, 2026
35724a5
vmm: migration: properly print error chain on failure
phip1611 Mar 30, 2026
32bd431
vmm: defer guest exit during migration
Coffeeri Mar 9, 2026
a22515b
vmm: reduce API event verbosity
phip1611 Mar 13, 2026
918202d
vmm: keep virtio activation alive in migration
Coffeeri Mar 10, 2026
9cc4c60
vm-migration: speed up volatile read and write
amphi Mar 17, 2026
6bda68c
vm-migration: Add AsFd for KeepAliveStream
amphi Mar 17, 2026
0fd292a
vmm: differentiate timeouts by reader/writer, not sender/receiver
amphi Mar 17, 2026
033380c
vm-migration: move keep alive handling into the protocol
amphi Mar 17, 2026
f02512f
vm-migration: add KeepAlive status to response
amphi Mar 17, 2026
6c6fde8
vm-migration: make KeepAliveStream work for sender and receiver
amphi Mar 17, 2026
b633f5b
vmm: always use KeepAliveStream for main connection
amphi Mar 17, 2026
03e82e3
vmm: Use KeepAliveStream also for receiver
amphi Mar 17, 2026
d58d715
vmm: migration: longer accept timeout for receiver
phip1611 Apr 8, 2026
6eb9521
vmm: migration: improve error message on timeout
phip1611 Apr 8, 2026
c842979
vm-migration: fix UB in network parsing
arctic-alpaca Mar 23, 2026
037c120
vm-migration: stop sending abandon after error response
amphi Mar 25, 2026
2235655
vmm: add mechanism for post-migration announcements
amphi Jan 16, 2026
52c48bd
vmm: add internal post-migration announce action
amphi Mar 25, 2026
c1330a3
vmm: api: add API call for post migration announcements
amphi Mar 25, 2026
c26997f
net_util: refactor ctrl queue parsing
amphi Mar 31, 2026
7d37b6e
virtio-devices: net: refactor constructor state
amphi Mar 31, 2026
4bb8287
virtio-devices: net: report link up in config status
amphi Apr 7, 2026
d868be5
virtio-devices: net: support guest announce after migration
amphi Mar 31, 2026
1e86a8b
virtio-devices: net: add guest announce tests
amphi Mar 27, 2026
7e7cb6d
virtio-devices: net: fix guest announce compatibility
amphi Mar 31, 2026
749feec
virtio-devices: net: restore pending announce notifications
amphi Mar 31, 2026
f16238c
virtio-devices: net: invalidate stale announce retries
amphi Apr 1, 2026
616cf89
vmm: Enable AMX states prior to checking CPUID compatibility
olivereanderson Dec 9, 2025
f89213d
arch: Initial data structures for describing CPUID parameters
olivereanderson Dec 9, 2025
6c814d1
hypervisor: Implement common traits for HypervisorType and CpuVendor
olivereanderson Oct 7, 2025
b686db2
arch: CpuProfile data structures
olivereanderson Dec 9, 2025
c321c6a
misc: Make CPU profile part of various configs
olivereanderson Oct 7, 2025
b0a7a9b
arch: Apply CPU profile (if any) when generating common CPUID
olivereanderson Dec 9, 2025
b968302
arch: Include Skylake and Sapphire rapids CPU profiles
olivereanderson Dec 9, 2025
f5c4f2b
arch: CPUID definitions data structures
olivereanderson Dec 10, 2025
fc5b7cc
arch: Intel CPUID definitions
olivereanderson Dec 10, 2025
f126436
arch: KVM CPUID definitions
olivereanderson Dec 10, 2025
c6f5f78
arch: Improve CPUID incompatibility logging
olivereanderson Dec 10, 2025
4d9c8af
arch: CPU profile generation CLI
olivereanderson Dec 10, 2025
c58f500
arch: Change numeric serialization for CPU profiles
olivereanderson Feb 9, 2026
50c13fa
arch: Passthrough policies for mutable CPUID fields
olivereanderson Feb 6, 2026
4c4d955
arch: Update CPU profiles (passthrough mutable fields)
olivereanderson Feb 6, 2026
a2d229f
arch: Regenerate CPU profiles after updating the serialization format
olivereanderson Feb 13, 2026
757eae8
misc: move MSR retrieval to Hypervisor trait (KVM)
phip1611 Feb 18, 2026
18935ef
hypervisor: Add get_msr_based_features method
olivereanderson Jan 25, 2026
31b618c
hypervisor: Add get_msr_index_list method to the hypervisor trait
olivereanderson Feb 18, 2026
eda075d
misc: Don't expose MSR buffer directly through the hypervisor
olivereanderson Feb 20, 2026
9ad3645
hypervisor: msr_filter method on Vm trait
olivereanderson Feb 20, 2026
f5be558
arch: Disable UINTR state components
olivereanderson Feb 25, 2026
4d33e70
arch: Disable CET in CPUID for CPU profiles
olivereanderson Feb 26, 2026
f42f01e
arch: Change CPU profile policy for MCA
olivereanderson Mar 3, 2026
582ae93
arch: Change CPUID profile policy for WAITPKG
olivereanderson Feb 25, 2026
e964abb
arch: More Inherit for CPUID leaf 0x7.EDX
olivereanderson Mar 11, 2026
459355f
arch: Disable PKU and OSPKE for non-host CPU profiles
olivereanderson Mar 13, 2026
e4ca5af
arch: Change CPU profile generation tool
olivereanderson Jan 26, 2026
cd27b6d
arch: Lookup methods on CPUID definitions
olivereanderson Feb 17, 2026
369df10
arch: Add data structures for MSR definitions
olivereanderson Jan 7, 2026
77de6ff
arch: INTEL MSR-based feature definitions
olivereanderson Jan 7, 2026
8cdf184
arch: I32_ARCH_CAPABILITIES changes according to PR review
olivereanderson Mar 11, 2026
f393239
arch: Change policies for CR4_FIXED_I
olivereanderson Mar 13, 2026
35d81c2
arch: MSR compatibility checks
olivereanderson Jan 16, 2026
784219d
arch: Stricter MSR compatibility checks for IA32_ARCH_CAPABILITIES
olivereanderson Mar 11, 2026
3494df1
arch: Add a list of all Intel architectural MSRS
olivereanderson Feb 12, 2026
3cb07a7
arch: Address architectural msrs review
olivereanderson Mar 11, 2026
0355bed
arch: Include a list of non-architectural MSRs
olivereanderson Feb 13, 2026
8203200
arch: Add lists of KVM MSRS
olivereanderson Feb 13, 2026
9b0f3a5
arch: Add a list of HyperV MSRs
olivereanderson Mar 5, 2026
1611c7b
arch: Add required MSR update functionality
olivereanderson Jan 21, 2026
08b416b
arch: Deny MSR functionality
olivereanderson Feb 24, 2026
9589416
vmm: Apply MSR adjustments according to CPU profile (if any)
olivereanderson Jan 26, 2026
43cf47d
arch: Make the CPU profile generation tool MSR aware
olivereanderson Jan 26, 2026
4ecf665
arch: Use MSR aware profiles
olivereanderson Jan 29, 2026
e58b065
arch: Inherit policy for MCA
olivereanderson Mar 17, 2026
3fef033
arch: Permit IA32_MCG_CAP and IA32_MCG_STATUS
olivereanderson Mar 17, 2026
1637bad
arch: Regenerate CPU profiles
olivereanderson Mar 18, 2026
e260fdd
arch: FORDIB IA32_U_CET and IA32_S_CET in CPU Profiles
olivereanderson Mar 23, 2026
ae259e7
arch: Disable HDC state components for CPU profiles
olivereanderson Mar 24, 2026
0cd09a8
arch: Disable LBR state components
olivereanderson Mar 24, 2026
0268e18
arch: Disable HWP state components
olivereanderson Mar 24, 2026
1bb570e
arch: Disable PT state components
olivereanderson Mar 24, 2026
e986596
arch: Disable PASID state components
olivereanderson Mar 24, 2026
e7cb160
arch: Disable VM_ENTRY_HARDWARE_EXCEPTIONS for CPU profiles
olivereanderson Mar 24, 2026
b87cc40
arch: Forbid IA32_XSS for non-host CPU profiles
olivereanderson Mar 24, 2026
66d3038
arch: Clear LBR related bits in the VM-Exit and VM-Entry CTL MSRs
olivereanderson Mar 24, 2026
9367e67
docs: CPU Profile generation
olivereanderson Mar 23, 2026
2e0a642
build: flate2 Workspace dependency
olivereanderson Apr 10, 2026
b4293d6
arch: Code generation for CPU profiles
olivereanderson Apr 9, 2026
e566ed3
arch: Update cpu_profile.rs to include code generation from build.rs
olivereanderson Apr 10, 2026
fc6e510
docs: Update CPU profile generation developer documentation
olivereanderson Apr 10, 2026
e161b7f
arch: Deserialize CPU profiles in kebab-case
olivereanderson Apr 13, 2026
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
1 change: 1 addition & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
use flake
38 changes: 38 additions & 0 deletions .github/workflows/build_nix.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Cloud Hypervisor Build (Nix)
on: [push, pull_request, merge_group]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: cachix/install-nix-action@v31
# We restore Nix evaluation and Nix tarball cache, speeding up the CI.
# This does not cover any Nix artifacts from the Nix store.
- name: Restore Nix cache
uses: actions/cache@v5
with:
path: ~/.cache/nix
key: nix-cache-${{ github.job }}
# Nix binary cache
- uses: DeterminateSystems/magic-nix-cache-action@main
# Dedicated step to separate all the
# "copying path '/nix/store/...' from 'https://cache.nixos.org'."
# messages from the actual build output.
- name: Prepare Nix Store
run: nix develop --command bash -c "nix --version"
- name: Check Nix format
run: nix fmt -- --ci
- name: Check Nix Flake
run: nix flake check -L
- name: Build Cloud Hypervisor
run: |
nix build -L .#default
nix build -L .#cloud-hypervisor
272 changes: 0 additions & 272 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,44 +106,6 @@ jobs:
- name: Lint git commit messages
run: |
gitlint --commits "origin/$GITHUB_BASE_REF.."
lychee:
name: lychee
needs: [preflight]
if: needs.preflight.outputs.docs == 'true' || needs.preflight.outputs.full == 'true'
runs-on: ubuntu-latest
steps:
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Get changed files in PR
id: changed-files
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
with:
base_sha: ${{ github.event.pull_request.base.sha }}
- name: Verify Changed Files
run: |
set -eufo pipefail
echo "--- tj-actions/changed-files Outputs ---"
echo "any_changed: ${{ steps.changed-files.outputs.any_changed }}"
echo "all_changed_files: ${{ steps.changed-files.outputs.all_changed_files }}"
echo "added_files: ${{ steps.changed-files.outputs.added_files }}"
echo "modified_files: ${{ steps.changed-files.outputs.modified_files }}"
echo "deleted_files: ${{ steps.changed-files.outputs.deleted_files }}"
echo "renamed_files: ${{ steps.changed-files.outputs.renamed_files }}"
echo "----------------------------------------"
if [ -n "${{ steps.changed-files.outputs.all_changed_files }}" ]; then
echo "Detected changes: all_changed_files output is NOT empty."
else
echo "No changes detected: all_changed_files output IS empty."
fi
- name: Link Availability Check (Diff Only)
if: ${{ steps.changed-files.outputs.all_changed_files != '' }}
uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0
with:
args: --verbose --config .lychee.toml ${{ steps.changed-files.outputs.all_changed_files }}
failIfEmpty: false
fail: true
taplo:
name: taplo
needs: [preflight]
Expand Down Expand Up @@ -314,16 +276,10 @@ jobs:
fail-fast: false
matrix:
rust:
- beta
- stable
target:
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
include:
- rust: beta
experimental: true
- rust: stable
experimental: false
steps:
Expand Down Expand Up @@ -462,12 +418,8 @@ jobs:
matrix:
rust:
- stable
- beta
- nightly
- "1.89.0" # MSRV — keep quoted.
target:
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
steps:
- name: Code checkout
uses: actions/checkout@v6
Expand Down Expand Up @@ -510,223 +462,6 @@ jobs:
run: cargo build --locked --all --release --target=${{ matrix.target }}
- name: Check build did not modify any files
run: test -z "$(git status --porcelain)"
# garm-jammy + gnu: runs on PR and MQ. Other 3 matrix entries are in
# integration-x86-64-mq (sibling, MQ-only, runs in parallel).
integration-x86-64-pr:
name: integration-x86-64-pr
needs: [preflight, dco, quality, build]
if: >-
needs.preflight.outputs.full == 'true' && needs.dco.result == 'success' && needs.quality.result == 'success' && needs.build.result == 'success'
timeout-minutes: 80
env:
# Our runner has 16 cores (nproc).
# We limit parallelism only to avoid exhausting disk space and memory
# resources, not to save CPU resources.
PARALLEL_INTEGRATION_TESTS_NUM: 12
runs-on: garm-jammy-16
steps:
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install Docker
run: |
set -eufo pipefail
sudo apt-get update
sudo apt-get -y install ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt install -y docker-ce docker-ce-cli
- name: Prepare for VDPA
run: scripts/prepare_vdpa.sh
- name: Run unit tests
run: scripts/dev_cli.sh tests --unit --libc gnu
- name: Load openvswitch module
run: sudo modprobe openvswitch
- name: Run integration tests
timeout-minutes: 60
run: scripts/dev_cli.sh tests --integration --libc gnu
# MQ-only: the 3 matrix entries that integration-x86-64-pr does not cover.
integration-x86-64-mq:
name: integration-x86-64-mq
needs: [preflight, dco, quality, build]
if: >-
github.event_name == 'merge_group' && needs.preflight.outputs.full == 'true' && needs.dco.result == 'success' && needs.quality.result == 'success' && needs.build.result == 'success'
timeout-minutes: 80
env:
# Our runner has 16 cores (nproc).
# We limit parallelism only to avoid exhausting disk space and memory
# resources, not to save CPU resources.
PARALLEL_INTEGRATION_TESTS_NUM: 12
strategy:
fail-fast: false
matrix:
include:
- {runner: garm-jammy, libc: musl}
- {runner: garm-jammy-amd, libc: gnu}
- {runner: garm-jammy-amd, libc: musl}
# format() because `${{ matrix.runner }}-16` is not valid in runs-on.
runs-on: ${{ format('{0}-16', matrix.runner) }}
steps:
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install Docker
run: |
set -eufo pipefail
sudo apt-get update
sudo apt-get -y install ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt install -y docker-ce docker-ce-cli
- name: Prepare for VDPA
run: scripts/prepare_vdpa.sh
- name: Run unit tests
run: scripts/dev_cli.sh tests --unit --libc ${{ matrix.libc }}
- name: Load openvswitch module
run: sudo modprobe openvswitch
- name: Run integration tests
timeout-minutes: 60
run: scripts/dev_cli.sh tests --integration --libc ${{ matrix.libc }}
integration-arm64:
name: integration-arm64
needs: [preflight, dco, quality, build]
if: >-
github.event_name == 'merge_group' && needs.preflight.outputs.full == 'true' && needs.dco.result == 'success' && needs.quality.result == 'success' && needs.build.result == 'success'
timeout-minutes: 120
env:
# Our runner has 80 cores (nproc).
# We limit parallelism only to avoid exhausting disk space and memory
# resources, not to save CPU resources.
PARALLEL_INTEGRATION_TESTS_NUM: 25
runs-on: bookworm-arm64
steps:
# arm64 runner user is "runner" (vfio's is "github-runner").
- name: Fix workspace permissions
run: sudo chown -R runner:runner ${GITHUB_WORKSPACE}
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Run unit tests (musl)
run: scripts/dev_cli.sh tests --unit --libc musl
- name: Load openvswitch module
run: sudo modprobe openvswitch
- name: Run integration tests (musl)
timeout-minutes: 60
run: scripts/dev_cli.sh tests --integration --libc musl
- name: Install Azure CLI
run: |
set -eufo pipefail
sudo apt install -y ca-certificates curl apt-transport-https lsb-release gnupg
curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null
echo "deb [arch=arm64] https://packages.microsoft.com/repos/azure-cli/ bookworm main" | sudo tee /etc/apt/sources.list.d/azure-cli.list
sudo apt update
sudo apt install -y azure-cli
- name: Download Windows image
shell: bash
run: |
set -eufo pipefail
IMG_BASENAME=windows-11-iot-enterprise-aarch64.raw
IMG_PATH=$HOME/workloads/$IMG_BASENAME
IMG_GZ_PATH=$HOME/workloads/$IMG_BASENAME.gz
IMG_GZ_BLOB_NAME=windows-11-iot-enterprise-aarch64-9-min.raw.gz
cp "scripts/$IMG_BASENAME.sha1" "$HOME/workloads/"
pushd "$HOME/workloads"
if sha1sum "$IMG_BASENAME.sha1" --check; then
exit
fi
popd
mkdir -p "$HOME/workloads"
az storage blob download --container-name private-images --file "$IMG_GZ_PATH" --name "$IMG_GZ_BLOB_NAME" --connection-string "${{ secrets.CH_PRIVATE_IMAGES }}"
gzip -d "$IMG_GZ_PATH"
- name: Run Windows guest integration tests
timeout-minutes: 30
run: scripts/dev_cli.sh tests --integration-windows --libc musl
integration-vfio:
name: integration-vfio
needs: [preflight, dco, quality, build]
if: >-
github.event_name == 'merge_group' && needs.preflight.outputs.full == 'true' && needs.dco.result == 'success' && needs.quality.result == 'success' && needs.build.result == 'success'
runs-on: vfio-nvidia
env:
AUTH_DOWNLOAD_TOKEN: ${{ secrets.AUTH_DOWNLOAD_TOKEN }}
steps:
# vfio-nvidia runner user is "github-runner" (not "runner" like arm64).
- name: Fix workspace permissions
run: sudo chown -R github-runner:github-runner "${GITHUB_WORKSPACE}"
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Run VFIO integration tests
timeout-minutes: 25
run: scripts/dev_cli.sh tests --integration-vfio
# Most tests are failing with musl, see #6790
# - name: Run VFIO integration tests for musl
# timeout-minutes: 25
# run: scripts/dev_cli.sh tests --integration-vfio --libc musl
integration-windows:
name: integration-windows
needs: [preflight, dco, quality, build]
if: >-
github.event_name == 'merge_group' && needs.preflight.outputs.full == 'true' && needs.dco.result == 'success' && needs.quality.result == 'success' && needs.build.result == 'success'
runs-on: garm-jammy-16
steps:
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install Docker
run: |
set -eufo pipefail
sudo apt-get update
sudo apt-get -y install ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo chmod a+r /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt install -y docker-ce docker-ce-cli
- name: Install Azure CLI
run: |
set -eufo pipefail
sudo apt install -y ca-certificates curl apt-transport-https lsb-release gnupg
curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ jammy main" | sudo tee /etc/apt/sources.list.d/azure-cli.list
sudo apt update
sudo apt install -y azure-cli
- name: Download Windows image
run: |
set -eufo pipefail
mkdir $HOME/workloads
az storage blob download --container-name private-images --file "$HOME/workloads/windows-server-2025-amd64-1.raw" --name windows-server-2025-amd64-1.raw --connection-string "${{ secrets.CH_PRIVATE_IMAGES }}"
- name: Run Windows guest integration tests
timeout-minutes: 15
run: scripts/dev_cli.sh tests --integration-windows
- name: Run Windows guest integration tests for musl
timeout-minutes: 15
run: scripts/dev_cli.sh tests --integration-windows --libc musl
integration-rate-limiter:
name: integration-rate-limiter
needs: [preflight, dco, quality, build]
if: >-
github.event_name == 'merge_group' && needs.preflight.outputs.full == 'true' && needs.dco.result == 'success' && needs.quality.result == 'success' && needs.build.result == 'success'
runs-on: bare-metal-9950x
env:
AUTH_DOWNLOAD_TOKEN: ${{ secrets.AUTH_DOWNLOAD_TOKEN }}
steps:
- name: Code checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Run rate-limiter integration tests
timeout-minutes: 20
run: scripts/dev_cli.sh tests --integration-rate-limiter
# The single required-status check. Branch protection requires this one job.
all-green:
name: all-green
Expand All @@ -738,13 +473,6 @@ jobs:
- fuzz-build
- gitlint
- hadolint
- integration-arm64
# VFIO worker is failing #8160
# - integration-vfio
# See: #8211
# - integration-windows
- integration-x86-64-mq
- integration-x86-64-pr
- openapi
- package-consistency
- preflight
Expand Down
Loading
Loading