steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: src/electron'
  inputs:
    TargetFolder: src/electron

- bash: |
    cd src/electron
    node script/yarn.js install --frozen-lockfile
  displayName: 'Yarn install'

- bash: |
    export ZIP_DEST=$PWD/src/out/Default
    echo "##vso[task.setvariable variable=ZIP_DEST]$ZIP_DEST"
    mkdir -p $ZIP_DEST
    cd src/electron
    node script/download-circleci-artifacts.js --buildNum=$CIRCLE_BUILD_NUM --name=dist.zip --dest=$ZIP_DEST
    cd $ZIP_DEST
    unzip -o dist.zip
    xattr -cr Electron.app    
  displayName: 'Download and unzip dist files for test'
  env:
    CIRCLE_TOKEN: $(CIRCLECI_TOKEN)

- bash: |
    export FFMPEG_ZIP_DEST=$PWD/src/out/ffmpeg
    mkdir -p $FFMPEG_ZIP_DEST
    cd src/electron
    node script/download-circleci-artifacts.js --buildNum=$CIRCLE_BUILD_NUM --name=ffmpeg.zip --dest=$FFMPEG_ZIP_DEST
    cd $FFMPEG_ZIP_DEST
    unzip -o ffmpeg.zip
  displayName: 'Download and unzip ffmpeg for test'
  env:
    CIRCLE_TOKEN: $(CIRCLECI_TOKEN)

- bash: |
   export NODE_HEADERS_DEST=$PWD/src/out/Default/gen
   mkdir -p $NODE_HEADERS_DEST
   cd src/electron
   node script/download-circleci-artifacts.js --buildNum=$CIRCLE_BUILD_NUM --name=node_headers.tar.gz --dest=$NODE_HEADERS_DEST
   cd $NODE_HEADERS_DEST
   tar xzf node_headers.tar.gz
  displayName: 'Download and untar node header files for test'
  env:
    CIRCLE_TOKEN: $(CIRCLECI_TOKEN)

- bash: |
   export CROSS_ARCH_SNAPSHOTS=$PWD/src/out/Default/cross-arch-snapshots
   mkdir -p $CROSS_ARCH_SNAPSHOTS
   cd src/electron
   node script/download-circleci-artifacts.js --buildNum=$CIRCLE_BUILD_NUM --name=cross-arch-snapshots/snapshot_blob.bin --dest=$CROSS_ARCH_SNAPSHOTS
   node script/download-circleci-artifacts.js --buildNum=$CIRCLE_BUILD_NUM --name=cross-arch-snapshots/v8_context_snapshot.arm64.bin --dest=$CROSS_ARCH_SNAPSHOTS
  displayName: 'Download cross arch snapshot files'
  env:
    CIRCLE_TOKEN: $(CIRCLECI_TOKEN)

- bash: |
    cd src
    export ELECTRON_OUT_DIR=Default
    export npm_config_arch=arm64
    (cd electron && node script/yarn test --enable-logging --runners main)
  displayName: 'Run Electron main tests'
  timeoutInMinutes: 20
  env:
    ELECTRON_DISABLE_SECURITY_WARNINGS: 1
    IGNORE_YARN_INSTALL_ERROR: 1
    ELECTRON_TEST_RESULTS_DIR: junit

- bash: |
    cd src
    export ELECTRON_OUT_DIR=Default
    export npm_config_arch=arm64
    (cd electron && node script/yarn test --enable-logging --runners remote)
  displayName: 'Run Electron remote tests'
  timeoutInMinutes: 20
  condition: succeededOrFailed()
  env:
    ELECTRON_DISABLE_SECURITY_WARNINGS: 1
    IGNORE_YARN_INSTALL_ERROR: 1
    ELECTRON_TEST_RESULTS_DIR: junit

- bash: |
    cd src
    python electron/script/verify-ffmpeg.py --source-root "$PWD" --build-dir out/Default --ffmpeg-path out/ffmpeg
  displayName: Verify non proprietary ffmpeg
  timeoutInMinutes: 5
  condition: succeededOrFailed()
  env:
    TARGET_ARCH: arm64

- bash: |
    cd src
    echo Verify cross arch snapshot
    python electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default --snapshot-files-dir $PWD/out/Default/cross-arch-snapshots
  displayName: Verify cross arch snapshot
  timeoutInMinutes: 5
  condition: succeededOrFailed()

- task: PublishTestResults@2
  displayName: 'Publish Test Results'
  inputs:
    testResultsFiles: '*.xml'

    searchFolder: '$(System.DefaultWorkingDirectory)/src/junit/'

  condition: succeededOrFailed()

- bash: killall Electron || echo "No Electron processes left running"
  displayName: 'Kill processes left running from last test run'
  condition: always()

- bash: |
    rm -rf ~/Library/Application\ Support/Electron*
    rm -rf ~/Library/Application\ Support/electron*
  displayName: 'Delete user app data directories'
  condition: always()

- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
  displayName: 'Clean Agent Directories'

  condition: always()
