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.
PDM Github Action support
If you use pdm-project/update-deps-actions Github Action, you can get automatically update your .pre-commit-config.yaml
file by adding the plugin in your pyproject.toml
and setting a flag in your workflow:
# In your workflow
- name: Update dependencies
uses: pdm-project/update-deps-action@main
with:
# Whether to install PDM plugins before update (defaults to "false")
install-plugins: "true"
# In your pyproject.toml
[tool.pdm]
plugins = ["sync-pre-commit-lock"]
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
- djade
- 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
File details
Details for the file sync_pre_commit_lock-0.7.2.tar.gz
.
File metadata
- Download URL: sync_pre_commit_lock-0.7.2.tar.gz
- Upload date:
- Size: 57.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.19.3 CPython/3.10.12 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59d5eae64f47505f8265179703f8ba151a9f5dc25408cc424c37b90de06e3308 |
|
MD5 | 7db316f5ffa366d79adf0b3e9109bf3d |
|
BLAKE2b-256 | 65dc72dc82fc9c0337bad8206a30771e471bc2bc6d710f9eb1e9fe4e0aa31770 |
File details
Details for the file sync_pre_commit_lock-0.7.2-py3-none-any.whl
.
File metadata
- Download URL: sync_pre_commit_lock-0.7.2-py3-none-any.whl
- Upload date:
- Size: 45.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.19.3 CPython/3.10.12 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7e88ea73185b5b31411c77c5c7f34aa530106b113ac191d0f439c8472a0b02a |
|
MD5 | a4d6d845ad8caa5e20660c7114665e4b |
|
BLAKE2b-256 | aa28c404f5ee423d99f6eb39189d2ec8ac15f691971e42d09a1ad80eba0dfd1e |