trigger: none

pr:
- master
- release

parameters:
  - name: modulesToCache
    displayName: Module Target Directories to Cache
    type: object
    default:
      modules:
        - org.hl7.fhir.utilities
        - org.hl7.fhir.dstu2
        - org.hl7.fhir.dstu2016may
        - org.hl7.fhir.dstu3
        - org.hl7.fhir.r4
        - org.hl7.fhir.r4b
        - org.hl7.fhir.r5
        - org.hl7.fhir.convertors
        - org.hl7.fhir.validation
        - org.hl7.fhir.validation.cli
        - org.hl7.fhir.report
  - name: modulesToTest
    displayName: Modules to Test
    type: object
    default:
      modules:
        - utilities
        - dstu2
        - dstu2016may
        - dstu3
        - r4
        - r4b
        - r5
        - convertors
        - validation
      multiplatformModules:
        - utilities
  - name: testConfigurations
    displayName: VM Images and JDKs to Test Against
    type: object
    default:
      configurations:
        - name: ubuntu_java_11
          image: ubuntu-latest
          jdk: 1.11
          javaToolOptions:
        - name: ubuntu_java_17
          image: ubuntu-latest
          jdk: 1.17
          javaToolOptions:
        - name: ubuntu_java_11_cp1252
          image: ubuntu-latest
          jdk: 1.11
          javaToolOptions: -Dfile.encoding=Cp1252
        - name: windows_java_11
          image: windows-latest
          jdk: 1.11
          javaToolOptions:
        - name: windows_java_17
          image: windows-latest
          jdk: 1.17
          javaToolOptions:
        - name: macos_java_11
          image: macos-latest
          jdk: 1.11
          javaToolOptions:
        - name: macos_java_17
          image: macos-latest
          jdk: 1.17
          javaToolOptions:
  - name: jdksToTest
    displayName: JDKs to Test Against
    type: object
    default:
      jdks:
        - 1.11
        - 1.17

variables:
  - group: CODECOV_GROUP
  - name: MAVEN_CACHE_FOLDER
    value: $(Pipeline.Workspace)/.m2/repository

jobs:
  - template: setup-and-cache-job-template.yml
    parameters:
      modulesToCache:
        ${{ parameters.modulesToCache.modules }}
  - template: test-unit-jobs-template.yml
    parameters:
      testUnits:
        - ${{ each configuration in parameters.testConfigurations.configurations }}:
            - name: ${{ configuration.name }}
              vmImage: ${{ configuration.image }}
              javaToolOptions:  ${{ configuration.javaToolOptions }}
              jdkVersion: ${{ configuration.jdk }}
              ${{ if eq(configuration.name, 'ubuntu_java_11') }}:
                skipJaCoCo: false
                modules:
                  ${{ parameters.modulesToTest.modules }}
              ${{ else }}:
                skipJaCoCo: true
                modules:
                  ${{ parameters.modulesToTest.multiplatformModules }}


  - template: test-cli-exec-job-template.yml
    parameters:
      testUnits:
        - ${{ each configuration in parameters.testConfigurations.configurations }}:
            - name: ${{ configuration.name }}
              vmImage: ${{ configuration.image }}
              jdkVersion: ${{ configuration.jdk }}

  - job: publish_codecov
    dependsOn:
      - ${{ each module in parameters.modulesToTest.modules }}:
          - ubuntu_java_11_${{ module }}
    displayName: Publish Test Results and Coverage

    pool:
      vmImage: ubuntu-latest

    steps:
      - checkout: self
        fetchDepth: 1
      - ${{ each module in parameters.modulesToTest.modules }}:
          - task: Bash@3
            inputs:
              targetType: 'inline'
              script: mkdir -p $(System.DefaultWorkingDirectory)/org.hl7.fhir.${{ module }}/target/
          - task: DownloadBuildArtifacts@0
            displayName: 'Download jacoco test coverage results for org.hl7.fhir.${{ module }}'
            continueOnError: true
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: 'org.hl7.fhir.${{ module }}_target'
              downloadPath: '$(System.DefaultWorkingDirectory)/'
          # Copy contents from downloaded artifact directory to final target directory.
          - task: CopyFiles@2
            condition: always()
            inputs:
              sourceFolder: '$(System.DefaultWorkingDirectory)/org.hl7.fhir.${{ module }}_target/'
              contents: '**'
              targetFolder: '$(System.DefaultWorkingDirectory)/org.hl7.fhir.${{ module }}/target/'
      - task: Maven@3
        inputs:
          mavenPomFile: 'pom.xml'
          options: '-P JACOCO'
          mavenOptions: '-Xmx3072m'
          javaHomeOption: 'JDKVersion'
          jdkVersionOption: '1.11'
          jdkArchitectureOption: 'x64'
          goals: 'jacoco:report-aggregate'

      - task: PublishCodeCoverageResults@1
        displayName: 'Publish JaCoCo test results'
        inputs:
          codeCoverageTool: 'JaCoCo'
          summaryFileLocation: '$(System.DefaultWorkingDirectory)/org.hl7.fhir.report/target/site/jacoco-aggregate/jacoco.xml'
          reportDirectory: '$(System.DefaultWorkingDirectory)/org.hl7.fhir.report/target/site/jacoco-aggregate/'

      - bash: |
          curl -Os https://uploader.codecov.io/latest/linux/codecov
          chmod +x codecov
          ./codecov -t $(CODECOV_TOKEN) -R $(System.DefaultWorkingDirectory)/org.hl7.fhir.report/target/site/jacoco-aggregate/
        displayName: 'codecov'