diff --git a/.zuul.yaml b/.zuul.yaml index eda83670..4808a516 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -19,50 +19,12 @@ jobs: - stx-ha-upload-git-mirror -- job: - name: flock-devstack-ha - parent: flock-devstack-base-min - required-projects: - - openstack/barbican - - openstack/python-barbicanclient - - starlingx/config - - starlingx/fault - - starlingx/integ - - starlingx/metal - - starlingx/nfv - - starlingx/update - vars: - tox_envlist: functional - devstack_services: - # StarlingX services - fm-common: true - fm-api: true - sm-common: true - sm-db: true - sm-daemon: true - sm-client: true - sm-tools: true - sm-api: true - sm-eru: true - mysql: false - postgresql: true - tls-proxy: false - devstack_plugins: - barbican: https://opendev.org/openstack/barbican - config: https://opendev.org/starlingx/config - fault: https://opendev.org/starlingx/fault - ha: https://opendev.org/starlingx/ha - integ: https://opendev.org/starlingx/integ - metal: https://opendev.org/starlingx/metal - nfv: https://opendev.org/starlingx/nfv - update: https://opendev.org/starlingx/update - - job: name: ha-tox-pylint parent: tox description: | - Run pylint test for ha in python2.7 - nodeset: ubuntu-bionic + Run pylint test for ha in python3 + nodeset: debian-bullseye vars: tox_envlist: pylint - job: diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 00000000..835f068c --- /dev/null +++ b/bindep.txt @@ -0,0 +1,7 @@ +# This is a cross-platform list tracking distribution packages needed for install and tests; +# see https://docs.openstack.org/infra/bindep/ for additional information. + +build-essential [platform:dpkg] +python3-dev [platform:dpkg] +# default-libmysqlclient-dev is debian specific +default-libmysqlclient-dev [platform:debian] diff --git a/pylint.rc b/pylint.rc index 65004e13..1aa46205 100755 --- a/pylint.rc +++ b/pylint.rc @@ -20,138 +20,60 @@ load-plugins= # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option # multiple time. -# -# Python3 checker: -# -# E1601: print-statement -# E1602: parameter-unpacking -# E1603: unpacking-in-except -# E1604: old-raise-syntax -# E1605: backtick -# E1606: long-suffix -# E1607: old-ne-operator -# E1608: old-octal-literal -# E1609: import-star-module-level -# E1610: non-ascii-bytes-literal -# E1611: invalid-unicode-literal -# W1601: apply-builtin -# W1602: basestring-builtin -# W1603: buffer-builtin -# W1604: cmp-builtin -# W1605: coerce-builtin -# W1606: execfile-builtin -# W1607: file-builtin -# W1608: long-builtin -# W1609: raw_input-builtin -# W1610: reduce-builtin -# W1611: standarderror-builtin -# W1612: unicode-builtin -# W1613: xrange-builtin -# W1614: coerce-method -# W1615: delslice-method -# W1616: getslice-method -# W1617: setslice-method -# W1618: no-absolute-import -# W1619: old-division -# W1620: dict-iter-method -# W1621: dict-view-method -# W1622: next-method-called -# W1623: metaclass-assignment -# W1624: indexing-exception -# W1625: raising-string -# W1626: reload-builtin -# W1627: oct-method -# W1628: hex-method -# W1629: nonzero-method -# W1630: cmp-method -# W1632: input-builtin -# W1633: round-builtin -# W1634: intern-builtin -# W1635: unichr-builtin -# W1636: map-builtin-not-iterating -# W1637: zip-builtin-not-iterating -# W1638: range-builtin-not-iterating -# W1639: filter-builtin-not-iterating -# W1640: using-cmp-argument -# W1641: eq-without-hash -# W1642: div-method -# W1643: idiv-method -# W1644: rdiv-method -# W1645: exception-message-attribute -# W1646: invalid-str-codec -# W1647: sys-max-int -# W1648: bad-python3-import -# W1649: deprecated-string-function -# W1650: deprecated-str-translate-call -# W1651: deprecated-itertools-function -# W1652: deprecated-types-field -# W1653: next-method-defined -# W1654: dict-items-not-iterating -# W1655: dict-keys-not-iterating -# W1656: dict-values-not-iterating -# W1657: deprecated-operator-function -# W1658: deprecated-urllib-function -# W1659: xreadlines-attribute -# W1660: deprecated-sys-function -# W1661: exception-escape -# W1662: comprehension-escape -enable=E1603,E1609,E1610,E1602,E1606,E1608,E1607,E1605,E1604,E1601,E1611,W1652, - W1651,W1649,W1657,W1660,W1658,W1659,W1623,W1622,W1620,W1621,W1645,W1641, - W1624,W1648,W1625,W1611,W1662,W1661,W1650,W1640,W1630,W1614,W1615,W1642, - W1616,W1628,W1643,W1629,W1627,W1644,W1617,W1601,W1602,W1603,W1604,W1605, - W1654,W1655,W1656,W1619,W1606,W1607,W1639,W1618,W1632,W1634,W1608,W1636, - W1653,W1646,W1638,W1609,W1610,W1626,W1633,W1647,W1635,W1612,W1613,W1637 # Disable the message, report, category or checker with the given id(s). You # can either give multiple identifier separated by comma (,) or put this option # multiple time (only on the command line, not in the configuration file where # it should appear only once). -# W0102 dangerous-default-value -# W0107 unnecessary-pass -# W0110 deprecated-lambda -# W0120 useless-else-on-loop -# W0201 attribute-defined-outside-init -# W0212 protected-access -# W0221 arguments-differ -# W0223 abstract-method -# W0231 super-init-not-called -# W0235 useless-super-delegation -# W0402 deprecated-module -# W0403 relative-import -# W0511 fixme -# W0603 global-statement -# W0611 unused-import -# W0612 unused-variable -# W0613 unused-argument -# W0621 redefined-outer-name -# W0622 redefined-builtin -# W0702 bare-except -# W0703 broad except warning -# W1113 keyword-arg-before-vararg -# W1201 logging-not-lazy -# W1401 anomalous-backslash-in-string -# W1618: no-absolute-import -# -# The following are errors which should be fixed -# -# method-hidden (E0202) -# access-member-before-definition (E0203) -# undefined-variable (E0602) -# invalid-all-object (E0604) -# no-name-in-module (E0611) -# raising-bad-type (E0702) -# notimplemented-raised (E0711) -# bad-super-call (E1003) -# no-member (E1101) -# not-callable (E1102) -# too-many-function-args (E1121) -# unsubscriptable-object (E1136) disable=C, R, - W0102, W0107, W0110, W0120, W0201, W0212, W0221, W0223, W0231, W0235, W0402, W0403, - W0511, W0603, W0611, W0612, W0613, W0621, W0622, W0702, W0703, W1113, W1201, W1401, - W1618, - E0202, E0203, E0602, E0604, E0611, E0702, E0711, E1003, E1101, E1102, E1121, E1136 - + W0102, # dangerous-default-value + W0107, # unnecessary-pass + W0120, # useless-else-on-loop + W0143, # comparison-with-callable + W0201, # attribute-defined-outside-init + W0212, # protected-access + W0221, # arguments-differ + W0223, # abstract-method + W0231, # super-init-not-called + W0235, # useless-super-delegation + W0237, # arguments-renamed + W0402, # deprecated-module + W0511, # fixme + W0602, # global-variable-not-assigned + W0603, # global-statement + W0611, # unused-import + W0612, # unused-variable + W0613, # unused-argument + W0621, # redefined-outer-name + W0622, # redefined-builtin + W0702, # bare-except + W0703, # broad except warning + W0707, # raise-missing-from + W0719, # broad-exception-raised + W1113, # keyword-arg-before-vararg + W1201, # logging-not-lazy + W1401, # anomalous-backslash-in-string + W1509, # subprocess-popen-preexec-fn + W1514, # unspecified-encoding + W1618, # no-absolute-import + W4902, # deprecated-method + E0202, # method-hidden + E0203, # access-member-before-definition + E0601, # used-before-assignment + E0602, # undefined-variable + E0604, # invalid-all-object + E0605, # invalid-all-format + E0611, # no-name-in-module + E0702, # raising-bad-type + E0711, # notimplemented-raised + E1003, # bad-super-call + E1101, # no-member + E1102, # not-callable + E1121, # too-many-function-args + E1123, # unexpected-keyword-arg + E1124, # redundant-keyword-arg + E1135, # unsupported-membership-test + E1136 # unsubscriptable-object [REPORTS] @@ -159,11 +81,6 @@ disable=C, R, # (visual studio) and html output-format=text -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - # Tells whether to display a full report or only the messages reports=no @@ -214,9 +131,6 @@ generated-members=uuid [BASIC] -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input - # Regular expression which should only match correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ @@ -306,7 +220,7 @@ max-locals=15 max-returns=6 # Maximum number of branch for function / method body -max-branchs=12 +max-branches=12 # Maximum number of statements in function / method body max-statements=50 diff --git a/tox.ini b/tox.ini index e9d161f0..12df9d3b 100644 --- a/tox.ini +++ b/tox.ini @@ -4,8 +4,9 @@ minversion = 2.3 skipsdist = True [testenv] +basepython = python3 install_command = pip install \ - -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/stable/stein/upper-constraints.txt} \ + -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/starlingx/root/raw/branch/master/build-tools/requirements/debian/upper-constraints.txt} \ {opts} {packages} setenv = VIRTUAL_ENV={envdir} OS_STDOUT_CAPTURE=1 @@ -14,8 +15,7 @@ setenv = VIRTUAL_ENV={envdir} deps = -r{toxinidir}/test-requirements.txt allowlist_externals = reno -[testenv:linters] -basepython = python3 +[testenv:bashate] allowlist_externals = bash commands = bash -c "find {toxinidir} \ @@ -29,14 +29,22 @@ commands = -wholename \*/devstack/\* \ \) \ -print0 | xargs -r -n 1 -0 bashate -v -e E* -i E006" - bash -c "find {toxinidir} \ - \( -name middleware/io-monitor/recipes-common/io-monitor/io-monitor/io_monitor/test-tools/yaml/* -prune \) \ - -o \( -name .tox -prune \) \ + +[testenv:yamllint] +allowlist_externals = bash +commands = + bash -c "find {toxinidir} \ + \( -name .tox -prune \) \ -o -type f -name '*.yaml' \ -print0 | xargs -0 yamllint" +[testenv:linters] +allowlist_externals = bash +commands = + {[testenv:bashate]commands} + {[testenv:yamllint]commands} + [testenv:pylint] -basepython = python2.7 deps = {[testenv]deps} eventlet httplib2 @@ -44,7 +52,7 @@ deps = {[testenv]deps} jsonpatch keystonemiddleware kombu - MySQL-python + mysqlclient oslo.config pecan prettytable @@ -99,7 +107,6 @@ enable-extensions = H203 max-line-length = 110 [testenv:pep8] -basepython = python3 usedevelop = False skip_install = True deps = @@ -109,11 +116,9 @@ commands = flake8 [testenv:venv] -basepython = python3 commands = {posargs} [testenv:docs] -basepython = python3 install_command = pip install -U {opts} {packages} deps = -r{toxinidir}/doc/requirements.txt commands = @@ -122,7 +127,6 @@ commands = allowlist_externals = rm [testenv:releasenotes] -basepython = python3 deps = -r{toxinidir}/doc/requirements.txt commands = rm -rf releasenotes/build @@ -130,7 +134,6 @@ commands = allowlist_externals = rm [testenv:newnote] -basepython = python3 # Re-use the releasenotes venv install_command = pip install -U {opts} {packages} envdir = {toxworkdir}/releasenotes @@ -138,7 +141,6 @@ deps = -r{toxinidir}/doc/requirements.txt commands = reno new {posargs} [testenv:api-ref] -basepython = python3 install_command = pip install -U {opts} {packages} deps = -r{toxinidir}/doc/requirements.txt @@ -152,7 +154,15 @@ allowlist_externals = rm skips = B411 [testenv:bandit] -basepython = python3 description = Bandit code scan for *.py files under config folder deps = -r{toxinidir}/test-requirements.txt commands = bandit --ini tox.ini -r {toxinidir}/ -x '**/.tox/**',**/.eggs/** -lll + +[testenv:bindep] +# Do not install any requirements. We want this to be fast and work even if +# system dependencies are missing, since it's used to tell you what system +# dependencies are missing! This also means that bindep must be installed +# separately, outside of the requirements files. +skip_install = True +deps = bindep +commands = bindep test