Continuous Integration#
Estimated reading time: 6 minutes
Thirteen workflows run in this repository. Most of them you will meet on your own pull request; six run on a schedule and will reach you without your having done anything, which is the part worth reading before it happens.
This page says what each one is for and what its failure means. It does not describe how they work — the workflow files say that, and cannot drift from themselves — and it does not carry the reasoning behind a gate’s design, which lives in the design specifications.
On Your Pull Request#
Workflow |
What it is for |
|---|---|
|
The suite, on every supported Python |
|
Builds the documentation and runs every gate over it, including the browser
demo — the same set |
|
Checks the news fragment: that there is one, and that it is well formed |
|
Validates |
|
Builds the sdist and wheel, and checks |
|
Labels the pull request from the paths it touches, from its branch name — a
|
|
Static security analysis |
Every one of these runs on every pull request except two. ci-citation is scoped to
a path, so it stays quiet unless CITATION.cff itself changes. codeql is scoped
to pull requests targeting main or a vA.B.x release branch, so a pull request
opened against any other base does not run it.
Those same workflows run on a push to main and to a vA.B.x release branch, and
ci-tests, ci-docs and ci-wheels on a v* tag besides. The release branch
is in that list deliberately: a release is tagged from one (Cutting a Release),
and a branch nothing checks would put the least-tested commit in the repository on
PyPI. The tag is in it so that the released commit carries checks of its own rather
than only the branch commit it points at.
On a Schedule#
Workflow |
What it is for |
|---|---|
|
Refreshes |
|
Resolves each declared minimum version and exercises what it resolves, so a floor that has become untrue is found rather than assumed |
|
Checks the external links in |
|
Reports monthly on which glossary topics the documentation covers |
|
Marks a long-quiet issue or pull request stale |
|
The same analysis, weekly, against code that has not changed |
On an Issue or a First Pull Request#
ci-first-contribution greets somebody’s first issue or pull request and labels it.
When One of Them Finds Something#
Four cases are worth knowing in advance, because you meet them without having caused them, or because the remedy is not guessable.
A lock refresh turns the bot’s pull request red on image comparison. When
ci-locks moves matplotlib or freetype, rendered figures shift by more than the
comparison tolerance. The remedy is to regenerate the baselines on that branch with
pixi run baselines, then re-verify across all three test environments (Testing).
This is expected rather than a defect in the proposal.
A scheduled job opens an issue. ci-floors, ci-linkcheck and ci-topics each
keep a single standing issue and edit it in place rather than filing a new one per run, so
the history stays in one place. An issue appearing under your name in a notification is
one of these, not something you broke.
Something of yours was labelled stale. ci-stale marks an issue or pull request
quiet for six months and closes it four weeks later. Any comment takes the label straight
back off. It never touches anything held deliberately — a blocked or paused item, a
tracked design question, or the standing reports above.
The browser demo will not start. pixi run docs-all needs a Chromium that pixi does
not install. The check names the command to run; Contributing to tephpy carries both forms.
Where the Detail Lives#
The workflow files under .github/workflows/ are the authority on what runs. The
design specifications carry why each gate is shaped as it is —
floors spec §… for the dependency floors, topics spec §… for the coverage report,
docs spec §… for the documentation gates.