Skip to main content

✨ Enhance your Python repository by adding cutting-edge development tools

Project description

Pimp My Repo

PyPI CI codecov Ruff Type checked: mypy

🧙🏼‍♂️ One command to modernize them all.

Strict linting, type checking, and CI for your legacy Python repo, with near-zero manual work. Run it once in your repo root — it creates its own local branch (nothing is pushed), so you can always walk away:

uvx pimp-my-repo

Alternatively, hand it off to your LLM — it can run PMR, review the result with full knowledge of the codebase, and clean up anything the automated run got slightly wrong:

📋 LLM prompt (click to expand)
From the repo root, on a clean branch, run `uvx pimp-my-repo`.

When the run finishes, read the output and follow any instructions printed.
Since you know this repo's structure, conventions, and goals, review the
created branch and fix anything that looks wrong or misconfigured — CI jobs,
pre-commit hooks, justfile recipes, etc.

If the run failed:
  1. Find and inspect the log file it mentions.
  2. If the failure has a straightforward fix in the repo's own code
     (e.g. a broken import, a missing config key, an incompatible
     dependency), go back to the original branch, delete the PMR branch,
     apply the minimal fix on a new branch, then re-run `uvx pimp-my-repo`
     from there.
  3. If the failure looks like a PMR bug or something you can't easily fix,
     stop and report what you found.

For context and reference on PMR, see https://github.com/asaf-kali/pimp-my-repo/blob/main/README.md.

Why legacy repos stay legacy

Adopting strict linting and type checking sounds great — until you run Ruff or Mypy for the first time and see 17,000 violations. Fixing them all before you can enforce a single rule isn't practical, so the tools stay off or "loose," and the debt compounds.

The baseline approach

pimp-my-repo skips the manual fix step entirely:

  1. Configures tools in strict mode: Ruff with all rules enabled, Mypy with --strict (or ty with error-on-warning).
  2. Suppresses all existing violations: automatically adds # noqa and # type: ignore / # ty: ignore to every current offender.
  3. Commits the result: you get a clean, passing CI baseline immediately.

New code must comply from day one. Legacy violations are silenced but visible; fix them incrementally, at your own pace, without blocking anyone.

What gets added

  • 🚀 uv — modern dependency management
  • Ruff — linting and formatting, strict mode, all existing violations suppressed
  • 🐍 Mypy — static type checking, strict mode, all existing errors suppressed
  • ty (opt-in via --ty) — Astral's fast type checker as a drop-in alternative to mypy
  • 🏖️ pre-commit — hooks to enforce quality before every commit
  • 🎢 just — task runner with install, test, and lint recipes out of the box
  • 🏗️ CI (coming soon) — GitHub Actions or GitLab Pipeline configuration

Using ty instead of mypy

Pass --ty to replace the mypy boost with ty:

uvx pimp-my-repo --ty

ty runs dramatically faster than mypy and catches a different (often broader) set of type errors.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pimp_my_repo-0.5.0.tar.gz (161.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pimp_my_repo-0.5.0-py3-none-any.whl (58.8 kB view details)

Uploaded Python 3

File details

Details for the file pimp_my_repo-0.5.0.tar.gz.

File metadata

  • Download URL: pimp_my_repo-0.5.0.tar.gz
  • Upload date:
  • Size: 161.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pimp_my_repo-0.5.0.tar.gz
Algorithm Hash digest
SHA256 0ff1af37392113a2233f2b943d0ceebb03baf6654ab6ef4d6f0b11cd941945d9
MD5 2332af97cf4180285c32c30f0f1669c2
BLAKE2b-256 f993accddedba67af39dcc8827ff4e3f8a6775088393437a4aba681ca7765e53

See more details on using hashes here.

Provenance

The following attestation bundles were made for pimp_my_repo-0.5.0.tar.gz:

Publisher: ci.yml on asaf-kali/pimp-my-repo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pimp_my_repo-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: pimp_my_repo-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 58.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pimp_my_repo-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a64c6e0e251995214aee3c453e5ead79a25a369859bd30adb9de6369e75881fb
MD5 e17331a22aa2f2829c5c37d5cc61e51f
BLAKE2b-256 34899c9cd4105a7a2ec88b16c1c1d2beea6808d8e49e73916e3ffe6ed3d537af

See more details on using hashes here.

Provenance

The following attestation bundles were made for pimp_my_repo-0.5.0-py3-none-any.whl:

Publisher: ci.yml on asaf-kali/pimp-my-repo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page