From 5cf721c7cd9c85cda341e3645ccb1f9d6e92f06d Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 29 Jan 2020 22:21:49 +0100 Subject: [PATCH 01/13] WIP - create travis tasks --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index 756de6d3c2..f7e6e1806f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,6 +61,12 @@ matrix: - env: TASK="ci-py3-integration" CACHE_NAME=py3 COMMAND_THRESHOLD=310 python: 3.6 name: "Integration Tests (Python 3.6)" + - env: TASK="compilepy3 ci-py3-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=660 + python: 3.7 + name: "Unit Tests, Pack Tests (Python 3.7)" + - env: TASK="ci-py3-integration" CACHE_NAME=py37 COMMAND_THRESHOLD=340 + python: 3.7 + name: "Integration Tests (Python 3.7)" addons: apt: From b7dabf818dab5921fff9e195989df450dcc217dd Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 29 Jan 2020 22:59:24 +0100 Subject: [PATCH 02/13] Try to use Bionic for Python3.7 build jobs. --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index f7e6e1806f..6fd6fefe28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,8 @@ branches: - master - /^v[0-9]+\.[0-9]+$/ + + env: global: - IS_NIGHTLY_BUILD=$([ "${TRAVIS_EVENT_TYPE}" = "cron" ] && echo "yes" || echo "no") @@ -63,9 +65,11 @@ matrix: name: "Integration Tests (Python 3.6)" - env: TASK="compilepy3 ci-py3-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=660 python: 3.7 + dist: bionic name: "Unit Tests, Pack Tests (Python 3.7)" - env: TASK="ci-py3-integration" CACHE_NAME=py37 COMMAND_THRESHOLD=340 python: 3.7 + dist: bionic name: "Integration Tests (Python 3.7)" addons: From 1f1845edac04aa45c6e39bdb01fbec80c3d75eea Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 30 Jan 2020 00:32:40 +0100 Subject: [PATCH 03/13] Create new travis task name, tox environment and make targets for python3.7 --- .travis.yml | 6 +- Makefile | 25 +++++++ scripts/travis/install-requirements.sh | 35 ++++++---- tox.ini | 92 +++++++++++++++++++++++++- 4 files changed, 140 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6fd6fefe28..d49c77d12b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,6 @@ branches: - master - /^v[0-9]+\.[0-9]+$/ - - env: global: - IS_NIGHTLY_BUILD=$([ "${TRAVIS_EVENT_TYPE}" = "cron" ] && echo "yes" || echo "no") @@ -63,11 +61,11 @@ matrix: - env: TASK="ci-py3-integration" CACHE_NAME=py3 COMMAND_THRESHOLD=310 python: 3.6 name: "Integration Tests (Python 3.6)" - - env: TASK="compilepy3 ci-py3-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=660 + - env: TASK="compilepy37 ci-py37-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=660 python: 3.7 dist: bionic name: "Unit Tests, Pack Tests (Python 3.7)" - - env: TASK="ci-py3-integration" CACHE_NAME=py37 COMMAND_THRESHOLD=340 + - env: TASK="ci-py37-integration" CACHE_NAME=py37 COMMAND_THRESHOLD=340 python: 3.7 dist: bionic name: "Integration Tests (Python 3.7)" diff --git a/Makefile b/Makefile index 2a4fde79ee..f10fd0286c 100644 --- a/Makefile +++ b/Makefile @@ -970,6 +970,31 @@ ci-py3-integration: requirements .ci-prepare-integration .ci-py3-integration @echo NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py36-integration -vv +.PHONY: ci-py37-unit +ci-py3-unit: + @echo + @echo "==================== ci-py37-unit ====================" + @echo + NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py37-unit -vv + NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py37-packs -vv + +.PHONY: ci-py37-unit-nightly +ci-py3-unit-nightly: + @echo + @echo "==================== ci-py37-unit ====================" + @echo + NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py37-unit-nightly -vv + +.PHONY: ci-py37-integration +ci-py3-integration: requirements .ci-prepare-integration .ci-py37-integration + +.PHONY: .ci-py37-integration +.ci-py3-integration: + @echo + @echo "==================== ci-py37-integration ====================" + @echo + NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py37-integration -vv + .PHONY: .rst-check .rst-check: @echo diff --git a/scripts/travis/install-requirements.sh b/scripts/travis/install-requirements.sh index 8763e014a3..51d42ba31a 100755 --- a/scripts/travis/install-requirements.sh +++ b/scripts/travis/install-requirements.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash -if [ "${TASK}" = 'compilepy3 ci-py3-unit' ] || [ "${TASK}" = 'ci-py3-integration' ]; then +function run_tox() +{ + TOX_TASK="$1" pip install "tox==3.8.6" # Install runners @@ -13,19 +15,28 @@ if [ "${TASK}" = 'compilepy3 ci-py3-unit' ] || [ "${TASK}" = 'ci-py3-integration cd $RUNNER python setup.py develop --no-deps done - # NOTE: We create the environment and install the dependencies first. This # means that the subsequent tox build / test command has a stable run time # since it doesn't depend on dependencies being installed. - if [ "${TASK}" = 'compilepy3 ci-py3-unit' ]; then - TOX_TASK="py36-unit" - fi + tox -e ${TOX_TASK} --notest +} - if [ "${TASK}" = 'ci-py3-integration' ]; then - TOX_TASK="py36-integration" - fi +# $TASK is matched from .travis.yml task definitions and maps to tox.ini envlist +case "${TASK}" in + "compilepy3 ci-py3-unit") + run_tox "py36-unit" + ;; + "ci-py3-integration") + run_tox "py36-integration" + ;; + "compilepy37 ci-py37-unit") + run_tox "py37-unit" + ;; + "ci-py37-integration") + run_tox "py37-integration" + ;; + *) + make requirements + ;; +esac - tox -e ${TOX_TASK} --notest -else - make requirements -fi diff --git a/tox.ini b/tox.ini index 3832b40c02..dfce5a98b5 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py36-unit,py36-integration +envlist = py36-unit,py36-integration,py37-unit,py37-integration skipsdist = true skip_missing_interpreters=true @@ -84,7 +84,95 @@ commands = [testenv:py36-integration] basepython = python3.6 -setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner + VIRTUALENV_DIR = {envdir} +passenv = NOSE_WITH_TIMER TRAVIS +install_command = pip install -U --force-reinstall {opts} {packages} +deps = virtualenv + -r{toxinidir}/requirements.txt + -e{toxinidir}/st2client + -e{toxinidir}/st2common +commands = + nosetests --rednose --immediate -sv --exe st2actions/tests/integration/ + nosetests --rednose --immediate -sv --exe st2api/tests/integration/ + nosetests --rednose --immediate -sv --exe st2common/tests/integration/ + nosetests --rednose --immediate -sv --exe st2debug/tests/integration/ + nosetests --rednose --immediate -sv --exe st2exporter/tests/integration/ + nosetests --rednose --immediate -sv --exe st2reactor/tests/integration/ + nosetests --rednose --immediate -sv --exe contrib/runners/action_chain_runner/tests/integration/ + nosetests --rednose --immediate -sv --exe contrib/runners/local_runner/tests/integration/ + nosetests --rednose --immediate -sv --exe contrib/runners/mistral_v2/tests/integration/ + nosetests --rednose --immediate -sv --exe contrib/runners/orquesta_runner/tests/integration/ + nosetests --rednose --immediate -sv --exe st2tests/integration/orquesta/ + nosetests --rednose --immediate -sv --exe contrib/runners/python_runner/tests/integration/ + +# Python 3.7 tasks +[testenv:py37-unit] +basepython = python3.7 +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner + VIRTUALENV_DIR = {envdir} +passenv = NOSE_WITH_TIMER TRAVIS +install_command = pip install -U --force-reinstall {opts} {packages} +deps = virtualenv + -r{toxinidir}/requirements.txt + -e{toxinidir}/st2client + -e{toxinidir}/st2common +commands = + nosetests --rednose --immediate -sv st2actions/tests/unit/ + nosetests --rednose --immediate -sv st2auth/tests/unit/ + nosetests --rednose --immediate -sv st2api/tests/unit/controllers/v1/ + nosetests --rednose --immediate -sv st2api/tests/unit/controllers/exp/ + nosetests --rednose --immediate -sv st2common/tests/unit/ + nosetests --rednose --immediate -sv st2client/tests/unit/ + nosetests --rednose --immediate -sv st2debug/tests/unit/ + nosetests --rednose --immediate -sv st2exporter/tests/unit/ + nosetests --rednose --immediate -sv st2reactor/tests/unit/ + nosetests --rednose --immediate -sv st2stream/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/action_chain_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/inquirer_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/announcement_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/http_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/noop_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/local_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/orquesta_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/python_runner/tests/unit/ + nosetests --rednose --immediate -sv contrib/runners/winrm_runner/tests/unit/ + +[testenv:py37-unit-nightly] +basepython = python3.7 +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner + VIRTUALENV_DIR = {envdir} +passenv = NOSE_WITH_TIMER TRAVIS +install_command = pip install -U --force-reinstall {opts} {packages} +deps = virtualenv + -r{toxinidir}/requirements.txt + -e{toxinidir}/st2client + -e{toxinidir}/st2common +commands = + nosetests --rednose --immediate -sv contrib/runners/mistral_v2/tests/unit/ + +[testenv:py37-packs] +basepython = python3.7 +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner + VIRTUALENV_DIR = {envdir} +passenv = NOSE_WITH_TIMER TRAVIS +install_command = pip install -U --force-reinstall {opts} {packages} +deps = virtualenv + -r{toxinidir}/requirements.txt + -e{toxinidir}/st2client + -e{toxinidir}/st2common +commands = + st2-run-pack-tests -c -t -x -p contrib/packs + st2-run-pack-tests -c -t -x -p contrib/core + st2-run-pack-tests -c -t -x -p contrib/default + st2-run-pack-tests -c -t -x -p contrib/chatops + st2-run-pack-tests -c -t -x -p contrib/examples + st2-run-pack-tests -c -t -x -p contrib/linux + st2-run-pack-tests -c -t -x -p contrib/hello_st2 + +[testenv:py37-integration] +basepython = python3.7 +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner VIRTUALENV_DIR = {envdir} passenv = NOSE_WITH_TIMER TRAVIS install_command = pip install -U --force-reinstall {opts} {packages} From 0fdafac6332fb12271c32f7797077a51cbe67e3d Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 30 Jan 2020 00:45:24 +0100 Subject: [PATCH 04/13] Use compilepy3 make target instead, it should work for Python3.6 and Python3.7 --- .travis.yml | 2 +- scripts/travis/install-requirements.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d49c77d12b..0f436c1b4e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,7 +61,7 @@ matrix: - env: TASK="ci-py3-integration" CACHE_NAME=py3 COMMAND_THRESHOLD=310 python: 3.6 name: "Integration Tests (Python 3.6)" - - env: TASK="compilepy37 ci-py37-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=660 + - env: TASK="compilepy3 ci-py37-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=660 python: 3.7 dist: bionic name: "Unit Tests, Pack Tests (Python 3.7)" diff --git a/scripts/travis/install-requirements.sh b/scripts/travis/install-requirements.sh index 51d42ba31a..c87f2dc356 100755 --- a/scripts/travis/install-requirements.sh +++ b/scripts/travis/install-requirements.sh @@ -29,7 +29,7 @@ case "${TASK}" in "ci-py3-integration") run_tox "py36-integration" ;; - "compilepy37 ci-py37-unit") + "compilepy3 ci-py37-unit") run_tox "py37-unit" ;; "ci-py37-integration") From 75e2645c98382a6ceb6f5b2c8f44921e7500fa2e Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 30 Jan 2020 00:48:48 +0100 Subject: [PATCH 05/13] Fixed py37 target names in makefile. --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index f10fd0286c..eb46cdc26c 100644 --- a/Makefile +++ b/Makefile @@ -971,7 +971,7 @@ ci-py3-integration: requirements .ci-prepare-integration .ci-py3-integration NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py36-integration -vv .PHONY: ci-py37-unit -ci-py3-unit: +ci-py37-unit: @echo @echo "==================== ci-py37-unit ====================" @echo @@ -979,17 +979,17 @@ ci-py3-unit: NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py37-packs -vv .PHONY: ci-py37-unit-nightly -ci-py3-unit-nightly: +ci-py37-unit-nightly: @echo @echo "==================== ci-py37-unit ====================" @echo NOSE_WITH_TIMER=$(NOSE_WITH_TIMER) tox -e py37-unit-nightly -vv .PHONY: ci-py37-integration -ci-py3-integration: requirements .ci-prepare-integration .ci-py37-integration +ci-py37-integration: requirements .ci-prepare-integration .ci-py37-integration .PHONY: .ci-py37-integration -.ci-py3-integration: +.ci-py37-integration: @echo @echo "==================== ci-py37-integration ====================" @echo From 25a78966ce777d1b272ec66b183abc1395414574 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 2 Apr 2020 00:19:43 +0200 Subject: [PATCH 06/13] Attempt to apply eventlet monkey patch workaround for issue eventlet/eventlet#592. --- st2common/st2common/util/monkey_patch.py | 5 +++++ st2stream/st2stream/cmd/api.py | 6 ++++++ st2tests/st2tests/base.py | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/st2common/st2common/util/monkey_patch.py b/st2common/st2common/util/monkey_patch.py index 14974ba834..9ba0b0f608 100644 --- a/st2common/st2common/util/monkey_patch.py +++ b/st2common/st2common/util/monkey_patch.py @@ -49,6 +49,11 @@ def monkey_patch(patch_thread=None): eventlet.monkey_patch(os=True, select=True, socket=True, thread=patch_thread, time=True) + # Monkey patch the original current_thread to use the up-to-date _active + # global variable. See https://github.com/eventlet/eventlet/issues/592 + import __original_module_threading as orig_threading + import threading + orig_threading.current_thread.__globals__['_active'] = threading._active def use_select_poll_workaround(nose_only=True): """ diff --git a/st2stream/st2stream/cmd/api.py b/st2stream/st2stream/cmd/api.py index c86e80b424..9fad3036ff 100644 --- a/st2stream/st2stream/cmd/api.py +++ b/st2stream/st2stream/cmd/api.py @@ -41,6 +41,12 @@ thread=False if '--use-debugger' in sys.argv else True, time=True) +# Monkey patch the original current_thread to use the up-to-date _active +# global variable. See https://github.com/eventlet/eventlet/issues/592 +import __original_module_threading as orig_threading +import threading +orig_threading.current_thread.__globals__['_active'] = threading._active + LOG = logging.getLogger(__name__) # How much time to give to the request in progress to finish in seconds before killing them diff --git a/st2tests/st2tests/base.py b/st2tests/st2tests/base.py index 518a844b25..e94dfcd7e7 100644 --- a/st2tests/st2tests/base.py +++ b/st2tests/st2tests/base.py @@ -20,6 +20,12 @@ from st2common.util.monkey_patch import monkey_patch monkey_patch() +# Monkey patch the original current_thread to use the up-to-date _active +# global variable. See https://github.com/eventlet/eventlet/issues/592 +import __original_module_threading as orig_threading +import threading +orig_threading.current_thread.__globals__['_active'] = threading._active + try: import simplejson as json except ImportError: From f3e06f6bda1bfbaf0274acda21c54ef611a1ae98 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 2 Apr 2020 02:53:11 +0200 Subject: [PATCH 07/13] Fix PYTHON_VERSION in travis.yml for Python3.7 tests. --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e8559666c5..8547eb8902 100644 --- a/.travis.yml +++ b/.travis.yml @@ -59,12 +59,12 @@ jobs: - name: "Unit Tests, Pack Tests (Python 3.7)" python: 3.7 dist: bionic - env: TASK="compilepy3 ci-py37-unit" CACHE_NAME=py37 COMMAND_THRESHOLD=750 + env: TASK="compilepy3 ci-py37-unit" CACHE_NAME=py37 PYTHON_VERSION=python3.7 COMMAND_THRESHOLD=750 - name: "Integration Tests (Python 3.7)" python: 3.7 dist: bionic - env: TASK="ci-py37-integration" CACHE_NAME=py37 COMMAND_THRESHOLD=770 + env: TASK="ci-py37-integration" CACHE_NAME=py37 PYTHON_VERSION=python3.7 COMMAND_THRESHOLD=770 addons: apt: From 34b787e8e502d1f7623d811cd5b538153b0a9108 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 2 Apr 2020 09:39:32 +0200 Subject: [PATCH 08/13] Add import guard to prevent exceptions under Python 2.7 --- st2common/st2common/util/monkey_patch.py | 14 +++++++++----- st2stream/st2stream/cmd/api.py | 14 +++++++++----- st2tests/st2tests/base.py | 13 ++++++++----- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/st2common/st2common/util/monkey_patch.py b/st2common/st2common/util/monkey_patch.py index 9ba0b0f608..7811aa80f4 100644 --- a/st2common/st2common/util/monkey_patch.py +++ b/st2common/st2common/util/monkey_patch.py @@ -49,11 +49,15 @@ def monkey_patch(patch_thread=None): eventlet.monkey_patch(os=True, select=True, socket=True, thread=patch_thread, time=True) - # Monkey patch the original current_thread to use the up-to-date _active - # global variable. See https://github.com/eventlet/eventlet/issues/592 - import __original_module_threading as orig_threading - import threading - orig_threading.current_thread.__globals__['_active'] = threading._active + # Guard against importing non-existent _original_module_threading for Python 2.7 + import sys + if (3, 7) == (sys.version_info.major, sys.version_info.minor): + # Monkey patch the original current_thread to use the up-to-date _active + # global variable. See https://github.com/eventlet/eventlet/issues/592 + import __original_module_threading as orig_threading + import threading + orig_threading.current_thread.__globals__['_active'] = threading._active + def use_select_poll_workaround(nose_only=True): """ diff --git a/st2stream/st2stream/cmd/api.py b/st2stream/st2stream/cmd/api.py index 9fad3036ff..5e71088394 100644 --- a/st2stream/st2stream/cmd/api.py +++ b/st2stream/st2stream/cmd/api.py @@ -41,11 +41,15 @@ thread=False if '--use-debugger' in sys.argv else True, time=True) -# Monkey patch the original current_thread to use the up-to-date _active -# global variable. See https://github.com/eventlet/eventlet/issues/592 -import __original_module_threading as orig_threading -import threading -orig_threading.current_thread.__globals__['_active'] = threading._active +# Guard against importing non-existent _original_module_threading for Python 2.7 +import sys +if (3, 7) == (sys.version_info.major, sys.version_info.minor): + # Monkey patch the original current_thread to use the up-to-date _active + # global variable. See https://github.com/eventlet/eventlet/issues/592 + import __original_module_threading as orig_threading + import threading + orig_threading.current_thread.__globals__['_active'] = threading._active + LOG = logging.getLogger(__name__) diff --git a/st2tests/st2tests/base.py b/st2tests/st2tests/base.py index 5868e985db..8b290cf7d8 100644 --- a/st2tests/st2tests/base.py +++ b/st2tests/st2tests/base.py @@ -20,11 +20,14 @@ from st2common.util.monkey_patch import monkey_patch monkey_patch() -# Monkey patch the original current_thread to use the up-to-date _active -# global variable. See https://github.com/eventlet/eventlet/issues/592 -import __original_module_threading as orig_threading -import threading -orig_threading.current_thread.__globals__['_active'] = threading._active +# Guard against importing non-existent _original_module_threading for Python 2.7 +import sys +if (3, 7) == (sys.version_info.major, sys.version_info.minor): + # Monkey patch the original current_thread to use the up-to-date _active + # global variable. See https://github.com/eventlet/eventlet/issues/592 + import __original_module_threading as orig_threading + import threading + orig_threading.current_thread.__globals__['_active'] = threading._active try: import simplejson as json From b09069a865bb42cf1a807c107e0a97e67235c6f8 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 2 Apr 2020 12:30:38 +0200 Subject: [PATCH 09/13] Added python3.7 criterion to condition for installing tox. --- scripts/travis/install-requirements.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/travis/install-requirements.sh b/scripts/travis/install-requirements.sh index a8c662be7a..8c1d8de69c 100755 --- a/scripts/travis/install-requirements.sh +++ b/scripts/travis/install-requirements.sh @@ -4,7 +4,7 @@ # virtualenv prepartion is different for python3, so we want all py3 targets here. # We use a glob instead of listing TASKs so TASK reorganization doesn't require so many changes. -if [[ " ${TASK}" = *' ci-py3-'* ]]; then +if [[ " ${TASK}" = *' ci-py3-'* -o " ${TASK} " = *' ci-py37-'* ]]; then pip install "tox==3.8.6" # NOTE: The makefile only checks to see if the activate script is present. From e6fb6996623e76396627fc8751ed7e34b15cd49d Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 2 Apr 2020 12:34:46 +0200 Subject: [PATCH 10/13] Fix logic operator and removed trailing space from test. --- scripts/travis/install-requirements.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/travis/install-requirements.sh b/scripts/travis/install-requirements.sh index 8c1d8de69c..37b7da5b0f 100755 --- a/scripts/travis/install-requirements.sh +++ b/scripts/travis/install-requirements.sh @@ -4,7 +4,7 @@ # virtualenv prepartion is different for python3, so we want all py3 targets here. # We use a glob instead of listing TASKs so TASK reorganization doesn't require so many changes. -if [[ " ${TASK}" = *' ci-py3-'* -o " ${TASK} " = *' ci-py37-'* ]]; then +if [[ " ${TASK}" = *' ci-py3-'* || " ${TASK}" = *' ci-py37-'* ]]; then pip install "tox==3.8.6" # NOTE: The makefile only checks to see if the activate script is present. From 504a2a76476fd62c552e94cdf2e1d99c67814a9f Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 11 Sep 2020 23:58:17 +0200 Subject: [PATCH 11/13] Removed monkey patch workaround code and bumped eventlet to 0.27.0 for upstream fix. --- fixed-requirements.txt | 6 +++--- st2common/st2common/util/monkey_patch.py | 9 --------- st2stream/st2stream/cmd/api.py | 10 ---------- st2tests/st2tests/base.py | 9 --------- 4 files changed, 3 insertions(+), 31 deletions(-) diff --git a/fixed-requirements.txt b/fixed-requirements.txt index 58d673c227..a653111f09 100644 --- a/fixed-requirements.txt +++ b/fixed-requirements.txt @@ -5,9 +5,9 @@ apscheduler==3.6.3 # NOTE: 2.0 version breaks pymongo work with hosts dnspython>=1.16.0,<2.0.0 cryptography==2.8 -# Note: 0.20.0 removed select.poll() on which some of our code and libraries we -# depend on rely -eventlet==0.25.1 +# Note: eventlet 0.27.0 required for correct threading support under Python3.7+ when monkeypatching. +# see https://github.com/eventlet/eventlet/pull/611 for details. +eventlet==0.27.0 flex==6.14.0 gitpython==2.1.15 # Note: greenlet is used by eventlet diff --git a/st2common/st2common/util/monkey_patch.py b/st2common/st2common/util/monkey_patch.py index dd94b0b73b..5a042fd656 100644 --- a/st2common/st2common/util/monkey_patch.py +++ b/st2common/st2common/util/monkey_patch.py @@ -50,15 +50,6 @@ def monkey_patch(patch_thread=None): eventlet.monkey_patch(os=True, select=True, socket=True, thread=patch_thread, time=True) - # Guard against importing non-existent _original_module_threading for Python 2.7 - import sys - if (3, 7) == (sys.version_info.major, sys.version_info.minor): - # Monkey patch the original current_thread to use the up-to-date _active - # global variable. See https://github.com/eventlet/eventlet/issues/592 - import __original_module_threading as orig_threading - import threading - orig_threading.current_thread.__globals__['_active'] = threading._active - def use_select_poll_workaround(nose_only=True): """ diff --git a/st2stream/st2stream/cmd/api.py b/st2stream/st2stream/cmd/api.py index ad3d978307..1c7d5f4d8b 100644 --- a/st2stream/st2stream/cmd/api.py +++ b/st2stream/st2stream/cmd/api.py @@ -42,16 +42,6 @@ thread=False if '--use-debugger' in sys.argv else True, time=True) -# Guard against importing non-existent _original_module_threading for Python 2.7 -import sys -if (3, 7) == (sys.version_info.major, sys.version_info.minor): - # Monkey patch the original current_thread to use the up-to-date _active - # global variable. See https://github.com/eventlet/eventlet/issues/592 - import __original_module_threading as orig_threading - import threading - orig_threading.current_thread.__globals__['_active'] = threading._active - - LOG = logging.getLogger(__name__) # How much time to give to the request in progress to finish in seconds before killing them diff --git a/st2tests/st2tests/base.py b/st2tests/st2tests/base.py index f06d1b1479..75a8f7ce02 100644 --- a/st2tests/st2tests/base.py +++ b/st2tests/st2tests/base.py @@ -21,15 +21,6 @@ from st2common.util.monkey_patch import monkey_patch monkey_patch() -# Guard against importing non-existent _original_module_threading for Python 2.7 -import sys -if (3, 7) == (sys.version_info.major, sys.version_info.minor): - # Monkey patch the original current_thread to use the up-to-date _active - # global variable. See https://github.com/eventlet/eventlet/issues/592 - import __original_module_threading as orig_threading - import threading - orig_threading.current_thread.__globals__['_active'] = threading._active - try: import simplejson as json except ImportError: From 9fd350ef15965d80854a94e2ca4fd296afbdd160 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 12 Sep 2020 00:22:41 +0200 Subject: [PATCH 12/13] Bump eventlet to v0.27.0 in all requirements.txt files for st2 components. --- requirements.txt | 2 +- st2actions/requirements.txt | 2 +- st2api/requirements.txt | 2 +- st2auth/requirements.txt | 2 +- st2common/requirements.txt | 2 +- st2debug/requirements.txt | 2 +- st2exporter/requirements.txt | 2 +- st2reactor/requirements.txt | 2 +- st2stream/requirements.txt | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index 8dd7ad0e55..485c5fae7a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ argcomplete bcrypt==3.1.7 cryptography==2.8 dnspython<2.0.0,>=1.16.0 -eventlet==0.25.1 +eventlet==0.27.0 flex==6.14.0 git+https://github.com/StackStorm/logshipper.git@stackstorm_patched#egg=logshipper git+https://github.com/StackStorm/orquesta.git@v1.1.1#egg=orquesta diff --git a/st2actions/requirements.txt b/st2actions/requirements.txt index 80d3661f38..bd92e1d050 100755 --- a/st2actions/requirements.txt +++ b/st2actions/requirements.txt @@ -6,7 +6,7 @@ # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt apscheduler==3.6.3 -eventlet==0.25.1 +eventlet==0.27.0 git+https://github.com/StackStorm/logshipper.git@stackstorm_patched#egg=logshipper gitpython==2.1.15 jinja2==2.10.3 diff --git a/st2api/requirements.txt b/st2api/requirements.txt index 051999210c..6e15f3ce7b 100644 --- a/st2api/requirements.txt +++ b/st2api/requirements.txt @@ -5,7 +5,7 @@ # If you want to update depdencies for a single component, modify the # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt -eventlet==0.25.1 +eventlet==0.27.0 gunicorn==19.9.0 jsonschema==2.6.0 kombu==4.6.6 diff --git a/st2auth/requirements.txt b/st2auth/requirements.txt index 9d20e81a42..c5943f734c 100644 --- a/st2auth/requirements.txt +++ b/st2auth/requirements.txt @@ -6,7 +6,7 @@ # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt bcrypt==3.1.7 -eventlet==0.25.1 +eventlet==0.27.0 git+https://github.com/StackStorm/st2-auth-backend-flat-file.git@master#egg=st2-auth-backend-flat-file gunicorn==19.9.0 oslo.config<1.13,>=1.12.1 diff --git a/st2common/requirements.txt b/st2common/requirements.txt index 52de391b2f..08b716536a 100644 --- a/st2common/requirements.txt +++ b/st2common/requirements.txt @@ -9,7 +9,7 @@ amqp==2.5.2 apscheduler==3.6.3 cryptography==2.8 dnspython<2.0.0,>=1.16.0 -eventlet==0.25.1 +eventlet==0.27.0 flex==6.14.0 git+https://github.com/StackStorm/orquesta.git@v1.1.1#egg=orquesta gitpython==2.1.15 diff --git a/st2debug/requirements.txt b/st2debug/requirements.txt index 0f1ea2340d..1b00dc1887 100644 --- a/st2debug/requirements.txt +++ b/st2debug/requirements.txt @@ -5,7 +5,7 @@ # If you want to update depdencies for a single component, modify the # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt -eventlet==0.25.1 +eventlet==0.27.0 python-gnupg==0.4.5 pyyaml==5.1.2 requests[security]==2.23.0 diff --git a/st2exporter/requirements.txt b/st2exporter/requirements.txt index 21cb97016f..e733bfe6b5 100644 --- a/st2exporter/requirements.txt +++ b/st2exporter/requirements.txt @@ -5,7 +5,7 @@ # If you want to update depdencies for a single component, modify the # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt -eventlet==0.25.1 +eventlet==0.27.0 kombu==4.6.6 oslo.config<1.13,>=1.12.1 six==1.13.0 diff --git a/st2reactor/requirements.txt b/st2reactor/requirements.txt index 3da786fd47..e91c971d65 100644 --- a/st2reactor/requirements.txt +++ b/st2reactor/requirements.txt @@ -6,7 +6,7 @@ # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt apscheduler==3.6.3 -eventlet==0.25.1 +eventlet==0.27.0 jsonpath-rw==1.4.0 jsonschema==2.6.0 kombu==4.6.6 diff --git a/st2stream/requirements.txt b/st2stream/requirements.txt index 7a920a843f..c9085bc2b5 100644 --- a/st2stream/requirements.txt +++ b/st2stream/requirements.txt @@ -5,7 +5,7 @@ # If you want to update depdencies for a single component, modify the # in-requirements.txt for that component and then run 'make requirements' to # update the component requirements.txt -eventlet==0.25.1 +eventlet==0.27.0 gunicorn==19.9.0 jsonschema==2.6.0 kombu==4.6.6 From 8eb78a88e705268d24738b32d8f76f6c22d232c4 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 12 Sep 2020 00:56:43 +0200 Subject: [PATCH 13/13] Removed accidental re-introduction of mistral tests when merging master. --- tox.ini | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/tox.ini b/tox.ini index f9fda8087e..8a292ed121 100644 --- a/tox.ini +++ b/tox.ini @@ -72,7 +72,7 @@ commands = [testenv:py36-integration] basepython = python3.6 -setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner VIRTUALENV_DIR = {envdir} passenv = NOSE_WITH_TIMER TRAVIS install_command = pip install -U --force-reinstall {opts} {packages} @@ -81,23 +81,22 @@ deps = virtualenv -e{toxinidir}/st2client -e{toxinidir}/st2common commands = - nosetests --rednose --immediate -sv --exe st2actions/tests/integration/ - nosetests --rednose --immediate -sv --exe st2api/tests/integration/ - nosetests --rednose --immediate -sv --exe st2common/tests/integration/ - nosetests --rednose --immediate -sv --exe st2debug/tests/integration/ - nosetests --rednose --immediate -sv --exe st2exporter/tests/integration/ - nosetests --rednose --immediate -sv --exe st2reactor/tests/integration/ - nosetests --rednose --immediate -sv --exe contrib/runners/action_chain_runner/tests/integration/ - nosetests --rednose --immediate -sv --exe contrib/runners/local_runner/tests/integration/ - nosetests --rednose --immediate -sv --exe contrib/runners/mistral_v2/tests/integration/ - nosetests --rednose --immediate -sv --exe contrib/runners/orquesta_runner/tests/integration/ - nosetests --rednose --immediate -sv --exe st2tests/integration/orquesta/ - nosetests --rednose --immediate -sv --exe contrib/runners/python_runner/tests/integration/ + nosetests --rednose --immediate -sv st2actions/tests/integration/ + nosetests --rednose --immediate -sv st2api/tests/integration/ + nosetests --rednose --immediate -sv st2common/tests/integration/ + nosetests --rednose --immediate -sv st2debug/tests/integration/ + nosetests --rednose --immediate -sv st2exporter/tests/integration/ + nosetests --rednose --immediate -sv st2reactor/tests/integration/ + nosetests --rednose --immediate -sv contrib/runners/action_chain_runner/tests/integration/ + nosetests --rednose --immediate -sv contrib/runners/local_runner/tests/integration/ + nosetests --rednose --immediate -sv contrib/runners/orquesta_runner/tests/integration/ + nosetests --rednose --immediate -sv st2tests/integration/orquesta/ + nosetests --rednose --immediate -sv contrib/runners/python_runner/tests/integration/ # Python 3.7 tasks [testenv:py37-unit] basepython = python3.7 -setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner VIRTUALENV_DIR = {envdir} passenv = NOSE_WITH_TIMER TRAVIS install_command = pip install -U --force-reinstall {opts} {packages} @@ -126,22 +125,9 @@ commands = nosetests --rednose --immediate -sv contrib/runners/python_runner/tests/unit/ nosetests --rednose --immediate -sv contrib/runners/winrm_runner/tests/unit/ -[testenv:py37-unit-nightly] -basepython = python3.7 -setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner - VIRTUALENV_DIR = {envdir} -passenv = NOSE_WITH_TIMER TRAVIS -install_command = pip install -U --force-reinstall {opts} {packages} -deps = virtualenv - -r{toxinidir}/requirements.txt - -e{toxinidir}/st2client - -e{toxinidir}/st2common -commands = - nosetests --rednose --immediate -sv contrib/runners/mistral_v2/tests/unit/ - [testenv:py37-packs] basepython = python3.7 -setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/mistral_v2:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner VIRTUALENV_DIR = {envdir} passenv = NOSE_WITH_TIMER TRAVIS install_command = pip install -U --force-reinstall {opts} {packages} @@ -160,7 +146,7 @@ commands = [testenv:py37-integration] basepython = python3.7 -setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner +setenv = PYTHONPATH = {toxinidir}/external:{toxinidir}/st2common:{toxinidir}/st2auth:{toxinidir}/st2api:{toxinidir}/st2actions:{toxinidir}/st2exporter:{toxinidir}/st2reactor:{toxinidir}/st2tests:{toxinidir}/contrib/runners/action_chain_runner:{toxinidir}/contrib/runners/local_runner:{toxinidir}/contrib/runners/python_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/noop_runner:{toxinidir}/contrib/runners/announcement_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/remote_runner:{toxinidir}/contrib/runners/orquesta_runner:{toxinidir}/contrib/runners/inquirer_runner:{toxinidir}/contrib/runners/http_runner:{toxinidir}/contrib/runners/winrm_runner VIRTUALENV_DIR = {envdir} passenv = NOSE_WITH_TIMER TRAVIS