about summary refs log blame commit diff
path: root/azure-pipelines.yml
blob: 675c3a43c9cc2be2644d2c1b87bf289437c380e7 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                       




                            

                           






















































                                                                                                                                                                           

                           



































































                                                                                                                             

































































































































































                                                                                                                                                                           


                          

                          




































                                                                                                                                                                                            

                          



































                                                                                                                                                                                            

                         

































                                                                                                                                                                                            

                         































                                                                                                                                                                                            

                          



































                                                                                                                                                                                            

                          
































                                                                                                                                                                                                                                                                                                                                                                                                                       

                          




                                                                                                                                                                                            
                                                                                                 












                                                                                                  

                          




                                                                                                                                                                                            
                                                                           









                                                                                                  
variables:
  Agent.Source.Git.ShallowFetchDepth: 1

jobs:
- job: windows_build
  displayName: Windows Build
  condition: succeeded()
  pool:
    vmImage: windows-latest
  timeoutInMinutes: 240
  steps:
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
        cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
      }
    displayName: 'Mount test-cache'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - powershell: |
      $urlbase = "https://dev.azure.com/git-for-windows/git/_apis/build/builds"
      $id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[1].resource.downloadUrl
      (New-Object Net.WebClient).DownloadFile($downloadUrl,"git-sdk-64-minimal.zip")
      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force
      Remove-Item git-sdk-64-minimal.zip

      # Let Git ignore the SDK and the test-cache
      "/git-sdk-64-minimal/`n/test-cache/`n" | Out-File -NoNewLine -Encoding ascii -Append "$(Build.SourcesDirectory)\.git\info\exclude"
    displayName: 'Download git-sdk-64-minimal'
  - powershell: |
      & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
        ci/make-test-artifacts.sh artifacts
      "@
      if (!$?) { exit(1) }
    displayName: Build
    env:
      HOME: $(Build.SourcesDirectory)
      MSYSTEM: MINGW64
      DEVELOPER: 1
      NO_PERL: 1
  - task: PublishPipelineArtifact@0
    displayName: 'Publish Pipeline Artifact: test artifacts'
    inputs:
      artifactName: 'windows-artifacts'
      targetPath: '$(Build.SourcesDirectory)\artifacts'
  - task: PublishPipelineArtifact@0
    displayName: 'Publish Pipeline Artifact: git-sdk-64-minimal'
    inputs:
      artifactName: 'git-sdk-64-minimal'
      targetPath: '$(Build.SourcesDirectory)\git-sdk-64-minimal'
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
      }
    displayName: 'Unmount test-cache'
    condition: true
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)

- job: windows_test
  displayName: Windows Test
  dependsOn: windows_build
  condition: succeeded()
  pool:
    vmImage: windows-latest
  timeoutInMinutes: 240
  strategy:
    parallel: 10
  steps:
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
        cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
      }
    displayName: 'Mount test-cache'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: DownloadPipelineArtifact@0
    displayName: 'Download Pipeline Artifact: test artifacts'
    inputs:
      artifactName: 'windows-artifacts'
      targetPath: '$(Build.SourcesDirectory)'
  - task: DownloadPipelineArtifact@0
    displayName: 'Download Pipeline Artifact: git-sdk-64-minimal'
    inputs:
      artifactName: 'git-sdk-64-minimal'
      targetPath: '$(Build.SourcesDirectory)\git-sdk-64-minimal'
  - powershell: |
      & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
        test -f artifacts.tar.gz || {
          echo No test artifacts found\; skipping >&2
          exit 0
        }
        tar xf artifacts.tar.gz || exit 1

        # Let Git ignore the SDK and the test-cache
        printf '%s\n' /git-sdk-64-minimal/ /test-cache/ >>.git/info/exclude

        ci/run-test-slice.sh `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE || {
          ci/print-test-failures.sh
          exit 1
        }
      "@
      if (!$?) { exit(1) }
    displayName: 'Test (parallel)'
    env:
      HOME: $(Build.SourcesDirectory)
      MSYSTEM: MINGW64
      NO_SVN_TESTS: 1
      GIT_TEST_SKIP_REBASE_P: 1
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
      }
    displayName: 'Unmount test-cache'
    condition: true
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'windows'
      platform: Windows
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: vs_build
  displayName: Visual Studio Build
  condition: succeeded()
  pool:
    vmImage: windows-latest
  timeoutInMinutes: 240
  steps:
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
        cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
      }
    displayName: 'Mount test-cache'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - powershell: |
      $urlbase = "https://dev.azure.com/git-for-windows/git/_apis/build/builds"
      $id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=22&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[1].resource.downloadUrl
      (New-Object Net.WebClient).DownloadFile($downloadUrl,"git-sdk-64-minimal.zip")
      Expand-Archive git-sdk-64-minimal.zip -DestinationPath . -Force
      Remove-Item git-sdk-64-minimal.zip

      # Let Git ignore the SDK and the test-cache
      "/git-sdk-64-minimal/`n/test-cache/`n" | Out-File -NoNewLine -Encoding ascii -Append "$(Build.SourcesDirectory)\.git\info\exclude"
    displayName: 'Download git-sdk-64-minimal'
  - powershell: |
      & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
        make NDEBUG=1 DEVELOPER=1 vcxproj
      "@
      if (!$?) { exit(1) }
    displayName: Generate Visual Studio Solution
    env:
      HOME: $(Build.SourcesDirectory)
      MSYSTEM: MINGW64
      DEVELOPER: 1
      NO_PERL: 1
      GIT_CONFIG_PARAMETERS: "'user.name=CI' 'user.email=ci@git'"
  - powershell: |
      $urlbase = "https://dev.azure.com/git/git/_apis/build/builds"
      $id = ((Invoke-WebRequest -UseBasicParsing "${urlbase}?definitions=9&statusFilter=completed&resultFilter=succeeded&`$top=1").content | ConvertFrom-JSON).value[0].id
      $downloadUrl = ((Invoke-WebRequest -UseBasicParsing "${urlbase}/$id/artifacts").content | ConvertFrom-JSON).value[0].resource.downloadUrl
      (New-Object Net.WebClient).DownloadFile($downloadUrl, "compat.zip")
      Expand-Archive compat.zip -DestinationPath . -Force
      Remove-Item compat.zip
    displayName: 'Download vcpkg artifacts'
  - task: MSBuild@1
    inputs:
      solution: git.sln
      platform: x64
      configuration: Release
      maximumCpuCount: 4
      msbuildArguments: /p:PlatformToolset=v142
  - powershell: |
      & compat\vcbuild\vcpkg_copy_dlls.bat release
      if (!$?) { exit(1) }
      & git-sdk-64-minimal\usr\bin\bash.exe -lc @"
        mkdir -p artifacts &&
        eval \"`$(make -n artifacts-tar INCLUDE_DLLS_IN_ARTIFACTS=YesPlease ARTIFACTS_DIRECTORY=artifacts | grep ^tar)\"
      "@
      if (!$?) { exit(1) }
    displayName: Bundle artifact tar
    env:
      HOME: $(Build.SourcesDirectory)
      MSYSTEM: MINGW64
      DEVELOPER: 1
      NO_PERL: 1
      MSVC: 1
      VCPKG_ROOT: $(Build.SourcesDirectory)\compat\vcbuild\vcpkg
  - powershell: |
      $tag = (Invoke-WebRequest -UseBasicParsing "https://gitforwindows.org/latest-tag.txt").content
      $version = (Invoke-WebRequest -UseBasicParsing "https://gitforwindows.org/latest-version.txt").content
      $url = "https://github.com/git-for-windows/git/releases/download/${tag}/PortableGit-${version}-64-bit.7z.exe"
      (New-Object Net.WebClient).DownloadFile($url,"PortableGit.exe")
      & .\PortableGit.exe -y -oartifacts\PortableGit
      # Wait until it is unpacked
      while (-not @(Remove-Item -ErrorAction SilentlyContinue PortableGit.exe; $?)) { sleep 1 }
    displayName: Download & extract portable Git
  - task: PublishPipelineArtifact@0
    displayName: 'Publish Pipeline Artifact: MSVC test artifacts'
    inputs:
      artifactName: 'vs-artifacts'
      targetPath: '$(Build.SourcesDirectory)\artifacts'
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
      }
    displayName: 'Unmount test-cache'
    condition: true
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)

- job: vs_test
  displayName: Visual Studio Test
  dependsOn: vs_build
  condition: succeeded()
  pool:
    vmImage: windows-latest
  timeoutInMinutes: 240
  strategy:
    parallel: 10
  steps:
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        net use s: \\gitfileshare.file.core.windows.net\test-cache "$GITFILESHAREPWD" /user:AZURE\gitfileshare /persistent:no
        cmd /c mklink /d "$(Build.SourcesDirectory)\test-cache" S:\
      }
    displayName: 'Mount test-cache'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: DownloadPipelineArtifact@0
    displayName: 'Download Pipeline Artifact: VS test artifacts'
    inputs:
      artifactName: 'vs-artifacts'
      targetPath: '$(Build.SourcesDirectory)'
  - powershell: |
      & PortableGit\git-cmd.exe --command=usr\bin\bash.exe -lc @"
        test -f artifacts.tar.gz || {
          echo No test artifacts found\; skipping >&2
          exit 0
        }
        tar xf artifacts.tar.gz || exit 1

        # Let Git ignore the SDK and the test-cache
        printf '%s\n' /PortableGit/ /test-cache/ >>.git/info/exclude

        cd t &&
        PATH=\"`$PWD/helper:`$PATH\" &&
        test-tool.exe run-command testsuite --jobs=10 -V -x --write-junit-xml \
                `$(test-tool.exe path-utils slice-tests \
                        `$SYSTEM_JOBPOSITIONINPHASE `$SYSTEM_TOTALJOBSINPHASE t[0-9]*.sh)
      "@
      if (!$?) { exit(1) }
    displayName: 'Test (parallel)'
    env:
      HOME: $(Build.SourcesDirectory)
      MSYSTEM: MINGW64
      NO_SVN_TESTS: 1
      GIT_TEST_SKIP_REBASE_P: 1
  - powershell: |
      if ("$GITFILESHAREPWD" -ne "" -and "$GITFILESHAREPWD" -ne "`$`(gitfileshare.pwd)") {
        cmd /c rmdir "$(Build.SourcesDirectory)\test-cache"
      }
    displayName: 'Unmount test-cache'
    condition: true
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'vs'
      platform: Windows
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-vs-test-artifacts

- job: linux_clang
  displayName: linux-clang
  condition: succeeded()
  pool:
    vmImage: ubuntu-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       sudo apt-get update &&
       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2-bin &&

       export CC=clang || exit 1

       ci/install-dependencies.sh || exit 1
       ci/run-build-and-tests.sh || {
           ci/print-test-failures.sh
           exit 1
       }

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
    displayName: 'ci/run-build-and-tests.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'linux-clang'
      platform: Linux
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: linux_gcc
  displayName: linux-gcc
  condition: succeeded()
  pool:
    vmImage: ubuntu-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&
       sudo apt-get update &&
       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev apache2 language-pack-is git-svn gcc-8 || exit 1

       ci/install-dependencies.sh || exit 1
       ci/run-build-and-tests.sh || {
           ci/print-test-failures.sh
           exit 1
       }

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
    displayName: 'ci/run-build-and-tests.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'linux-gcc'
      platform: Linux
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: osx_clang
  displayName: osx-clang
  condition: succeeded()
  pool:
    vmImage: macOS-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       export CC=clang

       ci/install-dependencies.sh || exit 1
       ci/run-build-and-tests.sh || {
           ci/print-test-failures.sh
           exit 1
       }

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || umount "$HOME/test-cache" || exit 1
    displayName: 'ci/run-build-and-tests.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'osx-clang'
      platform: macOS
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: osx_gcc
  displayName: osx-gcc
  condition: succeeded()
  pool:
    vmImage: macOS-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       ci/install-dependencies.sh || exit 1
       ci/run-build-and-tests.sh || {
           ci/print-test-failures.sh
           exit 1
       }

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || umount "$HOME/test-cache" || exit 1
    displayName: 'ci/run-build-and-tests.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'osx-gcc'
      platform: macOS
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: gettext_poison
  displayName: GETTEXT_POISON
  condition: succeeded()
  pool:
    vmImage: ubuntu-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       sudo apt-get update &&
       sudo apt-get -y install git gcc make libssl-dev libcurl4-openssl-dev libexpat-dev tcl tk gettext git-email zlib1g-dev &&

       export jobname=GETTEXT_POISON || exit 1

       ci/run-build-and-tests.sh || {
           ci/print-test-failures.sh
           exit 1
       }

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
    displayName: 'ci/run-build-and-tests.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'gettext-poison'
      platform: Linux
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: linux32
  displayName: Linux32
  condition: succeeded()
  pool:
    vmImage: ubuntu-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       res=0
       sudo AGENT_OS="$AGENT_OS" BUILD_BUILDNUMBER="$BUILD_BUILDNUMBER" BUILD_REPOSITORY_URI="$BUILD_REPOSITORY_URI" BUILD_SOURCEBRANCH="$BUILD_SOURCEBRANCH" BUILD_SOURCEVERSION="$BUILD_SOURCEVERSION" SYSTEM_PHASENAME="$SYSTEM_PHASENAME" SYSTEM_TASKDEFINITIONSURI="$SYSTEM_TASKDEFINITIONSURI" SYSTEM_TEAMPROJECT="$SYSTEM_TEAMPROJECT" CC=$CC MAKEFLAGS="$MAKEFLAGS" bash -lxc ci/run-linux32-docker.sh || res=1

       sudo chmod a+r t/out/TEST-*.xml
       test ! -d t/failed-test-artifacts || sudo chmod a+r t/failed-test-artifacts

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || res=1
       exit $res
    displayName: 'ci/run-linux32-docker.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)
  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TEST-*.xml'
    inputs:
      mergeTestResults: true
      testRunTitle: 'linux32'
      platform: Linux
      publishRunAttachments: false
    condition: succeededOrFailed()
  - task: PublishBuildArtifacts@1
    displayName: 'Publish trash directories of failed tests'
    condition: failed()
    inputs:
      PathtoPublish: t/failed-test-artifacts
      ArtifactName: failed-test-artifacts

- job: static_analysis
  displayName: StaticAnalysis
  condition: succeeded()
  pool:
    vmImage: ubuntu-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       sudo apt-get update &&
       sudo apt-get install -y coccinelle libcurl4-openssl-dev libssl-dev libexpat-dev gettext &&

       export jobname=StaticAnalysis &&

       ci/run-static-analysis.sh || exit 1

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
    displayName: 'ci/run-static-analysis.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)

- job: documentation
  displayName: Documentation
  condition: succeeded()
  pool:
    vmImage: ubuntu-latest
  steps:
  - bash: |
       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || ci/mount-fileshare.sh //gitfileshare.file.core.windows.net/test-cache gitfileshare "$GITFILESHAREPWD" "$HOME/test-cache" || exit 1

       sudo apt-get update &&
       sudo apt-get install -y asciidoc xmlto asciidoctor docbook-xsl-ns &&

       export ALREADY_HAVE_ASCIIDOCTOR=yes. &&
       export jobname=Documentation &&

       ci/test-documentation.sh || exit 1

       test "$GITFILESHAREPWD" = '$(gitfileshare.pwd)' || sudo umount "$HOME/test-cache" || exit 1
    displayName: 'ci/test-documentation.sh'
    env:
      GITFILESHAREPWD: $(gitfileshare.pwd)