mirror of
https://github.com/certbot/certbot.git
synced 2026-06-08 16:22:18 -04:00
This PR passes the CERTBOT_NO_PIN environment variable to the unit tests tox envs. By setting CERTBOT_NO_PIN to 1 before executing a given tox env, certbot dependencies will be installed at their latest version instead of the usual pinned version. I also moved the unpin logic one layer below to allow it to be used potentially more widely, and avoid unnecessary merging constraints operation in this case. As warnings are errors now, latest versions of Python will break now the tests, because collections launch a warning when some classes are imported from collections instead of collections.abc. Certbot code is patched, and warning is ignored for now, because a lot of third party libraries still depend on this behavior. * Allow to execute a tox target without pinned dependencies * Correct lint * Retrigger build. * Remove debug code * Added test against unpinned dependencies from test-everything-unpinned-dependencies branch * Remove duplicated assertion to pass TRAVIS and APPVEYOR in default tox environment.
57 lines
1.8 KiB
Python
Executable file
57 lines
1.8 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# pip installs the requested packages in editable mode and runs unit tests on
|
|
# them. Each package is installed and tested in the order they are provided
|
|
# before the script moves on to the next package. If CERTBOT_NO_PIN is set not
|
|
# set to 1, packages are installed using pinned versions of all of our
|
|
# dependencies. See pip_install.py for more information on the versions pinned
|
|
# to.
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
import shutil
|
|
import subprocess
|
|
import re
|
|
|
|
SKIP_PROJECTS_ON_WINDOWS = [
|
|
'certbot-apache', 'certbot-nginx', 'certbot-postfix', 'letshelp-certbot']
|
|
|
|
|
|
def call_with_print(command, cwd=None):
|
|
print(command)
|
|
subprocess.check_call(command, shell=True, cwd=cwd or os.getcwd())
|
|
|
|
|
|
def main(args):
|
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
command = [sys.executable, os.path.join(script_dir, 'pip_install_editable.py')]
|
|
|
|
new_args = []
|
|
for arg in args:
|
|
if os.name == 'nt' and arg in SKIP_PROJECTS_ON_WINDOWS:
|
|
print((
|
|
'Info: currently {0} is not supported on Windows and will not be tested.'
|
|
.format(arg)))
|
|
else:
|
|
new_args.append(arg)
|
|
|
|
for requirement in new_args:
|
|
current_command = command[:]
|
|
current_command.append(requirement)
|
|
call_with_print(' '.join(current_command))
|
|
pkg = re.sub(r'\[\w+\]', '', requirement)
|
|
|
|
if pkg == '.':
|
|
pkg = 'certbot'
|
|
|
|
temp_cwd = tempfile.mkdtemp()
|
|
shutil.copy2("pytest.ini", temp_cwd)
|
|
try:
|
|
call_with_print(' '.join([
|
|
sys.executable, '-m', 'pytest', pkg.replace('-', '_')]), cwd=temp_cwd)
|
|
finally:
|
|
shutil.rmtree(temp_cwd)
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv[1:])
|