Dockerfile: install tox in its own virtualenv

Fix multiple problems with python modules that cause build errors.

* Avoid replacing RPM-owned python modules with pip:
  - Remove python-tox: installed via pip later in Dockerfile
  - Remove python-testrepository: installed via pip later in Dockerfile
    (required by pbr)
  - Add python-virtualenv: was pulled in by one of the removed packages
    above

* builder-constraints.txt: used only for global packages:
  - Move all version constraints of Dockerfile into constraints file
  - Remove filelock and platformdirs packages (required by tox -- see
    below).
  - git-review: downgrade to 1.28.0, latest official version compatible
    with python 2.7

* Install a sane python 2.7 virtual environment that doesn't conflict
  with RPM modules, that includes tox. Create a symlink to tox in
  /usr/bin/. Uses a separate contraints file.

* builder-opt-py27-constraints.txt: new file for the virtualenv in /opt:
  - tox==3.23.0
  - Remove "filelock" and "platformdirs" packages formerly in the
    original constraints file. They resolve correctly by the tox
    requirement. Note that this downgrades the packages slightly compared
    to the explicit requirements, back to the latest official versions
    compatible with python 2.7.

    See revisions starlingx/tools revisions:
        0d67f81bdf
        7bde482bcb

Closes-Bug: 1960675
Signed-off-by: Davlet Panech <davlet.panech@windriver.com>
Change-Id: I7e3e7e4f4afa52a614cb9f58b2d6172441ea7bc1
This commit is contained in:
Davlet Panech 2022-02-11 16:34:37 -05:00
parent 6f2ad65a6a
commit eec9163e0e
3 changed files with 34 additions and 8 deletions

View File

@ -108,8 +108,7 @@ RUN yum install -y \
python3-devel \
python-sphinx \
python-subunit \
python-testrepository \
python-tox \
python-virtualenv \
python-yaml \
python2-ruamel-yaml \
postgresql \
@ -190,10 +189,31 @@ RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == system
# pip installs
COPY toCOPY/builder-constraints.txt /home/$MYUNAME/
RUN pip install -c /home/$MYUNAME/builder-constraints.txt pbr==5.6.0 --upgrade && \
pip install -c /home/$MYUNAME/builder-constraints.txt git-review==2.1.0 --upgrade && \
pip install -c /home/$MYUNAME/builder-constraints.txt python-subunit==1.4.0 junitxml==0.7 testtools==2.4.0 --upgrade && \
pip install -c /home/$MYUNAME/builder-constraints.txt tox==3.23.0 --upgrade
# Install required python modules globally; versions are in the constraints file.
# Be careful not to replace modules provided by RPMs as it may break
# other system packages. Look for warnings similar to "Uninstalling a
# distutils installed project has been deprecated" from pip.
RUN pip install -c /home/$MYUNAME/builder-constraints.txt \
testrepository \
fixtures \
pbr \
git-review \
python-subunit \
junitxml \
testtools
# Create a sane py27 virtualenv
COPY toCOPY/builder-opt-py27-constraints.txt /home/$MYUNAME
RUN virtualenv /opt/py27 && \
source /opt/py27/bin/activate && \
pip install -c /home/$MYUNAME/builder-opt-py27-constraints.txt \
tox \
&& \
for prog in tox ; do \
ln -s /opt/py27/bin/$prog /usr/bin ; \
done
# Inherited tools for mock stuff
# we at least need the mock_cache_unlock tool

View File

@ -1,5 +1,10 @@
more-itertools===5.0.0;python_version=='2.7' # Last version with official 2.7 support
pyparsing===2.4.7
filelock===3.4.0 # Last version with official py2.7 support was 3.2.1, but 3.4.0 is known to work
platformdirs===2.4.0 # Last version with official py2.7 support was 2.0.2, but 2.4.0 is known to work
git-review==1.28.0 # Last version with official 2.7 support
pbr==5.6.0 # Last version with official 2.7 support
python-subunit==1.4.0
junitxml==0.7
testtools==2.4.0
testrepository==0.0.20 # Replacement for python-testrepository-0.18 rpm
fixtures==3.0.0 # Required by testrepository

View File

@ -0,0 +1 @@
tox===3.23.0