diff --git a/.vsts/docs.yml b/.vsts/docs.yml index 62f6123adb3..93a7282f770 100644 --- a/.vsts/docs.yml +++ b/.vsts/docs.yml @@ -23,21 +23,35 @@ steps: clean: true fetchDepth: 5 +- script: | + git fetch -q origin $(system.pullRequest.targetBranch) + if ! git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD) | grep -qE '(\.rst$|^Doc|^Misc)' + then + echo "No docs were updated, stopping build process." + echo "##vso[task.setvariable variable=NoDocs]true" + exit + fi + displayName: Detect doc-only changes + condition: and(succeeded(), variables['system.pullRequest.targetBranch']) + - task: UsePythonVersion@0 displayName: 'Use Python 3.6 or later' inputs: versionSpec: '>=3.6' + condition: and(succeeded(), ne(variables['NoDocs'], 'true')) - script: python -m pip install sphinx~=1.6.1 blurb python-docs-theme displayName: 'Install build dependencies' + condition: and(succeeded(), ne(variables['NoDocs'], 'true')) - script: make check suspicious html PYTHON=python workingDirectory: '$(build.sourcesDirectory)/Doc' displayName: 'Build documentation' + condition: and(succeeded(), ne(variables['NoDocs'], 'true')) - task: PublishBuildArtifacts@1 displayName: 'Publish build' - condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')) + condition: and(and(succeeded(), ne(variables['Build.Reason'], 'PullRequest')), ne(variables['NoDocs'], 'true')) inputs: PathToPublish: '$(build.sourcesDirectory)/Doc/build' ArtifactName: build diff --git a/.vsts/linux-coverage.yml b/.vsts/linux-coverage.yml index 14e42fb6b61..1112555ab93 100644 --- a/.vsts/linux-coverage.yml +++ b/.vsts/linux-coverage.yml @@ -27,12 +27,24 @@ steps: clean: true fetchDepth: 5 +- script: | + git fetch -q origin $(system.pullRequest.targetBranch) + if ! git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD) | grep -qvE '(\.rst$|^Doc|^Misc)' + then + echo "Only docs were updated, stopping build process." + echo "##vso[task.setvariable variable=DocOnly]true" + exit + fi + displayName: Detect doc-only changes + condition: and(succeeded(), variables['system.pullRequest.targetBranch']) + #- template: linux-deps.yml # See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md # For now, we copy/paste the steps - script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update displayName: 'Update apt-get lists' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: echo ##vso[task.prependpath]$(OPENSSL_DIR) displayName: 'Add $(OPENSSL_DIR) to PATH' @@ -55,24 +67,32 @@ steps: uuid-dev xvfb displayName: 'Install dependencies' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux displayName: 'python multissltests.py' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: ./configure --with-pydebug displayName: 'Configure CPython (debug)' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: make -s -j4 displayName: 'Build CPython' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: ./python -m venv venv && ./venv/bin/python -m pip install -U coverage displayName: 'Set up virtual environment' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: ./venv/bin/python -m test.pythoninfo displayName: 'Display build info' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: xvfb-run ./venv/bin/python -m coverage run --pylib -m test --fail-env-changed -uall,-cpu -x test_multiprocessing_fork -x test_multiprocessing_forkserver -x test_multiprocessing_spawn -x test_concurrent_futures displayName: 'Tests with coverage' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: source ./venv/bin/activate && bash <(curl -s https://codecov.io/bash) displayName: 'Publish code coverage results' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) diff --git a/.vsts/linux-pr.yml b/.vsts/linux-pr.yml index 80e42844a1a..145ebb38016 100644 --- a/.vsts/linux-pr.yml +++ b/.vsts/linux-pr.yml @@ -27,15 +27,29 @@ steps: clean: true fetchDepth: 5 +- script: | + git fetch -q origin $(system.pullRequest.targetBranch) + if ! git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD) | grep -qvE '(\.rst$|^Doc|^Misc)' + then + echo "Only docs were updated, stopping build process." + echo "##vso[task.setvariable variable=DocOnly]true" + exit + fi + displayName: Detect doc-only changes + condition: and(succeeded(), variables['system.pullRequest.targetBranch']) + #- template: linux-deps.yml # See https://github.com/Microsoft/vsts-agent/blob/master/docs/preview/yamlgettingstarted-templates.md # For now, we copy/paste the steps - script: echo "deb-src http://archive.ubuntu.com/ubuntu/ xenial main" > /etc/apt/sources.list.d/python.list && sudo apt-get update displayName: 'Update apt-get lists' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: echo ##vso[task.prependpath]$(OPENSSL_DIR) displayName: 'Add $(OPENSSL_DIR) to PATH' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) + - script: > sudo apt-get -yq install build-essential @@ -55,22 +69,30 @@ steps: uuid-dev xvfb displayName: 'Install dependencies' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) + - script: python3 Tools/ssl/multissltests.py --steps=library --base-directory $(build.sourcesDirectory)/multissl --openssl $(OPENSSL) --system Linux displayName: 'python multissltests.py' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: ./configure --with-pydebug displayName: 'Configure CPython (debug)' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: make -s -j4 displayName: 'Build CPython' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: make pythoninfo displayName: 'Display build info' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) # Run patchcheck and fail if anything is discovered - script: ./python Tools/scripts/patchcheck.py --travis true displayName: 'Run patchcheck.py' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" displayName: 'Tests' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) diff --git a/.vsts/macos-pr.yml b/.vsts/macos-pr.yml index d9b2297283b..a3fd4487ed3 100644 --- a/.vsts/macos-pr.yml +++ b/.vsts/macos-pr.yml @@ -24,14 +24,32 @@ steps: clean: true fetchDepth: 5 +- script: | + git fetch -q origin $(system.pullRequest.targetBranch) + changes = $(git diff --name-only HEAD $(git merge-base HEAD FETCH_HEAD)) + echo "Files changed:" + echo "$changes" + if ! echo "$changes" | grep -qvE '(\.rst$)|(^Doc)|(^Misc)' + then + echo "Only docs were updated, stopping build process." + echo "##vso[task.setvariable variable=DocOnly]true" + exit + fi + displayName: Detect doc-only changes + condition: and(succeeded(), variables['system.pullRequest.targetBranch']) + - script: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-vsts displayName: 'Configure CPython (debug)' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: make -s -j4 displayName: 'Build CPython' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: make pythoninfo displayName: 'Display build info' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: make buildbottest TESTOPTS="-j4 -uall,-cpu" displayName: 'Tests' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) diff --git a/.vsts/windows-pr.yml b/.vsts/windows-pr.yml index 5ec4522796c..3dd5609a32e 100644 --- a/.vsts/windows-pr.yml +++ b/.vsts/windows-pr.yml @@ -37,13 +37,25 @@ steps: clean: true fetchDepth: 5 +- powershell: | + git fetch -q origin $(System.PullRequest.TargetBranch) + if (-not (git diff --name-only HEAD (git merge-base HEAD FETCH_HEAD) | sls -NotMatch '(\.rst$)|(^Doc)|(^Misc)')) { + Write-Host 'Only docs were updated. Skipping build' + Write-Host '##vso[task.setvariable variable=DocOnly]true' + } + displayName: Detect doc-only changes + condition: and(succeeded(), variables['System.PullRequest.TargetBranch']) + - script: PCbuild\build.bat -e $(buildOpt) displayName: 'Build CPython' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: python.bat -m test.pythoninfo displayName: 'Display build info' + condition: and(succeeded(), ne(variables['DocOnly'], 'true')) - script: PCbuild\rt.bat -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0 displayName: 'Tests' env: PREFIX: $(Py_OutDir)\$(outDirSuffix) + condition: and(succeeded(), ne(variables['DocOnly'], 'true'))