mirror of
https://github.com/nlohmann/json.git
synced 2026-10-28 16:55:41 +00:00
All ~100 Ubuntu jobs ran on every push to every pull request. They now belong to three sets, chosen by each job's if: condition: - PR set (16 configurations): every push to a pull request and every push. Together with the checks that always run, these jobs would have caught at least 92 % of the failing commits of Sep/Oct 2026. - full set (73 configurations): after the PR set passed, on pushes and on pull requests with the "🚀 ready to merge" label. - nightly set (10 configurations): Infer, Valgrind, coverage, icpc, icpx, nvhpc, CUDA, and ARM64; nightly on develop, on pushes to master and release/*, and by hand. A failed nightly run opens or updates an issue. A matrix whose entries belong to different sets is split into one job per set; the jobs share their steps through YAML anchors. No configuration is removed: tools/ci_jobs/ci_jobs.py --compare lists 150 configurations before and after. The same tool checks in CI that every job belongs to exactly one set, that the full set waits for the whole PR set, and that the job table in quality_assurance.md is up to date. The documentation describes the sets in a new section "How CI runs", and the QA pipeline figure shows the new badges. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
ci_jobs
The compiler jobs of ubuntu.yml are split into three sets, chosen by each job's
if: condition (see How CI runs):
- PR set: every push to a pull request, and every push to
develop,master, andrelease/*; - full set: after the PR set passed, on pull requests with the label "🚀 ready to merge" and on every push;
- nightly set: every night on
develop, on every push tomasterandrelease/*, and when started by hand.
A matrix whose entries belong to different sets is split into one job per set: the full-set job gets the suffix
_full, the nightly-set job _nightly, and both share their steps with the PR-set job through YAML anchors.
ci_jobs.py checks that
- every job of
ubuntu.ymlhas theif:condition of exactly one set (the conditions are inSETS), - every full-set job waits for (
needs:) exactly the PR set, andnightly_reportfor exactly the nightly set, and - the job table in
quality_assurance.mdis up to date.
python3 -m venv venv && venv/bin/pip install -r tools/ci_jobs/requirements.txt
venv/bin/python tools/ci_jobs/ci_jobs.py # check
venv/bin/python tools/ci_jobs/ci_jobs.py --markdown # print the job table for the documentation
venv/bin/python tools/ci_jobs/ci_jobs.py --compare origin/develop # list configurations added or removed since develop
Use --compare when changing the workflows: a configuration that disappears fails it, so no compiler, version, or
standard is dropped by accident when jobs are split, merged, or moved between sets.