Travis CI: Use flake8 to find Python syntax errors or undefined names
authorcclauss <cclauss@bluewin.ch>
Tue, 16 Oct 2018 05:18:00 +0000 (07:18 +0200)
committerDr. Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Tue, 20 Nov 2018 18:02:12 +0000 (19:02 +0100)
CLA: trivial

In Travis CI, add a Python linting step that runs flake8 tests in Travis CI
to find syntax errors and undefined names. (http://flake8.pycqa.org)

__E901,E999,F821,F822,F823__ are the "_showstopper_" flake8 issues that can halt
the runtime with a SyntaxError, NameError, etc. Most other flake8 issues are
merely "style violations" -- useful for readability but they do not effect
runtime safety.

* F821: undefined name `name`
* F822: undefined name `name` in `__all__`
* F823: local variable name referenced before assignment
* E901: SyntaxError or IndentationError
* E999: SyntaxError -- failed to compile a file into an Abstract Syntax Tree

Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/7410)

.travis.yml

index 764da28..0124368 100644 (file)
@@ -120,6 +120,18 @@ matrix:
                       - gcc-mingw-w64
           compiler: x86_64-w64-mingw32-gcc
           env: EXTENDED_TEST="yes" CONFIG_OPTS="no-pic"
+        - os: linux
+          language: python
+          python: 3.7
+          dist: xenial    # required for Python 3.7 (travis-ci/travis-ci#9069)
+          sudo: required  # required for Python 3.7 (travis-ci/travis-ci#9069)
+          install: pip install flake8
+          before_script:
+            # stop the build if there are Python syntax errors or undefined names
+            - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
+            # exit-zero treats all errors as warnings.  The GitHub editor is 127 chars wide
+            - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+          script: true
     exclude:
         - os: linux
           compiler: clang