diff --git a/.azure-pipelines/jobs/run-manifest-check.yml b/.azure-pipelines/jobs/run-manifest-check.yml index 6aa63480..4d12a800 100644 --- a/.azure-pipelines/jobs/run-manifest-check.yml +++ b/.azure-pipelines/jobs/run-manifest-check.yml @@ -11,5 +11,5 @@ steps: export GIT_SSL_CAINFO=$(python -m certifi) export LANG=C.UTF-8 python -m pip install --upgrade setuptools twine readme_renderer[md] - python setup.py sdist + python setup.py sdist bdist_wheel twine check dist/* diff --git a/.azure-pipelines/jobs/run-tests-windows.yml b/.azure-pipelines/jobs/run-tests-windows.yml index 700732c5..05573b10 100644 --- a/.azure-pipelines/jobs/run-tests-windows.yml +++ b/.azure-pipelines/jobs/run-tests-windows.yml @@ -13,6 +13,6 @@ steps: - template: ../steps/install-dependencies.yml -- template: ../steps/create-virtualenv.yml +- template: ../steps/create-virtualenv-windows.yml -- template: ../steps/run-tests.yml +- template: ../steps/run-tests-windows.yml diff --git a/.azure-pipelines/jobs/run-vendor-scripts.yml b/.azure-pipelines/jobs/run-vendor-scripts.yml index a419d941..947014b5 100644 --- a/.azure-pipelines/jobs/run-vendor-scripts.yml +++ b/.azure-pipelines/jobs/run-vendor-scripts.yml @@ -9,14 +9,9 @@ jobs: strategy: maxParallel: 4 matrix: - ${{ if eq(parameters.vmImage, 'vs2017-win2016') }}: - Python37: - python.version: '>= 3.7.2' - python.architecture: x64 - ${{ if ne(parameters.vmImage, 'vs2017-win2016' )}}: - Python37: - python.version: '>= 3.7' - python.architecture: x64 + Python37: + python.version: '>= 3.7' + python.architecture: x64 steps: - task: UsePythonVersion@0 displayName: Use Python $(python.version) diff --git a/.azure-pipelines/jobs/test.yml b/.azure-pipelines/jobs/test.yml index 4c8fc420..b6c341f8 100644 --- a/.azure-pipelines/jobs/test.yml +++ b/.azure-pipelines/jobs/test.yml @@ -12,37 +12,15 @@ jobs: Python27: python.version: '2.7' python.architecture: x64 - ${{ if eq(parameters.vmImage, 'vs2017-win2016') }}: - # TODO remove once vs2017-win2016 has Python 3.7 - Python37: - python.version: '>= 3.7.2' - python.architecture: x64 - ${{ if ne(parameters.vmImage, 'vs2017-win2016' )}}: - Python37: - python.version: '>= 3.7' - python.architecture: x64 - steps: - - ${{ if eq(parameters.vmImage, 'vs2017-win2016') }}: - - template: ./run-tests-windows.yml - - - ${{ if ne(parameters.vmImage, 'vs2017-win2016') }}: - - template: ./run-tests.yml - -- job: Test_Secondary - displayName: Test python3.6 - # Run after Test_Primary so we don't devour time and jobs if tests are going to fail - # dependsOn: Test_Primary - pool: - vmImage: ${{ parameters.vmImage }} - strategy: - maxParallel: 4 - matrix: + Python37: + python.version: '>= 3.7' + python.architecture: x64 Python36: - python.version: '3.6' + python.version: '>= 3.6' python.architecture: x64 steps: - - ${{ if eq(parameters.vmImage, 'vs2017-win2016') }}: + - ${{ if eq(parameters.vmImage, 'windows-2019') }}: - template: ./run-tests-windows.yml - - ${{ if ne(parameters.vmImage, 'vs2017-win2016') }}: + - ${{ if ne(parameters.vmImage, 'windows-2019') }}: - template: ./run-tests.yml diff --git a/.azure-pipelines/steps/create-virtualenv.yml b/.azure-pipelines/steps/create-virtualenv-windows.yml similarity index 100% rename from .azure-pipelines/steps/create-virtualenv.yml rename to .azure-pipelines/steps/create-virtualenv-windows.yml diff --git a/.azure-pipelines/steps/install-dependencies.yml b/.azure-pipelines/steps/install-dependencies.yml index fd0da841..1537640a 100644 --- a/.azure-pipelines/steps/install-dependencies.yml +++ b/.azure-pipelines/steps/install-dependencies.yml @@ -1,3 +1,3 @@ steps: -- script: 'python -m pip install --upgrade pip setuptools wheel && python -m pip install -e .[test] --upgrade' +- script: 'python -m pip install --upgrade pip setuptools wheel && python -m pip install -e .[tests] --upgrade' displayName: Upgrade Pip & Install Pipenv diff --git a/.azure-pipelines/steps/run-tests-linux.yml b/.azure-pipelines/steps/run-tests-linux.yml new file mode 100644 index 00000000..c49be8b1 --- /dev/null +++ b/.azure-pipelines/steps/run-tests-linux.yml @@ -0,0 +1,8 @@ +- script: | + # Fix Git SSL errors + export GIT_SSL_CAINFO="$(python -m certifi)" + export LANG="C.UTF-8" + export PIP_PROCESS_DEPENDENCY_LINKS="1" + git submodule sync && git submodule update --init --recursive + pipenv run pytest --junitxml=test-results.xml + displayName: Run integration tests diff --git a/.azure-pipelines/steps/run-tests-windows.yml b/.azure-pipelines/steps/run-tests-windows.yml new file mode 100644 index 00000000..cc3aac27 --- /dev/null +++ b/.azure-pipelines/steps/run-tests-windows.yml @@ -0,0 +1,21 @@ +steps: +- powershell: | + # Fix Git SSL errors + Invoke-Expression "& '$env:VIRTUAL_ENV_PY' -m pip install certifi" + Invoke-Expression "& '$env:VIRTUAL_ENV_PY' -m certifi > cacert.txt" + Write-Host "##vso[task.setvariable variable=GIT_SSL_CAINFO]$(Get-Content cacert.txt)" + $env:GIT_SSL_CAINFO="$(Get-Content cacert.txt)" + # Shorten paths to get under MAX_PATH or else integration tests will fail + # https://bugs.python.org/issue18199 + subst T: "$env:TEMP" + Write-Host "##vso[task.setvariable variable=TEMP]T:\" + $env:TEMP='T:\' + Write-Host "##vso[task.setvariable variable=TMP]T:\" + $env:TMP='T:\' + git submodule sync + git submodule update --init --recursive + Invoke-Expression "& '$env:VIRTUAL_ENV_PY' -m pipenv run pytest -ra --ignore=pipenv\patched --ignore=pipenv\vendor --junitxml=test-results.xml tests" + displayName: Run integration tests + env: + VIRTUAL_ENV: $(VIRTUAL_ENV) + VIRTUAL_ENV_PY: $(VIRTUAL_ENV_PY) diff --git a/.azure-pipelines/steps/run-tests.yml b/.azure-pipelines/steps/run-tests.yml index 9c38d5e8..cee9b846 100644 --- a/.azure-pipelines/steps/run-tests.yml +++ b/.azure-pipelines/steps/run-tests.yml @@ -1,24 +1,23 @@ steps: -- powershell: | - # Fix Git SSL errors - Invoke-Expression "& '$env:VIRTUAL_ENV_PY' -m pip install certifi" - Invoke-Expression "& '$env:VIRTUAL_ENV_PY' -m certifi > cacert.txt" - Write-Host "##vso[task.setvariable variable=GIT_SSL_CAINFO]$(Get-Content cacert.txt)" - $env:GIT_SSL_CAINFO="$(Get-Content cacert.txt)" - # Shorten paths to get under MAX_PATH or else integration tests will fail - # https://bugs.python.org/issue18199 - subst T: "$env:TEMP" - Write-Host "##vso[task.setvariable variable=TEMP]T:\" - $env:TEMP='T:\' - Write-Host "##vso[task.setvariable variable=TMP]T:\" - $env:TMP='T:\' - git submodule sync - git submodule update --init --recursive - Invoke-Expression "& '$env:VIRTUAL_ENV_PY' -m pipenv run pytest -ra --ignore=pipenv\patched --ignore=pipenv\vendor --junitxml=test-results.xml tests" - displayName: Run integration tests + - task: UsePythonVersion@0 + inputs: + versionSpec: $(python.version) + architecture: '$(python.architecture)' + addToPath: true + displayName: Use Python $(python.version) + + - template: install-dependencies.yml +steps: +- script: | + echo '##vso[task.setvariable variable=PIPENV_DEFAULT_PYTHON_VERSION]$(PYTHON_VERSION)' env: - VIRTUAL_ENV: $(VIRTUAL_ENV) - VIRTUAL_ENV_PY: $(VIRTUAL_ENV_PY) + PYTHON_VERSION: $(python.version) +- ${{ if eq(parameters.vmImage, 'windows-2019') }}: + - template: create-virtualenv-windows.yml + - template: run-tests-windows.yml +- ${{ if ne(parameters.vmImage, 'windows-2019') }}: + - template: create-virtualenv-linux.yml + - template: run-tests-linux.yml - task: PublishTestResults@2 displayName: Publish Test Results diff --git a/.azure-pipelines/windows.yml b/.azure-pipelines/windows.yml index 0f04afbe..c763bd34 100644 --- a/.azure-pipelines/windows.yml +++ b/.azure-pipelines/windows.yml @@ -21,4 +21,4 @@ trigger: jobs: - template: jobs/test.yml parameters: - vmImage: vs2017-win2016 + vmImage: windows-2019 diff --git a/Pipfile.lock b/Pipfile.lock index 53c174cf..416bfd79 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -72,7 +72,7 @@ "sha256:9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a", "sha256:f0b0e4eba956de51238e17573b7087e852dfe9854afd2e9c873f73fc0ca0a6dd" ], - "markers": "python_version < '3'", + "markers": "python_version == '2.7'", "version": "==1.5" }, "backports.shutil-get-terminal-size": { @@ -80,7 +80,7 @@ "sha256:0975ba55054c15e346944b38956a4c9cbee9009391e41b86c68990effb8c1f64", "sha256:713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80" ], - "markers": "python_version < '3.3'", + "markers": "python_version == '2.7'", "version": "==1.0.0" }, "backports.weakref": { @@ -88,7 +88,7 @@ "sha256:81bc9b51c0abc58edc76aefbbc68c62a787918ffe943a37947e162c3f8e19e82", "sha256:bc4170a29915f8b22c9e7c4939701859650f2eb84184aee80da329ac0b9825c2" ], - "markers": "python_version < '3.3'", + "markers": "python_version == '2.7'", "version": "==1.0.post1" }, "beautifulsoup4": { @@ -165,12 +165,11 @@ }, "configparser": { "hashes": [ - "sha256:5bd5fa2a491dc3cfe920a3f2a107510d65eceae10e9c6e547b90261a4710df32", - "sha256:c114ff90ee2e762db972fa205f02491b1f5cf3ff950decd8542c62970c9bedac", - "sha256:df28e045fbff307a28795b18df6ac8662be3219435560ddb068c283afab1ea7a" + "sha256:8be81d89d6e7b4c0d4e44bcc525845f6da25821de80cb5e06e7e0238a2899e32", + "sha256:da60d0014fd8c55eb48c1c5354352e363e2d30bbf7057e5e171a468390184c75" ], - "markers": "python_version < '3.2'", - "version": "==3.7.1" + "markers": "python_version == '2.7'", + "version": "==3.7.4" }, "distlib": { "hashes": [ @@ -247,7 +246,7 @@ "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca", "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50" ], - "markers": "python_version < '3.0'", + "markers": "python_version < '3.3'", "version": "==1.0.2" }, "functools32": { @@ -255,7 +254,7 @@ "sha256:89d824aa6c358c421a234d7f9ee0bd75933a67c29588ce50aaa3acdf4d403fa0", "sha256:f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d" ], - "markers": "python_version >= '2.7' and python_version < '2.8'", + "markers": "python_version < '3.2'", "version": "==3.2.3.post2" }, "futures": { @@ -263,7 +262,7 @@ "sha256:9ec02aa7d674acb8618afb127e27fde7fc68994c0437ad759fa094a574adb265", "sha256:ec0a6cb848cc212002b9828c3e34c675e0c9ff6741dc445cab6fdd4e1085d1f1" ], - "markers": "python_version < '3.0'", + "markers": "python_version < '3.2'", "version": "==3.2.0" }, "idna": { @@ -617,20 +616,20 @@ }, "scandir": { "hashes": [ - "sha256:04b8adb105f2ed313a7c2ef0f1cf7aff4871aa7a1883fa4d8c44b5551ab052d6", - "sha256:1444134990356c81d12f30e4b311379acfbbcd03e0bab591de2696a3b126d58e", - "sha256:1b5c314e39f596875e5a95dd81af03730b338c277c54a454226978d5ba95dbb6", - "sha256:346619f72eb0ddc4cf355ceffd225fa52506c92a2ff05318cfabd02a144e7c4e", - "sha256:44975e209c4827fc18a3486f257154d34ec6eaec0f90fef0cca1caa482db7064", - "sha256:61859fd7e40b8c71e609c202db5b0c1dbec0d5c7f1449dec2245575bdc866792", - "sha256:a5e232a0bf188362fa00123cc0bb842d363a292de7126126df5527b6a369586a", - "sha256:c14701409f311e7a9b7ec8e337f0815baf7ac95776cc78b419a1e6d49889a383", - "sha256:c7708f29d843fc2764310732e41f0ce27feadde453261859ec0fca7865dfc41b", - "sha256:c9009c527929f6e25604aec39b0a43c3f831d2947d89d6caaab22f057b7055c8", - "sha256:f5c71e29b4e2af7ccdc03a020c626ede51da471173b4a6ad1e904f2b2e04b4bd" + "sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e", + "sha256:2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022", + "sha256:2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f", + "sha256:2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f", + "sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae", + "sha256:67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173", + "sha256:7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4", + "sha256:8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32", + "sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188", + "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d", + "sha256:cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac" ], "markers": "python_version < '3.5'", - "version": "==1.9.0" + "version": "==1.10.0" }, "six": { "hashes": [ diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 00000000..bf9d4a86 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,69 @@ +name: Pipenv Build Rules +trigger: + batch: true + branches: + include: + - master + paths: + exclude: + - docs/* + - news/* + - peeps/* + - README.md + - pipenv/*.txt + - CHANGELOG.rst + - CONTRIBUTING.md + - CODE_OF_CONDUCT.md + - .gitignore + - .gitattributes + - .editorconfig + +jobs: +- job: TestLinux + pool: + vmImage: 'Ubuntu-16.04' + strategy: + matrix: + Python27: + python.version: '2.7' + Python36: + python.version: '3.6' + Python37: + python.version: '3.7' + maxParallel: 4 + steps: + - template: .azure-pipelines/steps/run-tests.yml + - template: .azure-pipelines/jobs/run-vendor-scripts.yml + +- job: TestWindows + pool: + vmImage: windows-2019 + strategy: + matrix: + Python27: + python.version: '2.7' + python.architecture: x64 + Python36: + python.version: '3.6' + python.architecture: x64 + Python37: + python.version: '3.7' + python.architecture: x64 + maxParallel: 4 + steps: + - template: .azure-pipelines/steps/run-tests.yml + +- job: TestMacOS + pool: + vmImage: macOS-10.13 + strategy: + matrix: + Python27: + python.version: '2.7' + Python36: + python.version: '3.6' + Python37: + python.version: '3.7' + maxParallel: 4 + steps: + - template: .azure-pipelines/steps/run-tests.yml diff --git a/pipenv/exceptions.py b/pipenv/exceptions.py index 27b05868..c8ca0dc8 100644 --- a/pipenv/exceptions.py +++ b/pipenv/exceptions.py @@ -30,7 +30,7 @@ else: KnownException = namedtuple( 'KnownException', ['exception_name', 'match_string', 'show_from_string', 'prefix'], ) - KnownException.__new__.__defaults__ = (None, None, None, "") + KnownException.__new__.__defaults__ = (None, None, None, "") KNOWN_EXCEPTIONS = [ KnownException("PermissionError", prefix="Permission Denied:"), diff --git a/setup.py b/setup.py index 235b5a10..d0beff70 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,9 @@ required = [ "setuptools>=41.0.0", "virtualenv-clone>=0.2.5", "virtualenv", - 'enum34; python_version<"3"' + 'enum34; python_version<"3"', + # LEAVE THIS HERE!!! we have vendored dependencies that require it + 'typing; python_version<"3.5"' ] extras = { "dev": [ diff --git a/tasks/vendoring/patches/patched/piptools.patch b/tasks/vendoring/patches/patched/piptools.patch index 84259ad3..419711e8 100644 --- a/tasks/vendoring/patches/patched/piptools.patch +++ b/tasks/vendoring/patches/patched/piptools.patch @@ -400,7 +400,7 @@ index e54ae08..75b8208 100644 ireq.is_direct = True - reqset.add_requirement(ireq) + # reqset.add_requirement(ireq) - resolver = pip_shims.shims.Resolver(**resolver_kwargs) ++ resolver = pip_shims.shims.Resolver(**resolver_kwargs) resolver.require_hashes = False results = resolver._resolve_one(reqset, ireq) - reqset.cleanup_files()