README.md
1
2## CI overview
3
4The main test pipeline is `zfs-qemu.yml`. Code checking and other
5workflows run independently alongside it.
6
7```mermaid
8flowchart TB
9subgraph Functional testing
10 Setup[test-config: pick ci_type + OS matrix]
11 Setup --> almalinux
12 Setup --> centos[centos-stream]
13 Setup --> debian
14 Setup --> fedora
15 Setup --> ubuntu
16 Setup --> freebsd
17 almalinux --> Cleanup[cleanup + summary]
18 centos --> Cleanup
19 debian --> Cleanup
20 fedora --> Cleanup
21 ubuntu --> Cleanup
22 freebsd --> Cleanup
23end
24
25subgraph Code checking
26 checkstyle.yaml
27 codeql.yml
28 smatch.yml
29end
30
31subgraph Other workflows
32 zfs-arm.yml
33 zloop.yml
34 labels.yml
35end
36```
37
38Every `qemu-vm` matrix entry runs on a fixed `ubuntu-24.04` host.
39The steps inside one entry are:
40
411) set up QEMU and boot the guest (~2-4m)
422) install build dependencies in the guest (~2-4m)
433) build zfs modules in the guest (~8-12m)
444) run functional tests (~2-4h)
455) package and upload per-OS test logs (~10s)
46
47A per-OS entry takes about 3 to 4 hours. Once all entries finish, the
48`cleanup` job aggregates the results into a summary.
49
50### `ci_type` selection
51
52`test-config` runs `.github/workflows/scripts/generate-ci-type.py` against
53the PR's changed files and picks one of:
54
55| `ci_type` | OS matrix |
56|-----------|--------------------------------------------|
57| `docs` | empty (documentation-only PRs) |
58| `quick` | 6 Linux + 1 FreeBSD |
59| `linux` | all supported Linux distros |
60| `freebsd` | all supported FreeBSD versions |
61| default | cross-platform sample |
62
63Pushes to `openzfs/zfs` skip the matrix entirely; only PRs (and pushes to
64forks) build.
65
66Authors can force a specific ci_type by adding `ZFS-CI-Type: <type>` to
67the most recent commit message. The `ZTS_OS_OVERRIDE` repository variable
68can also alter the selection. The `workflow_dispatch` trigger accepts
69`fedora_kernel_ver` (Fedora-only run with a chosen kernel) and
70`specific_os` (pin the matrix to one OS).
71
72### Supported guests
73
74Auto-selected:
75
76- Linux: almalinux 8/9/10, centos-stream 9/10, debian 11/12/13,
77 fedora 43/44, ubuntu 22/24/26
78- FreeBSD: 14.4-RELEASE, 14.5-STABLE, 15.1-RELEASE/STABLE, 16.0-CURRENT
79
80Available via `specific_os` or `ZTS_OS_OVERRIDE`:
81
82- archlinux, tumbleweed
83
84### Code checking
85
86- `checkstyle.yaml`: source-style checks
87- `codeql.yml`: CodeQL analysis
88- `smatch.yml`: smatch analysis
89
90### Other workflows
91
92- `zfs-arm.yml`: ARM build on `ubuntu-24.04-arm`
93- `zloop.yml`: host-side zloop
94- `labels.yml`: maintains PR status labels
95- `zfs-qemu-packages.yml`: manually dispatched, builds release RPMs or
96 tests RPM installation from the ZFS yum repo
97