Name Date Size #Lines LOC

..--

scripts/H--2,6741,782

README.mdH A D14-Sep-20262.7 KiB9774

checkstyle.yamlH A D06-Jun-20262.1 KiB6659

codeql.ymlH A D06-Jun-2026965 4636

labels.ymlH A D13-Nov-20241.7 KiB5043

smatch.ymlH A D06-Jun-20261.7 KiB6258

unit-tests.ymlH A D27-Jun-2026662 3026

zfs-arm.ymlH A D06-Jun-20263 KiB9068

zfs-qemu-packages.ymlH A D06-Jun-20265.8 KiB171130

zfs-qemu.ymlH A D14-Sep-20268 KiB220182

zfs-tests.ymlH A D08-Jan-20211.9 KiB5954

zloop.ymlH A D24-Aug-20262.2 KiB8682

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