# Set up triggers in GUI
name: $(Build.Reason)_$(Build.SourceBranch)_$(Rev:r)

jobs:
  - job: Linux
    timeoutInMinutes: 15
    pool:
      vmImage: ubuntu-16.04
    steps:
      - task: NodeTool@0
        displayName: "Use Node 10"
        inputs:
          versionSpec: 10.x
      - script: cat /etc/os-release
        displayName: "Get os release info"
      - script: yarn
        displayName: "Yarn install"
        env: {
            PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true
        }
      - script: yarn lint
        displayName: "Lint"
      - script: sudo apt-get update && sudo apt-get install libgconf-2-4 -y
        displayName: Install dependency
      - script: "xvfb-run --auto-servernum --server-args='-screen 0, 1600x900x24' yarn cover"
        displayName: "Run tests with coverage report"
      - task: PublishTestResults@2
        displayName: "Publish test results"
        inputs:
          testResultsFormat: "JUnit"
          testResultsFiles: "./coverage/junit.xml" 
        condition: always()
      - script: npx codecov -F Linux
        displayName: "Upload coverage report"
        env: { CODECOV_TOKEN: $(CODECOV_TOKEN) }
      - script: yarn dist --x64
        displayName: "Build & publish"
        condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
        env: { GH_TOKEN: $(GH_TOKEN) }
      - script: yarn build --x64
        displayName: "Build"
        condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
      - task: PublishBuildArtifacts@1
        displayName: "Upload artifacts"
        inputs:
          PathtoPublish: "$(Build.SourcesDirectory)/release-builds"
          ArtifactName: Release
      - task: PublishBuildArtifacts@1
        displayName: "Upload image snapshots"
        condition: always()
        inputs:
          PathtoPublish: "$(Build.SourcesDirectory)/tests/e2e/__image_snapshots__"
          ArtifactName: Snaphots

  - job: macOS
    timeoutInMinutes: 15
    pool:
      vmImage: "xcode9-macos10.13"
    steps:
      - task: NodeTool@0
        displayName: "Use Node 10"
        inputs:
          versionSpec: 10.x
      - script: yarn
        displayName: "Yarn install"
        env: {
            PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true
        }
      - script: yarn lint
        displayName: "Lint"
      - script: yarn cover
        displayName: "Run tests with coverage report"
      - task: PublishTestResults@2
        displayName: "Publish test results"
        inputs:
          testResultsFormat: "JUnit"
          testResultsFiles: "./coverage/junit.xml" 
        condition: always()
      - script: npx codecov -F macOS
        displayName: "Upload coverage report"
        env: { CODECOV_TOKEN: $(CODECOV_TOKEN) }
      - script: sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain Wrapbox.cer
        displayName: "Add certificate as trusted"
      - script: yarn dist --x64
        displayName: "Build & publish"
        condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
        env:
          {
            GH_TOKEN: $(GH_TOKEN),
            CSC_LINK: $(CSC_LINK),
            CSC_KEY_PASSWORD: $(CSC_KEY_PASSWORD),
          }
      - script: yarn build --x64
        displayName: "Build"
        condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
      - task: PublishBuildArtifacts@1
        displayName: "Upload artifacts"
        inputs:
          PathtoPublish: "$(Build.SourcesDirectory)/release-builds"
          ArtifactName: Release
      - task: PublishBuildArtifacts@1
        displayName: "Upload image snapshots"
        condition: always()
        inputs:
          PathtoPublish: "$(Build.SourcesDirectory)/tests/e2e/__image_snapshots__"
          ArtifactName: Snaphots

  - job: Windows
    timeoutInMinutes: 15
    pool:
      vmImage: "vs2017-win2016"
    steps:
      - task: NodeTool@0
        displayName: "Use Node 10"
        inputs:
          versionSpec: 10.x
      - script: yarn
        displayName: "Yarn install"
        env: {
            PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true
        }
      - script: yarn lint
        displayName: "Lint"
      - script: yarn cover
        displayName: "Run tests with coverage report"
      - task: PublishTestResults@2
        displayName: "Publish test results"
        inputs:
          testResultsFormat: "JUnit"
          testResultsFiles: "./coverage/junit.xml" 
        condition: always()
      - script: npx codecov -F Windows
        displayName: "Upload coverage report"
        env: { CODECOV_TOKEN: $(CODECOV_TOKEN) }
      - script: yarn dist --x64
        displayName: "Build & publish"
        condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
        env:
          {
            GH_TOKEN: $(GH_TOKEN),
            CSC_LINK: $(CSC_LINK),
            CSC_KEY_PASSWORD: $(CSC_KEY_PASSWORD),
          }
      - script: yarn build --x64
        displayName: "Build"
        condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
      - task: PublishBuildArtifacts@1
        displayName: "Upload artifacts"
        inputs:
          PathtoPublish: "$(Build.SourcesDirectory)/release-builds"
          ArtifactName: Release
      - task: PublishBuildArtifacts@1
        displayName: "Upload image snapshots"
        condition: always()
        inputs:
          PathtoPublish: "$(Build.SourcesDirectory)/tests/e2e/__image_snapshots__"
          ArtifactName: Snaphots