From 6bd8a4df1e97e84cd749b9c44f0a5d90548adeac Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Thu, 17 Oct 2019 13:51:03 +0100 Subject: [PATCH] fixed linters - workaround for ansible-lint failure with new setuptools - bumping linters - consolidated linters configuration Partial-Bug: https://bugs.launchpad.net/tripleo/+bug/1848512 Change-Id: Ic763d5b39d5059526ee5de99fec82bec7524d460 --- .pre-commit-config.yaml | 8 ++-- bindep.txt | 3 ++ ci-scripts/ansible_rules/ShellPipefail.py | 53 --------------------- setup.cfg | 12 +++++ test-requirements.txt | 1 - tox.ini | 56 ++++++++--------------- 6 files changed, 37 insertions(+), 96 deletions(-) create mode 100644 bindep.txt delete mode 100644 ci-scripts/ansible_rules/ShellPipefail.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 46cd928f9..9f5118b3f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ --- repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v2.0.0 + rev: v2.3.0 hooks: - id: trailing-whitespace - id: mixed-line-ending @@ -15,14 +15,14 @@ repos: - id: check-yaml files: .*\.(yaml|yml)$ - repo: https://github.com/adrienverge/yamllint.git - rev: v1.13.0 + rev: v1.18.0 hooks: - id: yamllint files: \.(yaml|yml)$ types: [file, yaml] entry: yamllint --strict -f parsable - repo: https://github.com/ansible/ansible-lint - rev: v3.5.1 + rev: v4.1.1a0 hooks: - id: ansible-lint files: \.(yaml|yml)$ @@ -31,7 +31,6 @@ repos: rev: 0.6.0 hooks: - id: bashate - entry: bashate --error . --verbose --ignore=E006,E040 # Run bashate check for all bash scripts # Ignores the following rules: # E006: Line longer than 79 columns (as many scripts use jinja @@ -39,3 +38,4 @@ repos: # E040: Syntax error determined using `bash -n` (as many scripts # use jinja templating, this will often fail and the syntax # error will be discovered in execution anyway) + entry: bashate --error . --verbose --ignore=E006,E040 diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 000000000..41b90e133 --- /dev/null +++ b/bindep.txt @@ -0,0 +1,3 @@ +# debian requirements (linters) +libffi-dev [platform:dpkg] +libssl-dev [platform:dpkg] diff --git a/ci-scripts/ansible_rules/ShellPipefail.py b/ci-scripts/ansible_rules/ShellPipefail.py deleted file mode 100644 index fbb73cfb9..000000000 --- a/ci-scripts/ansible_rules/ShellPipefail.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright Red Hat, Inc. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. - -from ansiblelint import AnsibleLintRule - - -def incorrect_task(task, cmd): - if 'shell' not in task: - return False - if 'register' in task: - return False - if task.get('ignore_errors'): - return False - - if isinstance(task['shell'], dict): - args = task['shell']['cmd'].split() - else: - args = task['shell'].split() - if not set(args).isdisjoint(cmd) and 'pipefail' not in args: - return True - - return False - - -class ShellPipefail(AnsibleLintRule): - id = 'OOOQ0001' - shortdesc = 'Shell should have a pipefail' - description = 'Shell commands should have "set -o pipefail" if using PIPE' - tags = ['shell'] - cmd = ["|", "timestamper_cmd"] - - def matchplay(self, file, play): - ret = [] - if play.get('block') and not play.get('ignore_errors'): - block = play['block'] - for task in block: - if incorrect_task(task, self.cmd): - ret.append((file, self.shortdesc)) - else: - if incorrect_task(play, self.cmd): - ret.append((file, self.shortdesc)) - return ret diff --git a/setup.cfg b/setup.cfg index 8b5930faa..9278fd116 100644 --- a/setup.cfg +++ b/setup.cfg @@ -36,3 +36,15 @@ universal = 1 [pbr] skip_authors = True skip_changelog = True + +[flake8] +# E123, E125 skipped as they are invalid PEP-8. +# E402 module level import not at top of file +# E501 line too long +# F403 'from ansible.module_utils.basic import *' used; unable to detect undefined names +# H303 No wildcard (*) import +# H301 one import per line +# F405 ... may be undefined, or defined from star imports: +show-source = True +ignore = E123,E125,E402,E501,F403,H303,H301,F405 +builtins = _ diff --git a/test-requirements.txt b/test-requirements.txt index 3370341c8..2a07585cd 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,6 +1,5 @@ openstackdocstheme>=1.11.0 # Apache-2.0 -pre-commit>=1.10 # MIT License sphinx>=1.6.2 # BSD reno>=1.8.0 # Apache-2.0 jinja2 diff --git a/tox.ini b/tox.ini index 0599e3c3c..46795f923 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -minversion = 2.0 +minversion = 3.4.0 envlist = linters skipdist = True @@ -7,6 +7,15 @@ skipdist = True usedevelop = True install_command = pip install -U {opts} {packages} setenv = VIRTUAL_ENV={envdir} +passenv = + ANSIBLE_* + CURL_CA_BUNDLE + DOCKER_* + MOLECULE_* + REQUESTS_CA_BUNDLE + SSH_AUTH_SOCK + SSL_CERT_FILE + TERM deps = -r{toxinidir}/test-requirements.txt whitelist_externals = bash @@ -23,21 +32,6 @@ commands = bindep test basepython = python3 commands = python setup.py build_sphinx -[testenv:bashate] -envdir = {toxworkdir}/linters -commands = - python -m pre_commit run bashate --all-files - -[testenv:pep8] -basepython = python3 -envdir = {toxworkdir}/linters -commands = - python -m pre_commit run flake8 --all-files - -[testenv:ansible-lint] -envdir = {toxworkdir}/linters -commands = - python -m pre_commit run ansible-lint -a [testenv:releasenotes] basepython = python3 @@ -46,30 +40,16 @@ commands = bash -c ci-scripts/releasenotes_tox.sh [testenv:linters] basepython = python3 +deps = + # workaround for https://github.com/ansible/ansible-lint/issues/590 + virtualenv==16.3.0 # 16.7.6 not working + jinja2 + pre-commit commands = - # check only modified files: - python -m pre_commit run --source HEAD^ --origin HEAD - # in the future we may want to check entire repository: - # python -m pre_commit run yamllint --all-files - {[testenv:validate-jinja]commands} + python -m pre_commit run -a + # TODO(ssbarnea) make is a real pre-commit hook so we can reuse it + python ci-scripts/validate_jinja2.py [testenv:venv] basepython = python3 commands = {posargs} - -[flake8] -# E123, E125 skipped as they are invalid PEP-8. -# E402 module level import not at top of file -# E501 line too long -# F403 'from ansible.module_utils.basic import *' used; unable to detect undefined names -# H303 No wildcard (*) import -# H301 one import per line -# F405 ... may be undefined, or defined from star imports: -show-source = True -ignore = E123,E125,E402,E501,F403,H303,H301,F405 -builtins = _ - -[testenv:validate-jinja] -basepython=python2 -commands = - python ci-scripts/validate_jinja2.py