PDM plugin to sync your pre-commit versions with your lockfile, and install them, all automatically.
Project description
sync-pre-commit-lock
PDM and Poetry plugin to sync your pre-commit versions with your lockfile and automatically install pre-commit hooks.
Features
- 🔁 Sync pre-commit versions (including
additional_dependencies
) with your lockfile - ⏩ Run every time you run the lockfile is updated, not as a pre-commit hook
- 🔄 Install pre-commit hooks automatically, no need to run
pre-commit install
manually - 💫 Preserve your pre-commit config file formatting
- 🍃 Lightweight, only depends on strictyaml and packaging
Supported versions
- Python 3.9+
- PDM 2.7.4+
- Poetry 1.6.0+
Installation
For PDM
Install it just like any other PDM plugin:
pdm self add "sync-pre-commit-lock"
Optionally, you can also specify the plugin in your project pyproject.toml
, to make it installable with pdm install --plugins
:
[tool.pdm]
plugins = [
"sync-pre-commit-lock"
]
Note: we have an extra group
[pdm]
, that adds PDM version constraints. While it's safer, it might result in PDM being installed twice.
For Poetry
Install like any other Poetry plugin, e.g.:
poetry self add "sync-pre-commit-lock[poetry]"
Only Poetry 1.6.0+ is supported.
Configuration
This plugin is configured using the tool.sync-pre-commit-lock
section in your pyproject.toml
file.
Here is the default configuration:
[tool.sync-pre-commit-lock]
# Run `pre-commit install` automatically if applicable
automatically-install-hooks = true
# Should we sync your pre-commit versions with your lockfile (when running lock, add, update, remove, etc.)?
disable-sync-from-lock = false
# Packages to ignore when syncing from lock
ignore = []
# Name of the pre-commit config file to sync with
pre-commit-config-file = ".pre-commit-config.yaml"
# Additional mapping of URLs to python packages
# Default is empty, but will merge with the default mapping
# "rev" indicates the format of the Git tags
dependency-mapping = {"package-name"= {"repo"= "https://github.com/example/package-name", "rev"= "v${rev}"}}
Note: the
dependency-mapping
is merged with the default mapping, so you don't need to specify the default mapping if you want to add a new mapping. Repos urls will be normalized to http(s), with the trailing slash removed.
From environment
Some settings are overridable by environment variables with the following SYNC_PRE_COMMIT_LOCK_*
prefixed environment variables:
toml setting |
environment | format |
---|---|---|
automatically-install-hooks |
SYNC_PRE_COMMIT_LOCK_INSTALL |
bool as string (true , 1 ...) |
disable-sync-from-lock |
SYNC_PRE_COMMIT_LOCK_DISABLED |
bool as string (true , 1 ...) |
ignore |
SYNC_PRE_COMMIT_LOCK_IGNORE |
comma-separated list |
pre-commit-config-file |
SYNC_PRE_COMMIT_LOCK_PRE_COMMIT_FILE |
str |
Usage
Once installed, and optionally configured, the plugin usage should be transparent, and trigger when you run applicable PDM or Poetry commands, like pdm lock
, or poetry lock
.
There should be a message in the output, when the sync or install or pre-commit is triggered.
You can manually trigger the sync with the CLI command:
pdm sync-pre-commit
or
poetry sync-pre-commit
Both commands support --dry-run
and verbosity options.
Supported packages for pre-commits
Here is the list of default packages supported by this plugin, from db.py
. You can add more packages using the dependency-mapping
configuration.
- autopep8
- bandit
- black
- check-jsonschema
- codespell
- commitizen
- djhtml
- docformatter
- flake8
- flakeheaven
- isort
- mypy
- pdm
- poetry
- pycln
- pyroma
- pyupgrade
- rtscheck
- ruff
- yamllint
Note:
pdm
orpoetry
version will be added, from the current instance version, and not from the lockfile.
Improvement ideas
Feel free to open an issue or a PR if you have any idea, or if you want to help!
Release / CI / DX
- Add a changelog
- Add "E2E" tests
- Add docs
Features or fixes
- Support hooks URL aliases for the same Python package
- Support user configuration of aliases
- Support
pdm config
and clear configuration precedence - Create a more verbose command
- Add support for other lockfiles / project managers (pipenv, flit, hatch, etc.)
- Expose a pre-commit hook to sync the lockfile
- Support nested
additional_dependencies
, (i.e. mypy types) - Support reading DB from a Python module?
- Support reordering DB inputs (file/global config/python module/cli)?
- Test using SSH/file dependencies?
- Check ref existence before writing?
- New feature to convert from pre-commit online to local?
- Warning if pre-commit CI auto update is also set?
- Support automatic repository URL update (from legacy aliased repositories)
Inspiration
This project is inspired by @floatingpurr's sync_with_pdm and sync_with_poetry.
The code to install pre-commit hooks automatically is adapted from @vstrimaitis's poetry-pre-commit-plugin, licensed under GPL-3.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for sync_pre_commit_lock-0.7.0rc0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 804c2aca1ce1bd62b64df3a47a32e38021acd798f1a3d2a398bf4fd879537cd4 |
|
MD5 | a90ca58b22d40bbf1b58f58fcb821510 |
|
BLAKE2b-256 | 72bf43a04406fe913f7159c84d70f602477ea02aaa3d1b4c08dcd49344ccdb5b |
Hashes for sync_pre_commit_lock-0.7.0rc0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1928bbd5928336ff7070642dfa3395907b03c97297c92e7ce267afed147692a9 |
|
MD5 | 78b59f65569deda3408fea54644b7563 |
|
BLAKE2b-256 | c0fad0ee3218eaab2cefc95fd42b2ce84f629671337e6b550c7722d11976d419 |