# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
  branches:
    include:
    - '*'
    # - master
    # - releases/*
  paths:
    exclude:
    - README.md
    - CHANGELOG.md

jobs:
  - job: Windows
    pool:
      vmImage: 'windows-latest'

    steps:

    # BEGIN - ACE support for Invoke-ExcelQuery testing
    - task: Cache@2
      inputs:
        key: v2 | "$(Agent.OS)" | ace
        path: ace
        cacheHitVar: CACHE_RESTORED
      displayName: Cache ACE

    - bash: |
        mkdir ./ace
        curl -o ./ace/ace.exe https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine_X64.exe
      displayName: 'Download ACE'
      condition: ne(variables.CACHE_RESTORED, 'true')

    - powershell: Start-Process ./ace/ace.exe -Wait -ArgumentList "/quiet /passive /norestart"
      displayName: 'Install ACE for Invoke-ExcelQuery testing'
    # END - ACE support for Invoke-ExcelQuery testing

    - powershell: 'Install-Module -Name Pester -Force -SkipPublisherCheck'
      displayName: 'Update Pester'
    - powershell: './CI/CI.ps1 -Test'
      displayName: 'Install and Test'

    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'NUnit'
        testResultsFiles: '**/TestResults*.xml'
        failTaskOnFailedTests: true

    - powershell: './CI/CI.ps1 -Artifact'
      displayName: 'Prepare Artifact'
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Build.ArtifactStagingDirectory)'
        artifact: 'Modules'
    - powershell: './CI/CI.ps1 -Analyzer'
      displayName: 'Invoke ScriptAnalyzer'
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Build.SourcesDirectory)'
        artifact: 'Source'

  - job: WindowsPSCore
    pool:
      vmImage: 'windows-latest'

    steps:

    # BEGIN - ACE support for Invoke-ExcelQuery testing
    - task: Cache@2
      inputs:
        key: v2 | "$(Agent.OS)" | ace
        path: ace
        cacheHitVar: CACHE_RESTORED
      displayName: Cache ACE

    - bash: |
        mkdir ./ace
        curl -o ./ace/ace.exe https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/accessdatabaseengine_X64.exe
      displayName: 'Download ACE'
      condition: ne(variables.CACHE_RESTORED, 'true')

    - powershell: Start-Process ./ace/ace.exe -Wait -ArgumentList "/quiet /passive /norestart"
      displayName: 'Install ACE for Invoke-ExcelQuery testing'
    # END - ACE support for Invoke-ExcelQuery testing

    - pwsh: 'Install-Module -Name Pester -Force'
      displayName: 'Update Pester'
    - pwsh: './CI/CI.ps1 -Test'
      displayName: 'Install and Test'

    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'NUnit'
        testResultsFiles: '**/TestResults*.xml'
        failTaskOnFailedTests: true

  - job: Ubuntu
    pool:
      vmImage: 'ubuntu-latest'

    steps:
    - powershell: 'Install-Module -Name Pester -Force'
      displayName: 'Update Pester'
    - powershell: './CI/CI.ps1 -Test'
      displayName: 'Install and Test'

    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'NUnit'
        testResultsFiles: '**/TestResults*.xml'
        failTaskOnFailedTests: true

  - job: macOS
    pool:
      vmImage: 'macOS-latest'

    steps:
    - script: brew install mono-libgdiplus
      displayName: 'Install mono-libgdiplus'
    - powershell: 'Install-Module -Name Pester -Force'
      displayName: 'Update Pester'
    - powershell: './CI/CI.ps1 -Test'
      displayName: 'Install and Test'

    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'NUnit'
        testResultsFiles: '**/TestResults*.xml'
        failTaskOnFailedTests: true

  - job: macOSNoDeps
    pool:
      vmImage: 'macOS-latest'

    steps:
    - powershell: 'Install-Module -Name Pester -Force'
      displayName: 'Update Pester'
    - powershell: './CI/CI.ps1 -TestImportOnly'
      displayName: 'Install and Test Import Only'

    - task: PublishTestResults@2
      inputs:
        testResultsFormat: 'NUnit'
        testResultsFiles: '**/TestResults*.xml'
        failTaskOnFailedTests: true
