From 3234f25bee9e6d62f109a12c237902657c41fa5e Mon Sep 17 00:00:00 2001 From: zhurong Date: Wed, 6 Jul 2016 10:00:27 -0400 Subject: [PATCH] Use upper-constraints in tox test environments This will force pip install to use the upper-constraints.txt specified version of pip modules. When you don't do this, you are out on the bleeding edge and become unstable everytime some python library in the wide world changes in a way that you don't expect. The releasenotes job has no constraints file, so override the install command there. Change-Id: I531606ce2ed981bddc618dac046ab081de2805eb Partial-bug: #1598906 --- tools/tox_install.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++ tox.ini | 19 ++++++++++++++- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100755 tools/tox_install.sh diff --git a/tools/tox_install.sh b/tools/tox_install.sh new file mode 100755 index 00000000..68fa6e2a --- /dev/null +++ b/tools/tox_install.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# Client constraint file contains this client version pin that is in conflict +# with installing the client from source. We should replace the version pin in +# the constraints file before applying it for from-source installation. + +ZUUL_CLONER=/usr/zuul-env/bin/zuul-cloner +BRANCH_NAME=master +CLIENT_NAME=python-muranoclient +requirements_installed=$(echo "import openstack_requirements" | python 2>/dev/null ; echo $?) + +set -e + +CONSTRAINTS_FILE=$1 +shift + +install_cmd="pip install" +if [ $CONSTRAINTS_FILE != "unconstrained" ]; then + + mydir=$(mktemp -dt "$CLIENT_NAME-tox_install-XXXXXXX") + localfile=$mydir/upper-constraints.txt + if [[ $CONSTRAINTS_FILE != http* ]]; then + CONSTRAINTS_FILE=file://$CONSTRAINTS_FILE + fi + curl $CONSTRAINTS_FILE -k -o $localfile + install_cmd="$install_cmd -c$localfile" + + if [ $requirements_installed -eq 0 ]; then + echo "ALREADY INSTALLED" > /tmp/tox_install.txt + echo "Requirements already installed; using existing package" + elif [ -x "$ZUUL_CLONER" ]; then + export ZUUL_BRANCH=${ZUUL_BRANCH-$BRANCH} + echo "ZUUL CLONER" > /tmp/tox_install.txt + pushd $mydir + $ZUUL_CLONER --cache-dir \ + /opt/git \ + --branch $BRANCH_NAME \ + git://git.openstack.org \ + openstack/requirements + cd openstack/requirements + $install_cmd -e . + popd + else + echo "PIP HARDCODE" > /tmp/tox_install.txt + if [ -z "$REQUIREMENTS_PIP_LOCATION" ]; then + REQUIREMENTS_PIP_LOCATION="git+https://git.openstack.org/openstack/requirements@$BRANCH_NAME#egg=requirements" + fi + $install_cmd -U -e ${REQUIREMENTS_PIP_LOCATION} + fi + + edit-constraints $localfile -- $CLIENT_NAME "-e file://$PWD#egg=$CLIENT_NAME" +fi + +$install_cmd -U $* +exit $? diff --git a/tox.ini b/tox.ini index a3f28d90..73bf6a72 100644 --- a/tox.ini +++ b/tox.ini @@ -6,7 +6,8 @@ skipsdist = True [testenv] usedevelop = True whitelist_externals = bash -install_command = pip install -U {opts} {packages} +install_command = + {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages} setenv = VIRTUAL_ENV={envdir} passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY deps = @@ -18,6 +19,10 @@ commands = bash tools/pretty_tox.sh '{posargs}' commands = flake8 {posargs} [testenv:venv] +# NOTE(from nova tox.ini by jaegerandi): This target does not use constraints +# because upstream infra does not yet support it. Once that's fixed, we can +# drop the install_command. +install_command = pip install -U --force-reinstall {opts} {packages} commands = {posargs} [testenv:functional] @@ -26,9 +31,17 @@ setenv = passenv = OS_* [testenv:uitests] +# NOTE(from nova tox.ini by jaegerandi): This target does not use constraints +# because upstream infra does not yet support it. Once that's fixed, we can +# drop the install_command. +install_command = pip install -U --force-reinstall {opts} {packages} commands = python setup.py testr --slowest --testr-args="--concurrency 1 {posargs}" [testenv:cover] +# NOTE(from nova tox.ini by jaegerandi): This target does not use constraints +# because upstream infra does not yet support it. Once that's fixed, we can +# drop the install_command. +install_command = pip install -U --force-reinstall {opts} {packages} commands = python setup.py testr --coverage --testr-args='--concurrency 1 {posargs}' [testenv:pyflakes] @@ -36,6 +49,10 @@ deps = flake8 commands = flake8 [testenv:releasenotes] +# NOTE(from nova tox.ini by jaegerandi): This target does not use constraints +# because upstream infra does not yet support it. Once that's fixed, we can +# drop the install_command. +install_command = pip install -U --force-reinstall {opts} {packages} commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html [flake8]