check:releases
Report GitHub and PyPI divergence for every releasable package in the workspace.
Table of contents
- Usage
- Options
- The three questions
- It never turns a failed lookup into a finding
- Example
- Environment
- See also
Usage
splent check:releases [--feature NAME] [--no-core] [--no-products] [--divergent-only]
Options
| Option | Description |
|---|---|
--feature NAME |
Check one package by name. A bare name is expanded to splent_feature_<name>. |
--no-core |
Skip splent_cli and splent_framework. |
--no-products |
Skip products, check features and core packages only. |
--divergent-only |
Print only the packages that have a problem. |
Every directory with a pyproject.toml is considered, so features, the
two core packages and products are all covered. A product publishes to the
same channels through the same pipeline, so leaving it out would make the
report silently incomplete for exactly the packages
release:resume knows how to repair.
The three questions
| Bucket | Meaning |
|---|---|
| Tagged but not on PyPI | A git tag exists that the package never reached PyPI under |
| On PyPI with no tag | A published version whose source nobody can find |
| Tagged with no GitHub release | The tag is there and the Release was never created |
The third one is answered for every tag from one listing of the releases, not sampled from the newest tag. A feature released again after a failure would otherwise hide the broken version behind the good one.
Versions are compared on the number alone, so v1.2.3 and 1.2.3 are the
same release, and each channel keeps its own spelling in the output.
A package that declares channels = ["github"] in
[tool.splent.release] is only checked against GitHub, and is reported as
github only by declaration.
It never turns a failed lookup into a finding
“GitHub would not answer” and “there are no tags” are different facts. “PyPI would not answer” and “nothing is published” are different facts. A report that mixes them sends someone to republish packages that are fine.
So anything that could not be checked goes to its own bucket, is listed by
name with its reason, and makes the run exit non zero. Not knowing is not
the same as being in sync. A package with no origin remote is reported
separately again, as having nothing to compare.
The command reads. It never publishes anything.
Example
splent check:releases
Release channels for 24 package(s)
------------------------------------------------------------------
[OK] splent_feature_auth: 12 version(s) on both channels
[X] splent_feature_team
1 tag(s) not on PyPI: v0.2.1
[!] splent_feature_media: GitHub is rate limiting this token
[.] splent_feature_notes: never released
------------------------------------------------------------------
1 package(s) tagged but not on PyPI
splent_feature_team v0.2.1
Finish the newest one of each without bumping the version with
splent release:resume splent_feature_team
1 package(s) could NOT be checked, so this report does not cover them
splent_feature_media GitHub is rate limiting this token
Not knowing is not the same as being in sync. Fix the access and run this again.
Exit status is non zero when anything diverged or could not be checked.
Environment
GITHUB_TOKEN is not required, but without it GitHub rate limits the
listing quickly and the command says so at the end of every run.
See also
release:resume. Finish what this reportscheck:github. Whether the token works at allcheck:pypi. Whether the PyPI credentials work at all