Easily install and update centralized pre-commit hooks and their configuration files in decentralized repositories
Project description
Centralized pre-commit
configuration
Easily install and update centralized pre-commit hooks and their configuration files in decentralized repositories.
To be able to validate and automatically fix commits we're using git hooks.
We're also heavily relying on pre-commit
, which is a framework for managing and
maintaining multi-language pre-commit hooks. Please refer to the
pre-commit documentation here.
Philosophy
In order to be able to install all the tools and linters in a single command with up to
date centralized configurations, we're copying the configurations files of your tools
(.pre-commit-config.yaml
, isort.cfg
, .flake8
, .clang-format
, ...) from an URL to
your local git directory and we then install pre-commit
.
Why not use only pre-commit
by @asotile? Well,
in his words:
pre-commit will not directly support mutability in configuration (this includes referencing a centralized repository). This causes lots of issues with repeatability and maintenance in general. This was an early design decision after seeing the pain caused at scale when a linter changes behaviour and suddenly every repository's master branch is broken.
So if you disagree and want decentralized repository with centralized lint configuration, you need a tool on top of pre-commit to shoot yourself in the foot anyway. Or more realistically to update your configuration files from a central repository from time to time.
More seriously, the alternative is to use all-repos to mass update a bunch of decentralized repositories with a decentralized configuration.
Installation
pip3 install centralized-pre-commit-conf
Usage
See pre-commit-conf --help
for options.
Installing hooks
For example with this config.yaml
in
one of the appropriate search paths:
configuration_files:
- ".pylintrc"
- ".pre-commit-config.yaml"
repository: https://mycompany.net/lint-conf/
branch: master
update_gitignore: True
path: "pre-commit/static/"
gitignore_info_text:
"# Configuration file added automatically by 'centralized-pre-commit-conf'"
pre-commit-conf
would recover the defined configuration files from
https://mycompany.net/lint-conf/master/pre-commit/static/
and update the .gitignore
:
You can set the option system wide in /home/pierre/.config/pre-commit-conf/config.yaml.
✨ Successfully retrieved .pre-commit-config.yaml ✨
✨ Successfully retrieved .pylintrc ✨
✨ Updated .gitignore successfully with {'.pre-commit-config.yaml', '.pylintrc'}. ✨
🎉 2 configuration files recovered and pre-commit installed correctly. 🎉
Here would the content of the .gitignore
:
# Configuration file added automatically by 'centralized-pre-commit-conf'
.pre-commit-config.yaml
.pylintrc
Then with the same configuration, using pre-commit-conf --branch hardcore-pylint-conf
would try to recover the configuration files from
https://mycompany.net/lint-conf/hardcore-pylint-conf/pre-commit/static/
instead.
You can set the option system wide in /home/pierre/.config/pre-commit-conf/config.yaml.
Found existing .pre-commit-config.yaml ⁉️ Use '-f' or '--replace-existing' to force erase.
Found existing .pylintrc ⁉️ Use '-f' or '--replace-existing' to force erase.
All configuration files already existed.
Next commit supposing the .pre-commit-config.yaml
is done correctly your modified
files we be linted with the centralized configuration.
Development / contribution
pip3 install -e ".[test]"
pre-commit-conf
python3 -m pytest --cov centralized_pre_commit_conf
Pull requests are welcome :)
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 centralized-pre-commit-conf-0.4.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d442d2b89666b4e8d683564cccd1a53e3d9d0fe5826eb1baf1b5eec2ac5888e6 |
|
MD5 | 959856a22bc4b27f7f4f62b37d7748c9 |
|
BLAKE2b-256 | f4cfdfefc2b4e0cf33f6f19727fee373bb7df5b39bb5eb2906b6c7b986b7d476 |
Hashes for centralized_pre_commit_conf-0.4.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | adb01b15cf8efc7741d680e6e6a7d9e71a571a70437e28be379cd3b634150cd0 |
|
MD5 | 2f9a418eaa9ffc9f44f71ea0aa458602 |
|
BLAKE2b-256 | e8ebbad63d53c15ed898d801956334a14c101155cc6668f8b7f61bb563775e2c |