Skip to main content

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)

Source distribution for sru-lint 1.1
File Size Uploaded
sru_lint-1.1.tar.gz 41.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sru-lint 1.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.1 This release

2 release files

1.0

2 release files

0.1.1

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