variables:
  GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle

jobs:
- job: game_build
  timeoutInMinutes: 15

  pool:
    vmImage: 'ubuntu-latest'

  steps:
    - task: CacheBeta@0
      inputs:
        key: $(Agent.OS)
        path: $(GRADLE_USER_HOME)
      displayName: "Gradle: setup build cache"

    - task: SonarCloudPrepare@1
      inputs:
        SonarCloud: 'apollo-rsps-sonarcloud'
        organization: 'apollo-rsps'
        scannerMode: 'Other'
      displayName: "SonarCloud: prepare analysis"

    - task: Gradle@2
      displayName: "Gradle: build"
      inputs:
        workingDirectory: ''
        gradleWrapperFile: 'gradlew'
        gradleOptions: '-Xmx3072m -Dorg.gradle.parallel=true -Dorg.gradle.caching=true -Dsonar.host.url=https://sonarcloud.io'
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '1.11'
        jdkArchitectureOption: 'x64'
        publishJUnitResults: true
        testResultsFiles: '**/TEST-*.xml'
        tasks: 'check jacocoTestReport sonarqube'

    - script: |
        ./gradlew --stop
      displayName: "Gradle: stop daemon"

    - task: SonarCloudPublish@1
      inputs:
        pollingTimeoutSec: '300'
      displayName: "SonarCloud: publish quality gate"

    - script: |
        bash <(curl -s https://codecov.io/bash) -t "${CODECOV_TOKEN}"
      env:
        CODECOV_TOKEN: $(CODECOV_TOKEN)
      displayName: "Codecov: publish coverage"

- job: docs_build
  pool:
    vmImage: 'windows-2019'
  steps:
    - task: Gradle@2
      displayName: "Gradle: generate API docs"
      inputs:
        workingDirectory: ''
        gradleWrapperFile: 'gradlew'
        gradleOptions: '-Xmx3072m -Dorg.gradle.parallel=true -Dorg.gradle.caching=true -Dsonar.host.url=https://sonarcloud.io'
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '1.11'
        jdkArchitectureOption: 'x64'
        tasks: 'generateApiDocs'
    - task: CmdLine@1
      displayName: 'Chocolatey: install DocFX'
      inputs:
        filename: choco
        arguments: 'install docfx -y'
    - task: CmdLine@1
      displayName: 'DocFX: generate documentation'
      inputs:
        filename: docfx
        arguments: docs/docfx.json
    - task: ArchiveFiles@2
      inputs:
        rootFolderOrFile: docs/_site
        includeRootFolder: false
        archiveFile: '$(Build.ArtifactStagingDirectory)/docs.zip'
        replaceExistingArchive: true
    - task: PublishBuildArtifacts@1
      inputs:
        pathToPublish: '$(Build.ArtifactStagingDirectory)/docs.zip'
        artifactName: 'docs.zip'