Add pre-commit

This is helpful to automate code style checks at runtime. We include
documentation on how to run this as well as a general overview of style
guidelines in OSC.

Change-Id: I2dc5a0f760ce53269ae25677560b2611cc6bfd91
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
Stephen Finucane 2021-03-11 16:20:15 +00:00
parent 8e3dde03f9
commit 87e6828678
2 changed files with 69 additions and 13 deletions

29
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,29 @@
---
default_language_version:
# force all unspecified python hooks to run python3
python: python3
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.4.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)$
- repo: local
hooks:
- id: flake8
name: flake8
additional_dependencies:
- hacking>=2.0.0
- flake8-import-order>=0.13
language: python
entry: flake8
files: '^.*\.py$'
exclude: '^(doc|releasenotes|tools)/.*$'

View File

@ -6,16 +6,18 @@ Communication
------------- -------------
IRC Channel IRC Channel
=========== ~~~~~~~~~~~
The OpenStackClient team doesn't have regular meetings so if you have The OpenStackClient team doesn't have regular meetings so if you have
questions or anything you want to discuss, come to our channel: questions or anything you want to discuss, come to our channel:
#openstack-sdks #openstack-sdks
Testing Testing
------- -------
Tox prerequisites and installation Tox prerequisites and installation
================================== ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Install the prerequisites for Tox: Install the prerequisites for Tox:
@ -23,23 +25,22 @@ Install the prerequisites for Tox:
.. code-block:: bash .. code-block:: bash
$ apt-get install gcc gettext python-dev libxml2-dev libxslt1-dev \ $ apt-get install gcc gettext python3-dev libxml2-dev libxslt1-dev \
zlib1g-dev zlib1g-dev
You may need to use pip install for some packages. You may need to use pip install for some packages.
* On RHEL or CentOS including Fedora: * On RHEL or CentOS including Fedora:
.. code-block:: bash .. code-block:: bash
$ yum install gcc python-devel libxml2-devel libxslt-devel $ yum install gcc python3-devel libxml2-devel libxslt-devel
* On openSUSE or SUSE linux Enterprise: * On openSUSE or SUSE linux Enterprise:
.. code-block:: bash .. code-block:: bash
$ zypper install gcc python-devel libxml2-devel libxslt-devel $ zypper install gcc python3-devel libxml2-devel libxslt-devel
Install python-tox: Install python-tox:
@ -70,7 +71,7 @@ environments with the ``-e`` option, separated by spaces:
See ``tox.ini`` for the full list of available test environments. See ``tox.ini`` for the full list of available test environments.
Running functional tests Running functional tests
======================== ~~~~~~~~~~~~~~~~~~~~~~~~
OpenStackClient also maintains a set of functional tests that are optimally OpenStackClient also maintains a set of functional tests that are optimally
designed to be run against OpenStack's gate. Optionally, a developer may designed to be run against OpenStack's gate. Optionally, a developer may
@ -90,7 +91,7 @@ To run a specific functional test:
$ tox -e functional -- --regex functional.tests.compute.v2.test_server $ tox -e functional -- --regex functional.tests.compute.v2.test_server
Running with PDB Running with PDB
================ ~~~~~~~~~~~~~~~~
Using PDB breakpoints with ``tox`` and ``testr`` normally does not work since Using PDB breakpoints with ``tox`` and ``testr`` normally does not work since
the tests fail with a `BdbQuit` exception rather than stopping at the the tests fail with a `BdbQuit` exception rather than stopping at the
@ -109,8 +110,32 @@ For reference, the `debug`_ ``tox`` environment implements the instructions
.. _`debug`: https://wiki.openstack.org/wiki/Testr#Debugging_.28pdb.29_Tests .. _`debug`: https://wiki.openstack.org/wiki/Testr#Debugging_.28pdb.29_Tests
Building the Documentation Coding Style
-------------------------- ------------
OpenStackClient uses `flake8`__ along with `hacking`__, an OpenStack-specific
superset of ``flake8`` rules, to enforce coding style. This can be run manually
using ``tox``:
.. code-block:: bash
$ tox -e pep8
Alternatively, you can use the `pre-commit framework`__ to allow running of
some linters on each commit. This must be enabled locally to function:
.. code-block:: bash
$ pip install --user pre-commit
$ pre-commit install --allow-missing-config
.. __: https://flake8.pycqa.org/en/latest/
.. __: https://docs.openstack.org/hacking/latest/user/hacking.html
.. __: https://pre-commit.com/
Documentation
-------------
The documentation is generated with Sphinx using the ``tox`` command. To The documentation is generated with Sphinx using the ``tox`` command. To
create HTML docs, run the commands: create HTML docs, run the commands:
@ -121,6 +146,7 @@ create HTML docs, run the commands:
The resultant HTML will be in the ``doc/build/html`` directory. The resultant HTML will be in the ``doc/build/html`` directory.
Release Notes Release Notes
------------- -------------
@ -156,6 +182,7 @@ To run the commands and see results:
At last, look at the generated release notes files in ``releasenotes/build/html`` in your browser. At last, look at the generated release notes files in ``releasenotes/build/html`` in your browser.
Testing new code Testing new code
---------------- ----------------
@ -174,7 +201,7 @@ or
$ pip install -e . $ pip install -e .
Standardize Import Format Standardize Import Format
========================= ~~~~~~~~~~~~~~~~~~~~~~~~~
More information about Import Format, see `Import Order Guide More information about Import Format, see `Import Order Guide
<https://docs.openstack.org/hacking/latest/user/hacking.html#imports>`__. <https://docs.openstack.org/hacking/latest/user/hacking.html#imports>`__.
@ -193,7 +220,7 @@ The import order shows below:
{{begin your code}} {{begin your code}}
Example Example
~~~~~~~ ^^^^^^^
.. code-block:: python .. code-block:: python