The generated lane table below is current. See
build-pipeline.mdfor the deployed architecture.
This inventory is generated from workflow triggers and .github/green-criteria.yml; run scripts/gen-ci-lanes.py after changing either. PR-deterministic is fast contributor feedback. Post-merge publishes or reacts to trusted repository events. Scheduled independently revalidates state and freshness.
| Workflow | Lane | Assertion | Cadence | Freshness SLA |
|---|---|---|---|---|
add-help-wanted.yml |
post-merge | Add Help Wanted | issues | — |
adoption-metrics.yml |
post-merge + scheduled | Adoption metrics snapshot | 0 9 1 * *, manual |
— |
asahi-hw-nightly-one.yml |
post-merge + scheduled | Asahi hardware smoke (one) | caller cadence | — |
asahi-hw-nightly.yml |
post-merge + scheduled | Asahi hardware smoke (Tier 2 rental) | 0 6 * * *, manual |
— |
attest-sbom.yml |
post-merge | Attest SBOMs | workflow completion, manual | — |
audit-nvidia-release-assets.yml |
post-merge + scheduled | Audit NVIDIA release assets | 30 0 * * *, manual |
— |
bootc-lifecycle.yml |
post-merge + scheduled | lifecycle |
0 5 * * 4, manual |
lifecycle: 8d |
build-albacore.yml |
post-merge + scheduled | Build Albacore | 20 2 * * *, manual |
— |
build-archlinuxarm-base.yml |
post-merge + scheduled | Build Arch Linux ARM base | push, 40 2 * * 1, manual |
— |
build-bonito-rawhide.yml |
post-merge + scheduled | Build Bonito-rawhide | 50 10 * * *, manual |
— |
build-bonito.yml |
post-merge + scheduled | Build Bonito | 20 3 * * *, manual |
— |
build-flavor.yml |
post-merge | Build Flavor | manual | — |
build-flounder-sid.yml |
post-merge + scheduled | Build Flounder-sid | 50 11 * * 4, manual |
— |
build-flounder.yml |
post-merge + scheduled | Build Flounder | 50 3 * * *, manual |
— |
build-grouper.yml |
post-merge + scheduled | Build Grouper | 20 10 * * *, manual |
— |
build-guppy.yml |
post-merge + scheduled | Build Guppy | 20 6 * * 2, manual |
— |
build-gurnard.yml |
post-merge + scheduled | Build Gurnard | 20 4 * * 3, manual |
— |
build-hummingbird.yml |
post-merge + scheduled | Build Hummingbird | 20 22 * * 5, manual |
— |
build-marlin.yml |
post-merge + scheduled | Build Marlin | 50 2 * * *, manual |
— |
build-sailfin.yml |
post-merge + scheduled | Build Sailfin | 50 9 * * *, manual |
— |
build-skipjack.yml |
post-merge + scheduled | Build Skipjack | 20 11 * * *, manual |
— |
build-toolchain.yml |
post-merge | build-toolchain | push, manual | — |
build-variant.yml |
PR-deterministic + post-merge + scheduled | Unified Build | caller cadence | — |
build-wahoo.yml |
post-merge | Build Wahoo [experimental] | manual | — |
build-yellowfin.yml |
post-merge + scheduled | Build Yellowfin | 20 9 * * *, manual |
— |
catalog-facts.yml |
post-merge + scheduled | Catalog Facts | 0 6 * * *, manual |
— |
check-base-image-pins.yml |
post-merge + scheduled | rebuildable, arch_honesty |
20 22 * * *, manual |
rebuildable: 2d, arch_honesty: 2d |
check-download-checksums.yml |
PR-deterministic + post-merge + scheduled | Check download checksums | each PR, 35 22 * * *, manual |
— |
config-reference-materialization.yml |
post-merge | Materialize customized reference | manual | — |
content-filter.yaml |
post-merge | Check for Spammy Issue Comments | issue_comment | — |
corral-boot-gate.yml |
PR-deterministic + post-merge | Corral Boot Gate | each PR, manual | — |
daily-verify.yml |
post-merge + scheduled | Daily Image Verification | 0 4 * * *, manual |
— |
dead-gate-report.yml |
post-merge + scheduled | Dead gate report | 17 6 * * 1, manual |
— |
desktop-contract-sweep.yml |
post-merge + scheduled | desktop, no_silent_omissions |
0 8 * * *, manual |
desktop: 2d, no_silent_omissions: 2d |
diagnostic-oci-rpm-consumer.yml |
post-merge | Diagnostic OCI RPM consumer | manual | — |
drop-bot-review-requests.yml |
PR-deterministic | Drop bot review requests | each PR | — |
fork-simulation.yml |
post-merge + scheduled | Fork PR simulation | 17 8 * * 1, manual |
— |
frontend-parity.yml |
post-merge + scheduled | frontend parity | 30 6 * * *, manual |
— |
gdm-paint-benchmark.yml |
post-merge | GDM Paint Benchmark | manual | — |
generate-changelog-release.yml |
post-merge + scheduled | Generate Release | 05 11 * * *, manual |
— |
ghcr-partial-pull-check.yml |
post-merge + scheduled | GHCR Partial-Pull Compatibility Canary | 30 8 * * 1, manual |
— |
graduation-check.yml |
post-merge + scheduled | Graduation Check | 0 7 * * 1, manual |
— |
installer-fisherman-pins.yml |
PR-deterministic + post-merge + scheduled | Installer fisherman pins | each PR, 0 5 * * *, manual |
— |
installer-screenshots.yml |
post-merge + scheduled | Installer Walkthrough Screenshots | 0 5 * * 1, manual |
— |
installer-smoke.yml |
post-merge | Installer Smoke | manual | — |
iso-builder-parity.yml |
post-merge | ISO Builder Parity | caller cadence | — |
iso-e2e.yml |
PR-deterministic + post-merge + scheduled | iso |
each PR, 0 6 * * 1, manual |
iso: 8d |
issue-intake-check.yml |
post-merge | Issue intake check | issues | — |
just-fix.yml |
PR-deterministic + post-merge | Just Fix | each PR, push | — |
lint.yml |
PR-deterministic | Lint and Check | each PR, merge queue | — |
live-initramfs.yml |
post-merge | Live Initramfs Artifacts | manual | — |
live-iso-bootc.yml |
PR-deterministic + post-merge | Live ISOs (Tacklebox) | each PR, manual | — |
live-overlay.yml |
post-merge + scheduled | Live Overlay Artifacts | 30 9 * * 3, manual |
— |
luks-e2e.yml |
post-merge + scheduled | install |
0 7 1 * *, 0 7 1 */3 *, manual, caller cadence |
install: 35d |
matrix-status.yml |
PR-deterministic + post-merge + scheduled | Matrix Status | each PR, 0 6 * * *, manual |
— |
mesa-3969-compare.yml |
post-merge | Mesa 3969 signed build and controlled comparison | manual | — |
package-parity.yml |
post-merge + scheduled | parity |
40 8 * * *, manual |
parity: 2d |
pages.yml |
post-merge | GitHub Pages | push, repository dispatch, manual | — |
post-build-luks-e2e.yml |
post-merge + scheduled | Post-Build LUKS E2E | 0 6 * * 4, workflow completion, manual |
— |
pr-nudges.yml |
PR-deterministic | PR Reminders | each PR | — |
promote-stable.yml |
post-merge + scheduled | Promote Stable | 0 6 * * *, manual |
— |
prune-r2.yml |
post-merge + scheduled | Prune R2 retention | 30 12 * * *, manual |
— |
publish-iso-groups.yml |
post-merge + scheduled | Publish Grouped Dedup ISOs to R2 | 0 23 * * 0, manual |
— |
publish-isos.yml |
post-merge | Publish Live ISOs to R2 | manual | — |
qualify-config-only-images.yml |
post-merge | Qualify config-only images | manual | — |
qualify-image-packages.yml |
post-merge | Qualify image packages | manual | — |
r2-dependency-report.yml |
post-merge + scheduled | R2 dependency report | 41 6 * * 1, manual |
— |
randomized-tests.yml |
post-merge + scheduled | Randomized Tests | 30 3 * * *, manual |
— |
rerun-infra-failures.yml |
post-merge | Re-run infra failures | workflow completion, manual | — |
rerun-startup-failures.yml |
post-merge + scheduled | Re-run startup failures | 0 */3 * * *, manual |
— |
reusable-build-artifacts.yml |
PR-deterministic + post-merge + scheduled | Artifacts | caller cadence | — |
reusable-build-image.yml |
PR-deterministic + post-merge + scheduled | builds, desktop, boots, no_silent_omissions |
caller cadence | builds: 2d, desktop: 2d, boots: 2d, no_silent_omissions: 2d |
scheduled-failure-alert.yml |
post-merge | Scheduled failure alert | workflow completion | — |
scorecard.yml |
post-merge + scheduled | Scorecard supply-chain security | 38 0 * * 4, branch_protection_rule |
— |
snapshot-upstreams.yml |
post-merge + scheduled | Snapshot upstreams | 0 9 * * 1, manual |
— |
ste.yml |
PR-deterministic + post-merge | Prose | each PR, manual | — |
test.yml |
PR-deterministic + post-merge | builds |
each PR, merge queue, push, manual | builds: 2d |
tuna-pr-images.yml |
PR-deterministic | Tuna PR images | each PR | — |
update-build-status.yml |
post-merge + scheduled | Update README build status | 30 13 * * *, manual |
— |
validate-renovate.yaml |
PR-deterministic + post-merge | Validate Renovate Config | each PR, push | — |
verify-asahi-one.yml |
PR-deterministic + post-merge + scheduled | Verify Asahi image (one) | caller cadence | — |
verify-asahi.yml |
post-merge + scheduled | Verify Asahi image | 40 5 * * *, manual |
— |
weekly-boot-report.yml |
post-merge + scheduled | Weekly Boot Screenshot Report | 0 10 * * 1, manual |
— |
weekly-desktop-screenshots.yml |
post-merge + scheduled | Weekly Desktop Screenshots | 0 2 * * 1, manual |
— |
weekly-qcow2-screenshots.yml |
post-merge + scheduled | Weekly QCOW2 Boot Screenshots | 0 20 * * 0, manual |
— |
This specification defines the target design for the matrix-driven CI/CD pipeline for TunaOS, consolidating redundant workflows and optimizing the build process.
tunaos.toml owns the matrix. CI creates the ignored
.github/build-config.yml adapter before legacy yq readers run.
Edit TOML and run python3 scripts/config.py validate to check the result.
The migration plan lists the later package and
brand steps; the matrix move does not complete those steps.
This excerpt shows the flavor shape inside the existing full config:
[[variants.yellowfin.flavors]]
id = "gnome"
stage = 2
build_image = true
build_iso = true
build_qcow2 = truegenerate_matrix:- Reads
.github/build-config.yml. - Merges with manual inputs (for
workflow_dispatch). - Outputs a JSON matrix for subsequent jobs.
- Reads
build_base,build_stage2,build_stage3,build_stage4:- Use the generated per-stage matrices.
- Run on specialized runners (Ubuntu for amd64, ARM runners for arm64).
build_artifacts_s{2,3,4}(ISO/QCOW2 per stage):- Per-stage artifact jobs:
build_artifacts_s2(needs stage 2),build_artifacts_s3(needs stage 3),build_artifacts_s4(needs stage 4). - Stage-4 failures do not block stage-2/3 ISOs.
- Uses per-stage artifact matrices to determine which formats to generate.
- Uploads to Cloudflare R2 and GitHub Releases.
- Per-stage artifact jobs:
.github/actions/setup-tunaos,prepare-config,setup-yqandghcr-loginprepare the runner.
- Maintainability: Edit the primary TOML to add a variant or flavor.
- Efficiency: Parallel matrix builds reduce total CI time.
- Consistency: All flavors use the same underlying build and publish logic.