[Python-checkins] VSTS: Skip build steps when only docs have changed (GH-8546)

Steve Dower webhook-mailer at python.org
Tue Aug 7 11:43:36 EDT 2018


https://github.com/python/cpython/commit/6fc46a3844eac97c76f07b7b14c307fcf498be83
commit: 6fc46a3844eac97c76f07b7b14c307fcf498be83
branch: 3.6
author: Steve Dower <steve.dower at microsoft.com>
committer: GitHub <noreply at github.com>
date: 2018-08-07T08:43:29-07:00
summary:

VSTS: Skip build steps when only docs have changed (GH-8546)

files:
M .vsts/docs.yml
M .vsts/linux-coverage.yml
M .vsts/linux-pr.yml
M .vsts/macos-pr.yml
M .vsts/windows-pr.yml

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 at 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 at 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'))



More information about the Python-checkins mailing list