From af7c98a9084f0bf01ce1ea23c14e9dca6ea9c0f1 Mon Sep 17 00:00:00 2001 From: Slawek Kaplonski Date: Fri, 26 Apr 2024 13:06:01 +0200 Subject: [PATCH] Add pre-commit configuration 'pre-commit' tool [1] provides an extensible way to configure hooks which can be run automatically before each commit. That way we can make sure that code send to review is passing base static analysis checks like e.g. bandit, flake8 or hacking. For now this is optional to use and not integrated in e.g. tox.ini file but we can integrate it there too as next step. [1] https://pre-commit.com/ Change-Id: Ia3bc21ccacacbcb8a529163533557312cbbf25bd --- .pre-commit-config.yaml | 69 +++++++++++++++++++++++++++++++++++++++++ tools/coding-checks.sh | 6 ++++ 2 files changed, 75 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000000..253c9eebedf --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,69 @@ +--- +default_language_version: + # force all unspecified python hooks to run python3 + python: python3 +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: mixed-line-ending + args: ['--fix', 'lf'] + exclude: '.*\.(svg)$' + - id: check-byte-order-marker + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: debug-statements + - id: check-yaml + files: .*\.(yaml|yml)$ + exclude: 'rally-jobs/task-neutron.yaml' + - repo: https://opendev.org/openstack/bashate.git + rev: 2.1.1 + hooks: + - id: bashate + # E005 file does not begin with #! or have a .sh prefix + # E006 check for lines longer than 79 columns + # E042 local declaration hides errors + # E043 Arithmetic compound has inconsistent return semantics + args: ['-v', '-iE006', '-iE005,E042,E043'] + files: .*\.sh + exclude: '.tox/.*' + - repo: https://github.com/PyCQA/bandit + rev: 1.7.5 + hooks: + - id: bandit + # B104: Possible binding to all interfaces + args: ['-n5', '-sB104'] + files: 'neutron/' + exclude: 'neutron/tests' + - repo: https://github.com/lucas-c/pre-commit-hooks + rev: v1.5.4 + hooks: + - id: remove-tabs + exclude: '.*\.(svg)$' + - repo: https://opendev.org/openstack/hacking + rev: 6.1.0 + hooks: + - id: hacking + additional_dependencies: ['neutron', 'neutron-lib'] + exclude: '^(doc|releasenotes|tools)/.*$' + - repo: local + hooks: + - id: flake8 + name: flake8 + additional_dependencies: + - hacking>=6.1.0,<6.2.0 + - neutron + language: python + entry: flake8 + files: '^.*\.py$' + exclude: '^(doc|releasenotes|tools)/.*$' +# todo(slaweq): enable pylint check once all issues in the current code will +# be solved +# - id: pylint +# name: pylint +# entry: .tox/pep8/bin/pylint +# files: ^neutron/ +# language: system +# types: [python] +# args: ['--rcfile=.pylintrc', '--output-format=colorized'] diff --git a/tools/coding-checks.sh b/tools/coding-checks.sh index d852f98fe18..b81861abd4d 100755 --- a/tools/coding-checks.sh +++ b/tools/coding-checks.sh @@ -39,6 +39,12 @@ run_pylint () { echo "Running pylint..." echo "You can speed this up by running it on 'HEAD~[0-9]' (e.g. HEAD~1, this change only)..." + echo "" + echo "Consider using the 'pre-commit' tool instead." + echo "" + echo " pip install --user pre-commit" + echo " pre-commit install --allow-missing-config" + echo "" if [ -n "${files}" ]; then pylint --rcfile=.pylintrc --output-format=colorized ${files} else