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

diff --git a/.vsts/linux-coverage.yml b/.vsts/linux-coverage.yml
index 14e42fb..1112555 100644
--- a/.vsts/linux-coverage.yml
+++ b/.vsts/linux-coverage.yml
@@ -27,12 +27,24 @@
   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 @@
     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'))