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
This commit is contained in:
zhurong 2016-07-06 10:00:27 -04:00 committed by Kirill Zaitsev
parent 369056a1f6
commit 6eb0a7aab3
2 changed files with 73 additions and 1 deletions

55
tools/tox_install.sh Executable file
View File

@ -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 $?

19
tox.ini
View File

@ -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}
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]