resources:
- repo: self

trigger:
- master
- maint/*

jobs:
- job: linux_amd64_xenial_gcc_openssl
  displayName: 'Linux (amd64; Xenial; GCC; OpenSSL)'
  pool:
    vmImage: 'ubuntu-18.04'
  steps:
  - template: azure-pipelines/docker.yml
    parameters:
      docker:
        image: xenial
        base: ubuntu:xenial
      environmentVariables: |
       CC=gcc
       CMAKE_GENERATOR=Ninja
       CMAKE_OPTIONS=-DUSE_HTTPS=OpenSSL -DREGEX_BACKEND=builtin -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
       GITTEST_NEGOTIATE_PASSWORD=${{ variables.GITTEST_NEGOTIATE_PASSWORD }}

- job: linux_amd64_xenial_gcc_mbedtls
  displayName: 'Linux (amd64; Xenial; GCC; mbedTLS)'
  pool:
    vmImage: 'ubuntu-18.04'
  steps:
  - template: azure-pipelines/docker.yml
    parameters:
      docker:
        image: xenial
        base: ubuntu:xenial
      environmentVariables: |
       CC=gcc
       CMAKE_GENERATOR=Ninja
       CMAKE_OPTIONS=-DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
       GITTEST_NEGOTIATE_PASSWORD=${{ variables.GITTEST_NEGOTIATE_PASSWORD }}

- job: linux_amd64_xenial_clang_openssl
  displayName: 'Linux (amd64; Xenial; Clang; OpenSSL)'
  pool:
    vmImage: 'ubuntu-18.04'
  steps:
  - template: azure-pipelines/docker.yml
    parameters:
      docker:
        image: xenial
        base: ubuntu:xenial
      environmentVariables: |
       CC=clang
       CMAKE_GENERATOR=Ninja
       CMAKE_OPTIONS=-DUSE_HTTPS=OpenSSL -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
       GITTEST_NEGOTIATE_PASSWORD=${{ variables.GITTEST_NEGOTIATE_PASSWORD }}

- job: linux_amd64_xenial_clang_mbedtls
  displayName: 'Linux (amd64; Xenial; Clang; mbedTLS)'
  pool:
    vmImage: 'ubuntu-18.04'
  steps:
  - template: azure-pipelines/docker.yml
    parameters:
      docker:
        image: xenial
        base: ubuntu:xenial
      environmentVariables: |
       CC=clang
       CMAKE_GENERATOR=Ninja
       CMAKE_OPTIONS=-DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DREGEX_BACKEND=pcre -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
       GITTEST_NEGOTIATE_PASSWORD=${{ variables.GITTEST_NEGOTIATE_PASSWORD }}

- job: macos
  displayName: 'macOS (amd64; 10.15)'
  pool:
    vmImage: 'macOS-10.15'
  steps:
  - bash: . '$(Build.SourcesDirectory)/azure-pipelines/setup-osx.sh'
    displayName: Setup
  - template: azure-pipelines/bash.yml
    parameters:
      environmentVariables:
        TMPDIR: $(Agent.TempDirectory)
        PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig
        CMAKE_GENERATOR: Ninja
        CMAKE_OPTIONS: -DREGEX_BACKEND=regcomp_l -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=leaks -DUSE_GSSAPI=ON
        SKIP_SSH_TESTS: true
        GITTEST_NEGOTIATE_PASSWORD: ${{ variables.GITTEST_NEGOTIATE_PASSWORD }}

- job: windows_vs_amd64
  displayName: 'Windows (amd64; Visual Studio)'
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - template: azure-pipelines/bash.yml
    parameters:
      environmentVariables:
        CMAKE_GENERATOR: Visual Studio 15 2017
        CMAKE_OPTIONS: -A x64 -DMSVC_CRTDBG=ON -DDEPRECATE_HARD=ON
        SKIP_SSH_TESTS: true
        SKIP_NEGOTIATE_TESTS: true

- job: windows_vs_x86
  displayName: 'Windows (x86; Visual Studio)'
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - template: azure-pipelines/bash.yml
    parameters:
      environmentVariables:
        CMAKE_GENERATOR: Visual Studio 15 2017
        CMAKE_OPTIONS: -A Win32 -DMSVC_CRTDBG=ON -DDEPRECATE_HARD=ON -DUSE_SHA1=HTTPS
        SKIP_SSH_TESTS: true
        SKIP_NEGOTIATE_TESTS: true

- job: windows_mingw_amd64
  displayName: 'Windows (amd64; MinGW)'
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - bash: . '$(Build.SourcesDirectory)\azure-pipelines\setup-mingw.sh'
    displayName: Setup
    env:
      TEMP: $(Agent.TempDirectory)
      ARCH: amd64
  - template: azure-pipelines/bash.yml
    parameters:
      environmentVariables:
        BUILD_PATH: $(Agent.TempDirectory)\mingw64\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\CMake\bin
        CMAKE_GENERATOR: MinGW Makefiles
        CMAKE_OPTIONS: -DDEPRECATE_HARD=ON
        SKIP_SSH_TESTS: true
        SKIP_NEGOTIATE_TESTS: true

- job: windows_mingw_x86
  displayName: 'Windows (x86; MinGW)'
  pool:
    vmImage: 'vs2017-win2016'
  steps:
  - bash: . '$(Build.SourcesDirectory)\azure-pipelines\setup-mingw.sh'
    displayName: Setup
    workingDirectory: '$(Build.BinariesDirectory)'
    env:
      TEMP: $(Agent.TempDirectory)
      ARCH: x86
  - template: azure-pipelines/bash.yml
    parameters:
      environmentVariables:
        BUILD_PATH: $(Agent.TempDirectory)\mingw32\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\CMake\bin
        CMAKE_GENERATOR: MinGW Makefiles
        CMAKE_OPTIONS: -DDEPRECATE_HARD=ON
        SKIP_SSH_TESTS: true
        SKIP_NEGOTIATE_TESTS: true

- job: documentation
  displayName: 'Generate Documentation'
  pool:
    vmImage: 'ubuntu-18.04'
  steps:
  - script: |
      cd $(Build.SourcesDirectory)/azure-pipelines/docker
      docker build -t libgit2/docurium --build-arg BASE=ubuntu:trusty -f docurium .
    displayName: 'Build Docker image'
  - script: |
      git config user.name 'Documentation Generation'
      git config user.email 'libgit2@users.noreply.github.com'
      git branch gh-pages origin/gh-pages
      docker run --rm -v $(Build.SourcesDirectory):/home/libgit2/source -w /home/libgit2/source libgit2/docurium:latest cm doc api.docurium
      git checkout gh-pages
      cp -R * '$(Build.BinariesDirectory)'
    displayName: 'Generate Documentation'
  - task: archivefiles@2
    displayName: 'Archive Documentation'
    inputs:
      rootFolderOrFile: '$(Build.BinariesDirectory)'
      includeRootFolder: false
      archiveFile: '$(Build.ArtifactStagingDirectory)/api-documentation.zip'
  - task: publishbuildartifacts@1
    displayName: 'Upload Documentation Artifact'
    inputs:
      pathToPublish: '$(Build.ArtifactStagingDirectory)'
      artifactName: 'docs'
  - script: |
      git remote -v
      echo 'machine github.com' > ~/.netrc
      echo 'login $(GITHUB_USERNAME)' >> ~/.netrc
      echo 'password $(GITHUB_PAT)' >> ~/.netrc
      git push origin gh-pages
    displayName: 'Publish Documentation'
    condition: and(eq(variables['Build.Repository.Name'], 'libgit2/libgit2'), eq(variables['Build.Reason'], 'IndividualCI'))
