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()
