sru-lint
Static analysis tool for Ubuntu SRU (Stable Release Update) patches — built to run in CI and generate human-friendly reports.
Documentation
For complete documentation, installation instructions, usage examples, and plugin development guides, visit:
https://canonical-sru-lint.readthedocs-hosted.com/en/latest/
Quick Start
# Install from snap (recommended)
snap install --edge sru-lint
# Or install with Poetry (for development)
git clone https://github.com/dargad/sru-lint.git
cd sru-lint
poetry install
# Check from a patches-unapplied git repo (the current directory)
sru-lint check .
# Check a patch file or URL
sru-lint check path/to/patch.debdiff # if installed via snap
poetry run sru-lint check path/to/patch.debdiff # if using Poetry
sru-lint check https://example.com/patch.diff
# Check from stdin
cat patch.debdiff | sru-lint check - # if installed via snap
cat patch.debdiff | poetry run sru-lint check - # if using Poetry
# List available plugins
sru-lint plugins # if installed via snap
poetry run sru-lint plugins # if using Poetry
Authenticating to Launchpad
By default sru-lint talks to Launchpad anonymously, which is enough for the
public checks. ESM / Ubuntu Pro plugins query private PPAs (e.g.
ppa:ubuntu-esm/esm-infra-security) and need an authenticated session —
without it those checks are skipped or produce false negatives.
To authenticate once and cache the OAuth credentials in your keyring:
sru-lint login # opens a browser to authorize via OAuth
poetry run sru-lint login # equivalent when running from source
Subsequent sru-lint check runs reuse the cached credentials automatically.
Re-run sru-lint login only if the credentials expire or are revoked.
Note: if no usable keyring backend is available (headless session, snap
confinement blocking the keyring, etc.) the credentials cannot persist and
sru-lint check will fall back to anonymous access — sru-lint login will
warn you when this happens.
What it checks
- Changelog entries (valid distributions, LP bugs, version ordering)
- DEP-3 patch format compliance
- Launchpad integration (bug targeting, SRU templates, publication history)
- Upload queue conflicts
- And more via the plugin system...
Development
Run the full local check suite (ruff lint + format, mypy, unit tests, and functional tests) with a single command:
poetry run check-all
It runs every step even if an earlier one fails and prints a PASS/FAIL summary at the end, exiting non-zero if anything failed.
License
MIT License - see LICENSE for details.
Metadata
Release files for sru-lint 1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sru_lint-1.1.tar.gz | 41.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sru_lint-1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 94.3 kB
Release files / sru_lint-1.1.tar.gz
| Download URL | sru_lint-1.1.tar.gz |
|---|---|
| Size | 41.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b72e975bc02a404d3859e8d21226f40a9cb81aed19734c247f24cdaa91991e2e
|
|
BLAKE2b-256 checksum How to use checksums |
71569c04f2d5b870b7849f4d6c3bb570e87f03456e0ef3a4ab2e873a00990b08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 14, 2026.
Transparency logRelease files / sru_lint-1.1-py3-none-any.whl
| Download URL | sru_lint-1.1-py3-none-any.whl |
|---|---|
| Size | 52.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
67ec2ba3ff10998a22d78ccb01411b8b6411cc7247753eadde37667f5fe637ca
|
|
BLAKE2b-256 checksum How to use checksums |
e62d8eb66564c72df6c4287f6c123be427cde6f1e9f638dade4b954b9d9c1ac9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 14, 2026.
Transparency log