alunduil / alunduil/zfs-replicate
One CI check reports the result of every gating job
- Lenguaje dominante
- Python
- Estrellas
- 24
- Forks
- 6
- Merge medio
- 3 h 11 min
- PR fusionados (30 d)
- 49
Descripción
## Summary
Add a job to `ci.yml` that depends on every gating job and surfaces a single check-run name, so the default branch can be gated on a context that survives changes to the Python matrix.
## Current behaviour
`ci.yml` surfaces 16 check-run names on a pull request. Twelve of them expand from two matrices (`Test python 3.10` through `3.14` plus `3.x`, and `Check CLI entry point` at the same versions), so each of those names exists only while its version sits in the matrix.
The default-branch ruleset requires one context, `Validate PR title`. The pre-commit run, the test legs, the coverage upload, and the build are all advisory, so a pull request that fails every test leg still satisfies the one required check.
## Motivation
#507 settled the check names and concluded that matrix contexts are too fragile to require: `Test python 3.10` exists only while 3.10 is in the matrix, and the drift job in `daily.yml` exists to move that matrix. Its remaining slice was left for the infrastructure side to ask for.
It is being asked for now. alunduil/alunduil-infrastructure#444 wants merges gated on CI so Renovate can automerge, and automerge merges on the required checks alone. Requiring the matrix names would reintroduce the silent drop #507 exists to prevent.
## Approach and alternatives
- One job with `needs:` over the gating jobs, `if: always()`, failing unless every needed result is `success` or an accepted `skipped`. Name it for its outcome, per the convention in alunduil/alunduil-chezmoi#413.
- Split the `3.x` legs out of the two matrices into jobs of their own. They carry `experimental: true`, which resolves to `continue-on-error`, and what `needs..result` reports when only the experimental cell of a matrix fails is not worth depending on. Separate jobs keep them out of the gate's `needs`, leaving them advisory in fact as well as in intent.
- `Validate PR title` and `Review dependencies` are `if: github.event_name == 'pull_request'`, so they report `skipped` on a push to master. The gate has to accept a skip there rather than read it as failure.
- Set aside: requiring the matrix names directly. It needs no new job, but the names churn by design, and #616 reshapes them again.
- Set aside: requiring `codecov/project` and `codecov/patch`. The upload step is skipped on fork pull requests (`ci.yml:104`), so those contexts never post there and the merge would hang for a contributor who cannot fix it.
## Scope
`.github/workflows/ci.yml`
## Out of scope
The ruleset change that pins the new context (alunduil/alunduil-infrastructure#444). Defining the Python matrix once (#616). A coverage threshold: line coverage is 95.73% while the nightly sweep kills 57% of the mutants a test reaches (#699), so the assurance worth buying is mutation, not a coverage gate.
## Acceptance criteria
- [ ] `ci.yml` has one job whose check-run name names no Python version, and which fails when any gating job fails
- [ ] The experimental `3.x` legs run as jobs of their own and cannot fail the gate
- [ ] The gate reports a conclusion rather than hanging, both on a push to master and on a fork pull request
- [ ] A pull request with a failing test leg shows the gate red, verified before the context is required anywhere
- [ ] The gate's check-run name is recorded on #507 for the infrastructure side to pin
## Related issues
- #507 inventories the check names and settled which are safe to require; it stays open until this and the infrastructure pin land.
- #616 defines the Python matrix once, which this gate makes safe to do without dropping a required check.
Guía de contribución
Línea de trabajo
Start with .github/workflows/ci.yml, reading the existing gating jobs, the two Python matrices, and the conditional Validate PR title and Review dependencies jobs. Check how job results are exposed on pushes and fork pull requests. Done means the workflow has a stable, version-neutral gate, experimental 3.x jobs remain outside it, and failing test legs make the gate fail without hanging.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- github-actions
- Área
- ci-cd
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Activo
- Claridad
- Bien especificado
- Aptitud para principiantes
- 72/100