parameters:  
  name: 'generator'
  workingDirectory: '$(System.DefaultWorkingDirectory)'
  maxParallel: 2
  testCommand: 'run test'

jobs:
- job: Build${{ parameters.name}}
  strategy:
    maxParallel: ${{ parameters.maxParallel }}
    matrix:    
      linux_node_12_terraform_0_12_20:
        TF_CLI_CONFIG_FILE: '$(System.DefaultWorkingDirectory)/.terraformrc'
        vmImage: 'ubuntu-latest'
        nodeVersionSpec: '12.x'
        terraformVersion: '0.12.20'
        scriptType: bash
      mac_node_12_terraform_0_12_20:
        TF_CLI_CONFIG_FILE: '$(System.DefaultWorkingDirectory)/.terraformrc'
        vmImage: 'macos-latest'
        nodeVersionSpec: '12.x'
        terraformVersion: '0.12.20'
        scriptType: bash
      windows_node_12_terraform_0_12_20:
        TF_CLI_CONFIG_FILE: '$(System.DefaultWorkingDirectory)/terraform.rc'
        vmImage: 'windows-latest'
        nodeVersionSpec: '12.x'
        terraformVersion: '0.12.20'
        scriptType: ps      
  displayName: 'Build - ${{ parameters.name}}'
  pool:
    vmImage: $(vmImage)

  steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '$(nodeVersionSpec)'
    displayName: 'Node.js - Install'

  - task: Npm@1
    displayName: 'NPM - Install'
    inputs:
      command: 'install'

  - task: TerraformInstaller@0
    displayName: 'Terraform - Install'
    inputs:
      terraformVersion: '$(terraformVersion)' 

  - script: |
      npm run ${{ parameters.testCommand }}
    displayName: 'NPM - Test'
    env:
      ARM_CLIENT_SECRET: $(ARM_CLIENT_SECRET)

  - task: PublishTestResults@2
    displayName: 'NPM - Test - Publish results'
    inputs:   
      testResultsFormat: 'xUnit'
      testResultsFiles: '**/test-*.xml'
      searchFolder: '$(System.DefaultWorkingDirectory)/outputs'
      testRunTitle: '$(vmImage) - Node $(nodeVersionSpec) - Terraform $(terraformVersion)'      
      mergeTestResults: true
      failTaskOnFailedTests: false
      buildPlatform: $(vmImage)
      buildConfiguration: 'Node $(nodeVersionSpec) - Terraform $(terraformVersion)'

  - script: |
      npm publish --dry-run
    displayName: 'NPM - Publish (dry run)'