variables:
  YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn
pr:
  branches:
    include:
    - master
    - releases/*
  paths:
    exclude:
    - .github/*
    - docs/*
    - mkdocs/*
trigger:
  branches:
    include:
    - '*'
  tags:
    include:
    - "*"
  paths:
    exclude:
    - .github/*
    - docs/*
    - mkdocs/*
jobs:
  - job: Windows
    pool:
      vmImage: windows-2019
    strategy:
      matrix:
        node_12.x:
          node_version: 12.x
    steps:
      - powershell: |
          $CI_BUILD_TAG = git describe --tags
          Write-Output ("##vso[task.setvariable variable=CI_BUILD_TAG;]$CI_BUILD_TAG")
        displayName: 'Set the tag name as an environment variable'
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
      - task: NodeTool@0
        inputs:
          versionSpec: $(node_version)
        displayName: Install Node.js
      - task: Cache@2
        inputs:
          key: 'yarn | "$(Agent.OS)"" | yarn.lock'
          restoreKeys: |
            yarn | "$(Agent.OS)"
          path: $(YARN_CACHE_FOLDER)
        displayName: Cache Yarn packages
      - script: make node_modules
        displayName: Install dependencies
      - script: make build-npm
        displayName: Generate npm package
      - script: make -j2 build-extensions
        displayName: Build bundled extensions
      - script: make test
        displayName: Run tests
      - script: make test-extensions
        displayName: Run In-tree Extension tests
      - script: make integration-win
        displayName: Run integration tests
      - script: make build
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
        displayName: Build
        env:
          WIN_CSC_LINK: $(WIN_CSC_LINK)
          WIN_CSC_KEY_PASSWORD: $(WIN_CSC_KEY_PASSWORD)
          GH_TOKEN: $(GH_TOKEN)
  - job: macOS
    pool:
      vmImage: macOS-10.14
    strategy:
      matrix:
        node_12.x:
          node_version: 12.x
    steps:
      - script: CI_BUILD_TAG=`git describe --tags` && echo "##vso[task.setvariable variable=CI_BUILD_TAG]$CI_BUILD_TAG"
        displayName: Set the tag name as an environment variable
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
      - task: NodeTool@0
        inputs:
          versionSpec: $(node_version)
        displayName: Install Node.js
      - task: Cache@2
        inputs:
          key: 'yarn | "$(Agent.OS)" | yarn.lock'
          restoreKeys: |
            yarn | "$(Agent.OS)"
          path: $(YARN_CACHE_FOLDER)
        displayName: Cache Yarn packages
      - script: make node_modules
        displayName: Install dependencies
      - script: make build-npm
        displayName: Generate npm package
      - script: make -j2 build-extensions
        displayName: Build bundled extensions
      - script: make test
        displayName: Run tests
      - script: make test-extensions
        displayName: Run In-tree Extension tests
      - script: make integration-mac
        displayName: Run integration tests
      - script: make test-extensions
        displayName: Run In-tree Extension tests
      - script: make build
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
        displayName: Build
        env:
          APPLEID: $(APPLEID)
          APPLEIDPASS: $(APPLEIDPASS)
          CSC_LINK: $(CSC_LINK)
          CSC_KEY_PASSWORD: $(CSC_KEY_PASSWORD)
          GH_TOKEN: $(GH_TOKEN)
  - job: Linux
    pool:
      vmImage: ubuntu-16.04
    strategy:
      matrix:
        node_12.x:
          node_version: 12.x
    steps:
      - script: CI_BUILD_TAG=`git describe --tags` && echo "##vso[task.setvariable variable=CI_BUILD_TAG]$CI_BUILD_TAG"
        displayName: Set the tag name as an environment variable
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
      - task: NodeTool@0
        inputs:
          versionSpec: $(node_version)
        displayName: Install Node.js
      - task: Cache@2
        inputs:
          key: 'yarn | "$(Agent.OS)" | yarn.lock'
          restoreKeys: |
            yarn | "$(Agent.OS)"
          path: $(YARN_CACHE_FOLDER)
        displayName: Cache Yarn packages
      - script: make node_modules
        displayName: Install dependencies
      - script: make build-npm
        displayName: Generate npm package
      - script: make -j2 build-extensions
        displayName: Build bundled extensions
      - script: make test
        displayName: Run tests
      - script: make test-extensions
        displayName: Run In-tree Extension tests
      - bash: |
          sudo apt-get update
          sudo apt-get install libgconf-2-4 conntrack -y
          curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
          sudo install minikube-linux-amd64 /usr/local/bin/minikube
          sudo minikube start --driver=none
          # Although the kube and minikube config files are in placed $HOME they are owned by root
          sudo chown -R $USER $HOME/.kube $HOME/.minikube
        displayName: Install integration test dependencies
      - script: xvfb-run --auto-servernum --server-args='-screen 0, 1600x900x24' make integration-linux
        displayName: Run integration tests
      - bash: |
          sudo chown root:root /
          sudo apt-get update && sudo apt-get install -y snapd
          sudo snap install snapcraft --classic
          echo -n "${SNAP_LOGIN}" | base64 -i -d > snap_login
          snapcraft login --with snap_login
        displayName: Setup snapcraft
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
        env:
          SNAP_LOGIN: $(SNAP_LOGIN)
      - script: make build
        displayName: Build
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
        env:
          GH_TOKEN: $(GH_TOKEN)
      - script: make publish-npm
        displayName: Publish npm package
        condition: "and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))"
        env:
          NPM_TOKEN: $(NPM_TOKEN)
