Skip to main content

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 (or GITHUB_TOKEN env var) to raise API rate limits

Four checks run by default:

  1. tag-exists — a tag named v{version} or {version} exists and resolves (annotated tags are peeled to the commit).
  2. sdist-version — the sdist's PKG-INFO version equals the PyPI version.
  3. file-list — the sdist file list matches the tag's git tree (catches files added/removed after the build).
  4. 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)

Source distribution for tagpoint 0.1.0
File Size Uploaded
tagpoint-0.1.0.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tagpoint 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page