From 6fc46a3844eac97c76f07b7b14c307fcf498be83 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Tue, 7 Aug 2018 08:43:29 -0700 Subject: [PATCH] VSTS: Skip build steps when only docs have changed (GH-8546) --- .vsts/docs.yml | 16 +++++++++++++++- .vsts/linux-coverage.yml | 18 ++++++++++++++++++ .vsts/linux-pr.yml | 17 +++++++++++++++++ .vsts/macos-pr.yml | 18 ++++++++++++++++++ .vsts/windows-pr.yml | 12 ++++++++++++ 5 files changed, 80 insertions(+), 1 deletion(-) diff --git a/.vsts/docs.yml b/.vsts/docs.yml index 62f6123adb31..93a7282f770a 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 1bf7ae737c5a..62fafe347688 100644 --- a/.vsts/linux-coverage.yml +++ b/.vsts/linux-coverage.yml @@ -24,12 +24,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: > sudo apt-get -yq install @@ -54,18 +66,24 @@ steps: - 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 -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 110c188ab94f..c8e7fd03e849 100644 --- a/.vsts/linux-pr.yml +++ b/.vsts/linux-pr.yml @@ -24,12 +24,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: > sudo apt-get -yq install @@ -54,16 +66,21 @@ steps: - 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 d9b2297283b0..a3fd4487ed3a 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 5ec4522796ce..3dd5609a32e5 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')) -- 2.47.3