check:releases

Report GitHub and PyPI divergence for every releasable package in the workspace.


Table of contents

  1. Usage
  2. Options
  3. The three questions
  4. It never turns a failed lookup into a finding
  5. Example
  6. Environment
  7. 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


Back to top

splent. Distributed by an LGPL license v3. Contact us: drorganvidez@us.es