mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-11-15 21:32:26 +01:00
`discover` asks the flake for the suites of each tier (`legacyPackages.x86_64-linux.vmTiers`) and hands them to two matrices, so a new directory under `nix/tests/vm/suites` is run without an edit to the workflow. `vm-fast` runs the fast tier on every pull request, one machine per suite, as a sandboxed `nix build` of the check. `vm-slow` runs on master, every week, and on a pull request labeled `ci:vm-slow`; it builds the driver and runs it by hand, outside the sandbox, so that the screenshots and journals of a failed run are uploaded with `if: always()`. A composite action installs nix with the store cached and, for the VM jobs, frees disk space (a Plasma guest is a closure of about 10 GB), writes the udev rule that makes /dev/kvm writable for the runner's user, checks it with `test -w`, and adds `kvm` to nix's system features. KVM on hosted runners is documented for public repositories only. Whether this private repository has it is not known: the first run of these jobs says, and if it does not, they need a different runner. `lint` no longer runs `nix flake check`: on Linux that now boots every VM suite, which a runner with no KVM cannot do. It builds the checks that need no virtual machine, and `vm-lib`, the library's own tests. CONTRIBUTING.md and docs/dev/vm-tests.md say what runs where.
113 lines
3.8 KiB
YAML
113 lines
3.8 KiB
YAML
# Every job is gated on the repository, so that a fork does not run them on its own runners.
|
|
|
|
name: ci
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- "*"
|
|
push:
|
|
branches:
|
|
- master
|
|
- feature/*
|
|
- hotfix/*
|
|
tags:
|
|
- v*
|
|
schedule:
|
|
- cron: "30 0 * * 0" # Every Sunday at 00:30 UTC
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
cargo-deny:
|
|
if: github.repository == 'LGUG2Z/komorebi-for-kde'
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: EmbarkStudios/cargo-deny-action@v2
|
|
|
|
# Everything that does not need a virtual machine: the formatting, clippy, rustdoc, the tests and
|
|
# the VM library's own tests, as derivations. The jobs that boot KWin are separate, and `nix flake
|
|
# check` is not used here because on Linux it would run those suites with no KVM.
|
|
lint:
|
|
if: github.repository == 'LGUG2Z/komorebi-for-kde'
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0
|
|
- uses: ./.github/actions/nix
|
|
- name: Build every check that needs no virtual machine
|
|
run: |
|
|
nix eval --json .#checks.x86_64-linux --apply builtins.attrNames |
|
|
jq -r '(.[] | select(startswith("vm-") | not)), "vm-lib"' |
|
|
sed 's|^|.#checks.x86_64-linux.|' |
|
|
xargs nix build -L --no-link
|
|
- run: nix develop --command just lint
|
|
|
|
# The suites are found in the flake, so that a new directory under nix/tests/vm/suites is run
|
|
# without an edit here.
|
|
discover:
|
|
if: github.repository == 'LGUG2Z/komorebi-for-kde'
|
|
runs-on: ubuntu-24.04
|
|
outputs:
|
|
fast: ${{ steps.tiers.outputs.fast }}
|
|
slow: ${{ steps.tiers.outputs.slow }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- uses: ./.github/actions/nix
|
|
- id: tiers
|
|
run: |
|
|
tiers=$(nix eval --json .#legacyPackages.x86_64-linux.vmTiers)
|
|
echo "fast=$(jq -c '.fast // []' <<<"$tiers")" >> "$GITHUB_OUTPUT"
|
|
echo "slow=$(jq -c '.slow // []' <<<"$tiers")" >> "$GITHUB_OUTPUT"
|
|
|
|
# The pull request gate: the suites that take minutes, each in its own machine, in a sandboxed
|
|
# `nix build` like any other check.
|
|
vm-fast:
|
|
needs: discover
|
|
if: github.repository == 'LGUG2Z/komorebi-for-kde' && needs.discover.outputs.fast != '[]'
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 45
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: ${{ fromJson(needs.discover.outputs.fast) }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- uses: ./.github/actions/nix
|
|
with:
|
|
kvm: "true"
|
|
- run: nix build -L .#checks.x86_64-linux.vm-${{ matrix.suite }}
|
|
|
|
# The suites that draw and move a pointer. They run on master, every week, and on a pull
|
|
# request with the label `ci:vm-slow`. The driver is run by hand, outside the sandbox, so that
|
|
# the screenshots and the journals of a failed run can be uploaded.
|
|
vm-slow:
|
|
needs: discover
|
|
if: >-
|
|
github.repository == 'LGUG2Z/komorebi-for-kde' && needs.discover.outputs.slow != '[]' &&
|
|
(github.ref == 'refs/heads/master' || github.event_name == 'schedule' ||
|
|
github.event_name == 'workflow_dispatch' ||
|
|
contains(github.event.pull_request.labels.*.name, 'ci:vm-slow'))
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 60
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
suite: ${{ fromJson(needs.discover.outputs.slow) }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- uses: ./.github/actions/nix
|
|
with:
|
|
kvm: "true"
|
|
- run: nix build -L .#legacyPackages.x86_64-linux.vm.${{ matrix.suite }}.driver -o driver
|
|
- run: mkdir -p out && cd out && ../driver/bin/nixos-test-driver -o .
|
|
- if: always()
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: vm-${{ matrix.suite }}-${{ github.sha }}
|
|
path: out/
|
|
retention-days: 7
|