#!/usr/bin/env python
import os
import sys
import ci_lib
batches = [ ]
if 0 and os . uname ( ) [ 0 ] == ' Linux ' :
batches + = [
[
" sudo chown `whoami`: ~ " ,
" chmod u=rwx,g=rx,o= ~ " ,
" sudo mkdir /var/run/sshd " ,
" sudo /etc/init.d/ssh start " ,
" mkdir -p ~/.ssh " ,
" chmod u=rwx,go= ~/.ssh " ,
" ssh-keyscan -H localhost >> ~/.ssh/known_hosts " ,
" chmod u=rw,go= ~/.ssh/known_hosts " ,
" cat tests/data/docker/mitogen__has_sudo_pubkey.key > ~/.ssh/id_rsa " ,
" chmod u=rw,go= ~/.ssh/id_rsa " ,
" cat tests/data/docker/mitogen__has_sudo_pubkey.key.pub > ~/.ssh/authorized_keys " ,
" chmod u=rw,go=r ~/.ssh/authorized_keys " ,
]
]
# setup venv, need all python commands in 1 list to be subprocessed at the same time
venv_steps = [ ]
need_to_fix_psycopg2 = False
is_python3 = os . environ [ ' PYTHONVERSION ' ] . startswith ( ' 3 ' )
# @dw: The VSTS-shipped Pythons available via UsePythonVErsion are pure garbage,
# broken symlinks, incorrect permissions and missing codecs. So we use the
# deadsnakes PPA to get sane Pythons, and setup a virtualenv to install our
# stuff into. The virtualenv can probably be removed again, but this was a
# hard-fought battle and for now I am tired of this crap.
if ci_lib . have_apt ( ) :
venv_steps . extend ( [
' echo force-unsafe-io | sudo tee /etc/dpkg/dpkg.cfg.d/nosync ' ,
' sudo add-apt-repository ppa:deadsnakes/ppa ' ,
' sudo apt-get update ' ,
' sudo apt-get -y install '
' python {pv} '
' python {pv} -dev '
' libsasl2-dev '
' libldap2-dev '
. format ( pv = os . environ [ ' PYTHONVERSION ' ] ) ,
' sudo ln -fs /usr/bin/python {pv} /usr/local/bin/python {pv} '
. format ( pv = os . environ [ ' PYTHONVERSION ' ] )
] )
if is_python3 :
venv_steps . append ( ' sudo apt-get -y install python {pv} -venv ' . format ( pv = os . environ [ ' PYTHONVERSION ' ] ) )
# TODO: somehow `Mito36CentOS6_26` has both brew and apt installed https://dev.azure.com/dw-mitogen/Mitogen/_build/results?buildId=1031&view=logs&j=7bdbcdc6-3d3e-568d-ccf8-9ddca1a9623a&t=73d379b6-4eea-540f-c97e-046a2f620483
elif is_python3 and ci_lib . have_brew ( ) :
# Mac's System Integrity Protection prevents symlinking /usr/bin
# and Azure isn't allowing disabling it apparently: https://developercommunityapi.westus.cloudapp.azure.com/idea/558702/allow-disabling-sip-on-microsoft-hosted-macos-agen.html
# so we'll use /usr/local/bin/python for everything
# /usr/local/bin/python2.7 already exists!
need_to_fix_psycopg2 = True
venv_steps . append (
' brew install python@ {pv} postgresql '
. format ( pv = os . environ [ ' PYTHONVERSION ' ] )
)
# need wheel before building virtualenv because of bdist_wheel and setuptools deps
venv_steps . append ( ' /usr/local/bin/python {pv} -m pip install -U pip wheel setuptools ' . format ( pv = os . environ [ ' PYTHONVERSION ' ] ) )
if os . environ [ ' PYTHONVERSION ' ] . startswith ( ' 2 ' ) :
venv_steps . extend ( [
' /usr/local/bin/python {pv} -m pip install -U virtualenv ' . format ( pv = os . environ [ ' PYTHONVERSION ' ] ) ,
' /usr/local/bin/python {pv} -m virtualenv /tmp/venv -p /usr/local/bin/python {pv} ' . format ( pv = os . environ [ ' PYTHONVERSION ' ] )
] )
else :
venv_steps . append ( ' /usr/local/bin/python {pv} -m venv /tmp/venv ' . format ( pv = os . environ [ ' PYTHONVERSION ' ] ) )
# fixes https://stackoverflow.com/questions/59595649/can-not-install-psycopg2-on-macos-catalina https://github.com/Azure/azure-cli/issues/12854#issuecomment-619213863
if need_to_fix_psycopg2 :
venv_steps . append ( ' /tmp/venv/bin/pip3 install psycopg2==2.8.5 psycopg2-binary ' )
tests: Tighten requirements.txt, due to new package releases
Attempt to fix
Collecting hdrhistogram==0.6.1 (from -r tests/ansible/requirements.txt
(line 2))
Downloading
https://files.pythonhosted.org/packages/ac/30/2422ad2ad9a5ccfd2e3a8d7a9b98b4fa634945da0047d3b9f73061e8696f/hdrhistogram-0.6.1.tar.gz
(61kB)
Complete output from command python setup.py egg_info:
Couldn't find index page for 'pbr' (maybe misspelled?)
sources=['src/python-codec.c'])]
File "/usr/lib/python3.5/distutils/core.py", line 108, in setup
_setup_distribution = dist = klass(attrs)
File "/tmp/venv/lib/python3.5/site-packages/setuptools/dist.py",
line 315, in __init__
self.fetch_build_eggs(attrs['setup_requires'])
File "/tmp/venv/lib/python3.5/site-packages/setuptools/dist.py",
line 361, in fetch_build_eggs
replace_conflicting=True,
File
"/tmp/venv/lib/python3.5/site-packages/pkg_resources/__init__.py", line
850, in resolve
dist = best[req.key] = env.best_match(req, ws, installer)
File
"/tmp/venv/lib/python3.5/site-packages/pkg_resources/__init__.py", line
1122, in best_match
return self.obtain(req, installer)
File
"/tmp/venv/lib/python3.5/site-packages/pkg_resources/__init__.py", line
1134, in obtain
return installer(requirement)
File "/tmp/venv/lib/python3.5/site-packages/setuptools/dist.py",
line 429, in fetch_build_egg
return cmd.easy_install(req)
File
"/tmp/venv/lib/python3.5/site-packages/setuptools/command/easy_install.py",
line 659, in easy_install
raise DistutilsError(msg)
distutils.errors.DistutilsError: Could not find suitable
distribution for Requirement.parse('pbr')
3 years ago
venv_steps . extend ( [
# pbr is a transitive setup_requires of hdrhistogram. If it's not already
# installed then setuptools attempts to use easy_install, which fails.
' /tmp/venv/bin/pip install pbr==5.6.0 ' ,
] )
batches . append ( venv_steps )
ci_lib . run_batches ( batches )