diff --git a/.zuul.yaml b/.zuul.yaml index d982b6509..71a743056 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -230,24 +230,24 @@ DIB_SIMPLE_INIT_NETWORKMANAGER: '1' - job: - name: nodepool-tox-py38 + name: nodepool-nox-py38 description: | Nodepool unit tests with ZooKeeper running - parent: tox-py38 - pre-run: playbooks/nodepool-tox/pre.yaml - vars: &nodepool_tox_vars - tox_environment: + parent: nox-py38 + pre-run: playbooks/nodepool-nox/pre.yaml + vars: &nodepool_nox_vars + nox_environment: NODEPOOL_ZK_CA: /opt/zookeeper/ca/certs/cacert.pem NODEPOOL_ZK_CERT: /opt/zookeeper/ca/certs/client.pem NODEPOOL_ZK_KEY: /opt/zookeeper/ca/keys/clientkey.pem - job: - name: nodepool-tox-py311 + name: nodepool-nox-py311 description: | Nodepool unit tests with ZooKeeper running - parent: tox-py311 - pre-run: playbooks/nodepool-tox/pre.yaml - vars: *nodepool_tox_vars + parent: nox-py311 + pre-run: playbooks/nodepool-nox/pre.yaml + vars: *nodepool_nox_vars nodeset: ubuntu-jammy - project: @@ -257,11 +257,11 @@ jobs: - opendev-buildset-registry - nodepool-build-image - - zuul-tox-docs - - tox-pep8 - - nodepool-tox-py38: + - zuul-nox-docs + - nox-linters + - nodepool-nox-py38: nodeset: ubuntu-focal - - nodepool-tox-py311 + - nodepool-nox-py311 - nodepool-functional-container-openstack-release - nodepool-functional-k8s - nodepool-functional-openshift @@ -272,11 +272,11 @@ gate: jobs: - nodepool-upload-image - - zuul-tox-docs - - tox-pep8 - - nodepool-tox-py38: + - zuul-nox-docs + - nox-linters + - nodepool-nox-py38: nodeset: ubuntu-focal - - nodepool-tox-py311 + - nodepool-nox-py311 - nodepool-functional-k8s - nodepool-functional-openshift - zuul-quick-start: @@ -291,7 +291,7 @@ release: jobs: - opendev-release-python - - zuul-publish-tox-docs + - zuul-publish-nox-docs - upload-docker-image: timeout: *image_build_timeout secrets: diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 000000000..61e2985cc --- /dev/null +++ b/noxfile.py @@ -0,0 +1,130 @@ +# Copyright 2022 Acme Gating, LLC +# +# 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. + +import os + +import nox + + +nox.options.error_on_external_run = True +nox.options.reuse_existing_virtualenvs = True +nox.options.sessions = ["tests-3", "linters"] + + +def set_env(session, var, default): + session.env[var] = os.environ.get(var, default) + + +def set_standard_env_vars(session): + set_env(session, 'OS_LOG_CAPTURE', '1') + set_env(session, 'OS_STDERR_CAPTURE', '1') + set_env(session, 'OS_STDOUT_CAPTURE', '1') + set_env(session, 'OS_TEST_TIMEOUT', '360') + set_env(session, 'SQLALCHEMY_WARN_20', '1') + # Set STATSD env variables so that statsd code paths are tested. + set_env(session, 'STATSD_HOST', 'localhost') + set_env(session, 'STATSD_PORT', '8125') + session.env['PYTHONWARNINGS'] = ','.join([ + 'always::DeprecationWarning:zuul.driver.sql.sqlconnection', + 'always::DeprecationWarning:tests.base', + 'always::DeprecationWarning:tests.unit.test_database', + 'always::DeprecationWarning:zuul.driver.sql.alembic.env', + 'always::DeprecationWarning:zuul.driver.sql.alembic.script', + ]) + + +@nox.session(python='3') +def bindep(session): + set_standard_env_vars(session) + set_env(session, 'SQLALCHEMY_WARN_20', '1') + session.install('bindep') + session.run('bindep', 'test') + + +@nox.session(python='3') +def cover(session): + set_standard_env_vars(session) + session.env['PYTHON'] = 'coverage run --source nodepool --parallel-mode' + session.install('-r', 'requirements.txt', + '-r', 'test-requirements.txt') + session.install('-e', '.') + session.run('stestr', '--test-path', './nodepool/tests/unit', + 'run', '--no-subunit-trace') + session.run('coverage', 'combine') + session.run('coverage', 'html', '-d', 'cover') + session.run('coverage', 'xml', '-o', 'cover/coverage.xml') + + +@nox.session(python='3') +def docs(session): + set_standard_env_vars(session) + session.install('-r', 'requirements.txt', + '-r', 'doc/requirements.txt') + session.install('-e', '.') + session.run('sphinx-build', '-E', '-W', '-d', 'doc/build/doctrees', + '-b', 'html', 'doc/source/', 'doc/build/html') + + +@nox.session(python='3') +def linters(session): + set_standard_env_vars(session) + session.install('flake8') + session.run('flake8', 'nodepool') + + +@nox.session(python='3') +def tests(session): + set_standard_env_vars(session) + session.install('-r', 'requirements.txt', + '-r', 'test-requirements.txt') + session.install('-e', '.') + session.run('stestr', '--test-path', './nodepool/tests/unit', + 'run', '--no-subunit-trace', + *session.posargs) + session.run('stestr', 'slowest') + + +@nox.session(python='3') +def functional_kubernetes(session): + set_standard_env_vars(session) + session.install('-r', 'requirements.txt', + '-r', 'test-requirements.txt') + session.install('-e', '.') + session.run('stestr', + '--test-path', './nodepool/tests/functional/kubernetes', + 'run', '--no-subunit-trace', + *session.posargs) + session.run('stestr', 'slowest') + + +@nox.session(python='3') +def functional_openshift(session): + set_standard_env_vars(session) + session.install('-r', 'requirements.txt', + '-r', 'test-requirements.txt') + session.install('-e', '.') + session.run('stestr', + '--test-path', './nodepool/tests/functional/openshift', + 'run', '--no-subunit-trace', + *session.posargs) + session.run('stestr', 'slowest') + + +@nox.session(python='3') +def venv(session): + set_standard_env_vars(session) + session.install('-r', 'requirements.txt', + '-r', 'test-requirements.txt') + session.install('-e', '.') + session.run(*session.posargs) diff --git a/playbooks/nodepool-functional-k8s/pre.yaml b/playbooks/nodepool-functional-k8s/pre.yaml index 69e527b63..54097f58b 100644 --- a/playbooks/nodepool-functional-k8s/pre.yaml +++ b/playbooks/nodepool-functional-k8s/pre.yaml @@ -3,6 +3,6 @@ - role: bindep - role: ensure-zookeeper zookeeper_use_tls: true - - role: ensure-tox + - role: ensure-nox - role: ensure-kubernetes ensure_kubernetes_type: microk8s diff --git a/playbooks/nodepool-functional-k8s/run.yaml b/playbooks/nodepool-functional-k8s/run.yaml index 78d0c329d..9d963cb60 100644 --- a/playbooks/nodepool-functional-k8s/run.yaml +++ b/playbooks/nodepool-functional-k8s/run.yaml @@ -1,8 +1,8 @@ - hosts: all roles: - - role: tox - tox_envlist: functional_kubernetes - tox_environment: + - role: nox + nox_session: functional_kubernetes + nox_environment: NODEPOOL_ZK_CA: /opt/zookeeper/ca/certs/cacert.pem NODEPOOL_ZK_CERT: /opt/zookeeper/ca/certs/client.pem NODEPOOL_ZK_KEY: /opt/zookeeper/ca/keys/clientkey.pem diff --git a/playbooks/nodepool-functional-openshift/pre.yaml b/playbooks/nodepool-functional-openshift/pre.yaml index 4c6dc4ef8..3cbe6c204 100644 --- a/playbooks/nodepool-functional-openshift/pre.yaml +++ b/playbooks/nodepool-functional-openshift/pre.yaml @@ -14,7 +14,7 @@ - role: bindep - role: ensure-zookeeper zookeeper_use_tls: true - - role: ensure-tox + - role: ensure-nox tasks: # NOTE(ianw) 2022-09-07 : # Shipped packages do not work and we need to use this statically diff --git a/playbooks/nodepool-functional-openshift/run.yaml b/playbooks/nodepool-functional-openshift/run.yaml index 500d93ae2..fe9992af9 100644 --- a/playbooks/nodepool-functional-openshift/run.yaml +++ b/playbooks/nodepool-functional-openshift/run.yaml @@ -9,9 +9,9 @@ oc login -u developer -p developer --insecure-skip-tls-verify=true https://{{ hostvars['cluster']['ansible_hostname'] }}:8443 roles: - - role: tox - tox_envlist: functional_openshift - tox_environment: + - role: nox + nox_session: functional_openshift + nox_environment: NODEPOOL_ZK_CA: /opt/zookeeper/ca/certs/cacert.pem NODEPOOL_ZK_CERT: /opt/zookeeper/ca/certs/client.pem NODEPOOL_ZK_KEY: /opt/zookeeper/ca/keys/clientkey.pem diff --git a/playbooks/nodepool-tox/pre.yaml b/playbooks/nodepool-nox/pre.yaml similarity index 100% rename from playbooks/nodepool-tox/pre.yaml rename to playbooks/nodepool-nox/pre.yaml diff --git a/setup.cfg b/setup.cfg index 290f36fb7..dab1502bf 100644 --- a/setup.cfg +++ b/setup.cfg @@ -39,3 +39,10 @@ nodepool_base = yappi objgraph python-logstash-async + +[flake8] +# These are ignored intentionally in zuul projects; +# please don't submit patches that solely correct them or enable them. +ignore = E124,E125,E129,E402,E741,W503,W504 +show-source = True +exclude = .venv,.tox,dist,doc,build,*.egg diff --git a/tox.ini b/tox.ini index d9519bafd..58a3adf7b 100644 --- a/tox.ini +++ b/tox.ini @@ -60,10 +60,3 @@ commands = stestr --test-path ./nodepool/tests/functional/kubernetes run --no-su [testenv:functional_openshift] commands = stestr --test-path ./nodepool/tests/functional/openshift run --no-subunit-trace {posargs} stestr slowest - -[flake8] -# These are ignored intentionally in zuul projects; -# please don't submit patches that solely correct them or enable them. -ignore = E124,E125,E129,E402,E741,W503,W504 -show-source = True -exclude = .venv,.tox,dist,doc,build,*.egg