tagpoint
Verify that a PyPI release actually matches its GitHub tag — the name and the content.
pip install tagpoint
tagpoint check requests --repo psf/requests
Output:
tagpoint report: requests==2.32.3 repo=psf/requests
tag: v2.32.3 commit: abc123def456
[PASS] tag-exists: tag v2.32.3 -> abc123def456
[PASS] sdist-version: PKG-INFO version 2.32.3 matches PyPI
[PASS] file-list: 128 files match the tag tree
[PASS] tag-before-build: tag commit 2024-05-29T... <= upload 2024-05-29T...
verdict: CONSISTENT
Exit code 0 = consistent, 1 = inconsistent, 2 = check error (network, missing data).
Install
pip install tagpoint
tagpoint is stdlib-only — no third-party dependencies.
Usage
tagpoint check <pypi-package> --repo owner/name [--shallow] [--token TOKEN]
tagpoint check flask --repo pallets/flask— full check (default)--shallow— only verify the tag exists and the sdist version matches--token— GitHub token (orGITHUB_TOKENenv var) to raise API rate limits
Four checks run by default:
- tag-exists — a tag named
v{version}or{version}exists and resolves (annotated tags are peeled to the commit). - sdist-version — the sdist's
PKG-INFOversion equals the PyPI version. - file-list — the sdist file list matches the tag's git tree (catches files added/removed after the build).
- tag-before-build — the tag commit date is not newer than the release upload time (a tag moved after the build is drift).
Differentiation
There are tools that check whether a release tag exists (e.g. my tagtruth project checks tag presence as part of release hygiene). tagpoint goes one step further: it checks whether the tag points at the code the release was actually built from.
The failure mode it catches is real: a tag named v1.2.3 exists, CI is green,
everything looks fine — but the tag was force-moved after the sdist was built,
or the release was cut from a dirty working tree. The name matches; the
content doesn't. tagpoint compares the sdist contents against the tag's git
tree and flags the drift. Think of it as a "name matches reality" check for
your supply chain.
License
MIT — see LICENSE.
Metadata
Release files for tagpoint 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tagpoint-0.1.0.tar.gz | 8.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tagpoint-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.8 kB
Release files / tagpoint-0.1.0.tar.gz
| Download URL | tagpoint-0.1.0.tar.gz |
|---|---|
| Size | 8.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d7ba753b4718a9ca8c335fd80f99d142206d44c707bcd656015d437dd0954625
|
|
BLAKE2b-256 checksum How to use checksums |
e36cf39d1a1f35bfa11bb6e7443ec77ebb4cbb20cb5451921fbf08e0e746eb76
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / tagpoint-0.1.0-py3-none-any.whl
| Download URL | tagpoint-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae993df24346bcbe9b1ec504f3cda2f7c566aeaaa9d279304bae77ef24e43edf
|
|
BLAKE2b-256 checksum How to use checksums |
61c4f0e9fea503aaee4e325960521dc1fdc75a0f335856ba1d5118267885e8b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|