steps:
  - script: |
      set -e
      sudo apt-get update
      sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0
      sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
      sudo chmod +x /etc/init.d/xvfb
      sudo update-rc.d xvfb defaults
      sudo service xvfb start

  - task: NodeTool@0
    inputs:
      versionSpec: "12.14.1"

  - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
    inputs:
      versionSpec: "1.x"

  - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1
    inputs:
      keyfile: ".yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock"
      targetfolder: "**/node_modules, !**/node_modules/**/node_modules"
      vstsFeed: "vscode-build-cache"

  - script: |
      CHILD_CONCURRENCY=1 yarn --frozen-lockfile
    displayName: Install Dependencies
    condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))

  - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1
    inputs:
      keyfile: ".yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock"
      targetfolder: "**/node_modules, !**/node_modules/**/node_modules"
      vstsFeed: "vscode-build-cache"
    condition: and(succeeded(), ne(variables['CacheRestored'], 'true'))

  - script: |
      set -e
      yarn postinstall
    displayName: Run postinstall scripts
    condition: and(succeeded(), eq(variables['CacheRestored'], 'true'))

  - script: |
      yarn electron x64
    displayName: Download Electron

  - script: |
      yarn gulp hygiene
    displayName: Run Hygiene Checks

  - script: |
      yarn monaco-compile-check
    displayName: Run Monaco Editor Checks

  - script: |
      yarn valid-layers-check
    displayName: Run Valid Layers Checks

  - script: |
      yarn compile
    displayName: Compile Sources

  - script: |
      yarn download-builtin-extensions
    displayName: Download Built-in Extensions

  - script: |
      DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests"
    displayName: Run Unit Tests (Electron)

  - script: |
      DISPLAY=:10 yarn test-browser --browser chromium --tfs "Browser Unit Tests"
    displayName: Run Unit Tests (Browser)

  - script: |
      DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests"
    displayName: Run Integration Tests (Electron)

  - task: PublishPipelineArtifact@0
    inputs:
      artifactName: crash-dump-linux
      targetPath: .build/crashes
    displayName: "Publish Crash Reports"
    continueOnError: true
    condition: failed()

  - task: PublishTestResults@2
    displayName: Publish Tests Results
    inputs:
      testResultsFiles: "*-results.xml"
      searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
    condition: succeededOrFailed()