Skip to content
Merged
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
2557909
vmm: Revert "vmm: create memfd for private mappings"
rbradford May 18, 2026
3759424
vm-migration: be explicit about commands
phip1611 May 15, 2026
0860597
vmm: migration: better observe and log invalid states
phip1611 May 15, 2026
ebc1e7e
vmm: Don't store the snapshot on the DeviceManager
rbradford May 19, 2026
2ab7ee6
vmm: remove redundant SocketStream overrides
amphi Apr 14, 2026
cbfe183
vmm: remove AsRawFd trait for SocketStream
amphi Apr 14, 2026
162f74e
vm-migration: client-side of a TLS connection
amphi Apr 14, 2026
1eb31b1
vm-migration: server-side of a TLS connection
amphi Apr 14, 2026
725f0f8
vmm: add TLS streams to migration transport
amphi Apr 14, 2026
a5a248b
vmm: accept migration connections over TLS
amphi Apr 14, 2026
7da1e8c
vmm: tighten migration URL validation
amphi Apr 15, 2026
db5213f
vmm: add TLS API option to send migration call
amphi Apr 15, 2026
cd1c00d
vmm: add TLS API option to receive migration call
amphi Apr 15, 2026
5e0484b
vmm: encrypt migration data with TLS if configured
amphi Apr 15, 2026
ab64813
docs: document live migration TLS encryption
amphi Apr 24, 2026
ce9340e
docs: update README for gardenlinux Cloud Hypervisor
phip1611 Aug 15, 2025
41c8341
misc: adjust AGENTS.md for our fork
phip1611 Mar 30, 2026
53be0f7
ci: enforce SAP commit style
phip1611 Oct 30, 2025
6f07b15
ci: remove irrelevant CI for this fork
phip1611 Apr 28, 2026
f83009e
build: flake: init
phip1611 Jan 28, 2026
44dd0ab
build: nix: add commit to version info
arctic-alpaca Apr 9, 2026
5b45689
build: ci/nix: build cloud-hypervisor
phip1611 Jan 28, 2026
7499991
build: cargo: add optimized-dev profile
phip1611 Aug 27, 2025
e8ba7f3
build: cargo: don't strip binary
phip1611 Dec 1, 2025
3caabf4
main: print build version and date on startup
phip1611 Mar 30, 2026
714551c
vmm: cpu: improve timeout handling in wait_until_signal_acknowledged()
phip1611 Mar 19, 2026
9f6ca3d
vmm: increase logging level of precopy from debug -> info
phip1611 May 12, 2026
26c0baf
vmm: pci: rename pci_device_id -> bdf_device
phip1611 May 5, 2026
f795caf
main: restore absolute timestamp behavior in logger
phip1611 May 12, 2026
ead7662
misc: live-migration with virtio-net devices with network fds
phip1611 Jun 27, 2025
07d1f92
vmm: properly unset immediate_exit on -EINTR
phip1611 Sep 10, 2025
b3b0988
vmm: vcpu: optimize lock usage
phip1611 Sep 11, 2025
46f6d30
vmm: prerequisites for accessing KVM_RUN in the vCPU loop
phip1611 Apr 30, 2026
caff5a7
vmm: fix kicking vCPU out of KVM_RUN from signal handler
phip1611 Sep 10, 2025
babc663
vmm: temporarily make "resize" API call fail fast
phip1611 Sep 11, 2025
a346961
vm-migration: mTLS -> TLS (make upstream compatible with our fork)
phip1611 May 4, 2026
ed3e81e
vmm: add vCPU throttling (auto-converge) for pre-copy
phip1611 Jun 10, 2025
37505a8
vmm: console: add tcp option
hertrste Sep 11, 2025
c068d9d
vmm: serial: add Tcp enum entry
hertrste Sep 11, 2025
67cc1af
vmm: serial: rename CloneUnixStream -> CloneStream
hertrste Sep 11, 2025
eae34fe
vmm: serial: add serial tcp implementation
hertrste Sep 11, 2025
6d3b70a
vmm: serial: implement writer combiner
hertrste Sep 16, 2025
4c396f3
vmm: config: allow additional file when mode TCP
hertrste Sep 17, 2025
73a98d0
vmm: serial: additional log to file
hertrste Sep 17, 2025
8a65636
vmm: serial_manager: use TypeId trait for key type in FanoutWriter
hertrste Sep 29, 2025
fef3e3f
vmm: api: receive_migration can get a tcp_serial_url
hertrste Oct 21, 2025
59763b3
arch: x86_64: refactor SMBIOS helpers
Coffeeri Feb 9, 2026
7a1d331
vmm: plumb legacy SMBIOS config
Coffeeri Feb 9, 2026
287c2c0
vmm: platform: add structured SMBIOS config
Coffeeri Feb 9, 2026
29fab19
vmm: deprecate legacy SMBIOS keys in API and CLI
Coffeeri Feb 9, 2026
9e3afb7
arch: smbios: add tests for table serialization
Coffeeri Feb 10, 2026
90d53ef
vmm: Allow to modify host numa settings
scholzp Feb 10, 2026
a904e9b
vmm: migration: prepare EventFd for async migration events
phip1611 Nov 21, 2025
034935a
vmm: migration: handle in dedicated thread (make async)
phip1611 Nov 21, 2025
e397792
vmm: better VM ownership handling in context of live migration
phip1611 Oct 30, 2025
f7303f3
vmm: api: temporarily make VmSendMigration call blocking again
phip1611 Oct 30, 2025
3b3eda1
vmm: migration: fix missing resume() VM after failed live migration
phip1611 Feb 12, 2026
27ba41b
vmm: migration: limit to running VMs only
phip1611 Feb 12, 2026
04dd58f
vm-migration: prepare progress types for new API endpoint
phip1611 Jan 13, 2026
e27612d
vmm: add migration-progress API endpoint
phip1611 Jan 13, 2026
2dd9618
vmm: add migration-progress HTTP endpoint
phip1611 Jan 12, 2026
fe5387d
vmm: actually populate migration progress
phip1611 Jan 22, 2026
d9a8206
ch-remote: add `migration-progress` command
phip1611 Feb 12, 2026
cf18742
vmm: migration: switch to non-blocking SendMigration call
phip1611 Feb 12, 2026
8bbea46
ch-remote: wait for migration to finish by querying migration progress
phip1611 Feb 12, 2026
9840545
vmm: api: less verbose log
phip1611 Feb 19, 2026
26778e9
devices: stop reset loops when vCPUs are paused
Coffeeri Feb 19, 2026
07426a5
devices: cmos: simplify pause/kill wait flags
Coffeeri Feb 19, 2026
668a637
vmm: set timeouts on sockets used for live migrations
amphi Feb 12, 2026
8be5c81
vmm: make aborted migrations return errors
amphi Feb 11, 2026
599d53a
vm-migration: send periodic keep alive messages during live migration
amphi Feb 12, 2026
a3f00f1
vmm: return error if the migration sender never connects
amphi Feb 23, 2026
eebf20f
vmm: add context to MigrateSend-Error
amphi Feb 26, 2026
fc81e2a
vmm: return error if prefaulting fails
amphi Feb 26, 2026
0041e57
vmm: migration receiver: report error when migration is aborted
amphi Mar 2, 2026
dc00fe1
vmm: add context to MigrateReceive-Error
amphi Feb 27, 2026
fbb64c8
vmm: add post-migration event to VmSnapshot
Coffeeri Feb 17, 2026
23414bb
vmm: postpone reset/exit during migration
Coffeeri Feb 17, 2026
fe3709f
vmm: migration: switch downtime on postponed event
Coffeeri Feb 17, 2026
838ea2e
vmm: streamline migration failure cleanup
phip1611 Feb 17, 2026
1688e55
vmm: api: add VmCancelMigration action
phip1611 Feb 19, 2026
9fa49fd
vmm: http api: add VmCancelMigration action
phip1611 Feb 19, 2026
2a2f4e6
vmm: migration: add handle wrapper for MigrationWorker
phip1611 Feb 19, 2026
c70dd77
vmm: add try_resume_vm() helper
phip1611 Feb 27, 2026
806b51b
vmm: migration: actually support cancellation
phip1611 Mar 2, 2026
a925363
vmm: migration: early cancellation (add more checks)
phip1611 Mar 2, 2026
a2abcf5
vmm: migration cancellation: integrate into TCP threads
phip1611 Mar 5, 2026
5283a0c
ch-remote: add cancel-migration
phip1611 Feb 19, 2026
0aebb7b
vmm: migration: properly print error chain on failure
phip1611 Mar 30, 2026
0795c73
vmm: defer guest exit during migration
Coffeeri Mar 9, 2026
09c6399
vmm: reduce API event verbosity
phip1611 Mar 13, 2026
8c86589
vmm: keep virtio activation alive in migration
Coffeeri Mar 10, 2026
0c04114
vm-migration: speed up volatile read and write
amphi Mar 17, 2026
dd4f596
vm-migration: Add AsFd for KeepAliveStream
amphi Mar 17, 2026
4db6bd3
vmm: differentiate timeouts by reader/writer, not sender/receiver
amphi Mar 17, 2026
7c79afe
vm-migration: move keep alive handling into the protocol
amphi Mar 17, 2026
37268c0
vm-migration: add KeepAlive status to response
amphi Mar 17, 2026
2c89466
vm-migration: make KeepAliveStream work for sender and receiver
amphi Mar 17, 2026
1d7098a
vmm: always use KeepAliveStream for main connection
amphi Mar 17, 2026
60fa667
vmm: Use KeepAliveStream also for receiver
amphi Mar 17, 2026
481c725
vmm: migration: longer accept timeout for receiver
phip1611 Apr 8, 2026
e01f34a
vmm: migration: improve error message on timeout
phip1611 Apr 8, 2026
b641706
vm-migration: fix UB in network parsing
arctic-alpaca Mar 23, 2026
0e4be70
vm-migration: stop sending abandon after error response
amphi Mar 25, 2026
3655c61
vmm: add mechanism for post-migration announcements
amphi Jan 16, 2026
0f8e073
vmm: add internal post-migration announce action
amphi Mar 25, 2026
2bffeb4
vmm: api: add API call for post migration announcements
amphi Mar 25, 2026
54c920e
net_util: refactor ctrl queue parsing
amphi Mar 31, 2026
909cb53
virtio-devices: net: refactor constructor state
amphi Mar 31, 2026
70fc3a2
virtio-devices: net: report link up in config status
amphi Apr 7, 2026
cd9eb4b
virtio-devices: net: support guest announce after migration
amphi Mar 31, 2026
8a01679
virtio-devices: net: add guest announce tests
amphi Mar 27, 2026
f07580b
virtio-devices: net: fix guest announce compatibility
amphi Mar 31, 2026
7bfbdc3
virtio-devices: net: restore pending announce notifications
amphi Mar 31, 2026
a80ce71
virtio-devices: net: invalidate stale announce retries
amphi Apr 1, 2026
dcdf37c
vmm: Enable AMX states prior to checking CPUID compatibility
olivereanderson Dec 9, 2025
6646945
arch: Initial data structures for describing CPUID parameters
olivereanderson Dec 9, 2025
f599f64
hypervisor: Implement common traits for HypervisorType and CpuVendor
olivereanderson Oct 7, 2025
14d2466
arch: CpuProfile data structures
olivereanderson Dec 9, 2025
997cfe3
misc: Make CPU profile part of various configs
olivereanderson Oct 7, 2025
65a8e4c
arch: Apply CPU profile (if any) when generating common CPUID
olivereanderson Dec 9, 2025
563b274
arch: Include Skylake and Sapphire rapids CPU profiles
olivereanderson Dec 9, 2025
fd04dca
arch: CPUID definitions data structures
olivereanderson Dec 10, 2025
a8f9757
arch: Intel CPUID definitions
olivereanderson Dec 10, 2025
fe5512e
arch: KVM CPUID definitions
olivereanderson Dec 10, 2025
329d56c
arch: Improve CPUID incompatibility logging
olivereanderson Dec 10, 2025
3c6e4c9
arch: CPU profile generation CLI
olivereanderson Dec 10, 2025
92a9442
arch: Change numeric serialization for CPU profiles
olivereanderson Feb 9, 2026
7bbbd02
arch: Passthrough policies for mutable CPUID fields
olivereanderson Feb 6, 2026
1f77620
arch: Update CPU profiles (passthrough mutable fields)
olivereanderson Feb 6, 2026
e4ae34a
arch: Regenerate CPU profiles after updating the serialization format
olivereanderson Feb 13, 2026
dd47149
misc: move MSR retrieval to Hypervisor trait (KVM)
phip1611 Feb 18, 2026
27b843a
hypervisor: Add get_msr_based_features method
olivereanderson Jan 25, 2026
846d221
hypervisor: Add get_msr_index_list method to the hypervisor trait
olivereanderson Feb 18, 2026
96aa3bf
misc: Don't expose MSR buffer directly through the hypervisor
olivereanderson Feb 20, 2026
a0d6833
hypervisor: msr_filter method on Vm trait
olivereanderson Feb 20, 2026
d40d067
arch: Disable UINTR state components
olivereanderson Feb 25, 2026
bdfd8c1
arch: Disable CET in CPUID for CPU profiles
olivereanderson Feb 26, 2026
d4bdb77
arch: Change CPU profile policy for MCA
olivereanderson Mar 3, 2026
48815aa
arch: Change CPUID profile policy for WAITPKG
olivereanderson Feb 25, 2026
1dcb703
arch: More Inherit for CPUID leaf 0x7.EDX
olivereanderson Mar 11, 2026
d7becd7
arch: Disable PKU and OSPKE for non-host CPU profiles
olivereanderson Mar 13, 2026
ce5aee5
arch: Change CPU profile generation tool
olivereanderson Jan 26, 2026
4bd67c5
arch: Lookup methods on CPUID definitions
olivereanderson Feb 17, 2026
09df0a5
arch: Add data structures for MSR definitions
olivereanderson Jan 7, 2026
d0a764a
arch: INTEL MSR-based feature definitions
olivereanderson Jan 7, 2026
56afe85
arch: I32_ARCH_CAPABILITIES changes according to PR review
olivereanderson Mar 11, 2026
fe5b3df
arch: Change policies for CR4_FIXED_I
olivereanderson Mar 13, 2026
b249f20
arch: MSR compatibility checks
olivereanderson Jan 16, 2026
550d633
arch: Stricter MSR compatibility checks for IA32_ARCH_CAPABILITIES
olivereanderson Mar 11, 2026
0869f9e
arch: Add a list of all Intel architectural MSRS
olivereanderson Feb 12, 2026
47c55a6
arch: Address architectural msrs review
olivereanderson Mar 11, 2026
af970c7
arch: Include a list of non-architectural MSRs
olivereanderson Feb 13, 2026
e81cd26
arch: Add lists of KVM MSRS
olivereanderson Feb 13, 2026
a3cc017
arch: Add a list of HyperV MSRs
olivereanderson Mar 5, 2026
bdfeb7e
arch: Add required MSR update functionality
olivereanderson Jan 21, 2026
1ba49cf
arch: Deny MSR functionality
olivereanderson Feb 24, 2026
6c332a1
vmm: Apply MSR adjustments according to CPU profile (if any)
olivereanderson Jan 26, 2026
6ef99ea
arch: Make the CPU profile generation tool MSR aware
olivereanderson Jan 26, 2026
1b33c3c
arch: Use MSR aware profiles
olivereanderson Jan 29, 2026
043bd6a
arch: Inherit policy for MCA
olivereanderson Mar 17, 2026
83619ba
arch: Permit IA32_MCG_CAP and IA32_MCG_STATUS
olivereanderson Mar 17, 2026
1f1ddf5
arch: Regenerate CPU profiles
olivereanderson Mar 18, 2026
683d613
arch: FORDIB IA32_U_CET and IA32_S_CET in CPU Profiles
olivereanderson Mar 23, 2026
fa08c47
arch: Disable HDC state components for CPU profiles
olivereanderson Mar 24, 2026
52a3920
arch: Disable LBR state components
olivereanderson Mar 24, 2026
6c31b6e
arch: Disable HWP state components
olivereanderson Mar 24, 2026
11cd2cc
arch: Disable PT state components
olivereanderson Mar 24, 2026
8086bdf
arch: Disable PASID state components
olivereanderson Mar 24, 2026
fa9dc5f
arch: Disable VM_ENTRY_HARDWARE_EXCEPTIONS for CPU profiles
olivereanderson Mar 24, 2026
19a662d
arch: Forbid IA32_XSS for non-host CPU profiles
olivereanderson Mar 24, 2026
b3abc68
arch: Clear LBR related bits in the VM-Exit and VM-Entry CTL MSRs
olivereanderson Mar 24, 2026
8e5bc8f
docs: CPU Profile generation
olivereanderson Mar 23, 2026
81fbb61
build: flate2 Workspace dependency
olivereanderson Apr 10, 2026
65785e9
arch: Code generation for CPU profiles
olivereanderson Apr 9, 2026
37239a6
arch: Update cpu_profile.rs to include code generation from build.rs
olivereanderson Apr 10, 2026
b88d1b9
docs: Update CPU profile generation developer documentation
olivereanderson Apr 10, 2026
8a11273
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