tox respects upper-constraints.txt

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.

There are a few 'post' jobs as Andreas has mentioned on this review,
that have the install_command overridden (until that will be supported
in upstream infra).

This change has been inspired by
Ie1133e4c020106e8098685ba9125f84b356d8e0c , notes from jaegerandi in the
openstack/glance's tox.ini file and Ihar's python-neutronclient's fix
I33302cdcab980a42c39dc9ec1e430add459615ff

Change-Id: I1f8be8184683c9a3671f750ebaa87c38163c9795
Closes-Bug: 1563038
This commit is contained in:
Nikhil Komawar 2016-06-02 13:36:37 -04:00 committed by Ian Cordasco
parent 9a588122aa
commit ea4483c0bf
2 changed files with 65 additions and 1 deletions

55
tools/tox_install.sh Executable file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env bash
# Library constraint file contains version pin that is in conflict with
# installing the library 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
LIB_NAME=glance_store
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 "$LIB_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 -- $LIB_NAME "-e file://$PWD#egg=$LIB_NAME"
fi
$install_cmd -U $*
exit $?

11
tox.ini
View File

@ -6,7 +6,7 @@ skipsdist = True
[testenv]
setenv = VIRTUAL_ENV={envdir}
usedevelop = True
install_command = pip install --allow-all-external --allow-insecure netaddr -U {opts} {packages}
install_command = {toxinidir}/tools/tox_install.sh -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} --allow-all-external --allow-insecure netaddr -U {opts} {packages}
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
.[s3,vmware,swift,cinder]
@ -16,6 +16,9 @@ commands = ostestr --slowest {posargs}
commands = python setup.py build_sphinx
[testenv:releasenotes]
# NOTE(nikhil): 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 --allow-all-external --allow-insecure netaddr -U {opts} {packages}
commands = sphinx-build -a -E -W -d releasenotes/build/.doctrees -b html releasenotes/source releasenotes/build/html
[testenv:pep8]
@ -23,10 +26,16 @@ commands =
flake8 {posargs}
[testenv:cover]
# NOTE(nikhil): 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 --allow-all-external --allow-insecure netaddr -U {opts} {packages}
setenv = VIRTUAL_ENV={envdir}
commands = python setup.py testr --coverage --testr-args='^(?!.*test.*coverage).*$'
[testenv:venv]
# NOTE(nikhil): 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 --allow-all-external --allow-insecure netaddr -U {opts} {packages}
commands = {posargs}
[testenv:functional]