name: "tests service"

on:
  workflow_dispatch:

env:
  FORCE_COLOR: 1
  ELECTRON_SKIP_BINARY_DOWNLOAD: 1

jobs:
  test:
    name: "Service"
    strategy:
      fail-fast: false
      matrix:
        service-os: [linux, windows]
        browser: [chromium, firefox, webkit]
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
    - run: npm ci
      env:
        PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
    - run: npm run build
    - run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test -- --project=${{ matrix.browser }}-* --workers=10 --retries=0
      env:
        PWTEST_MODE: service2
        PWTEST_TRACE: 1
        PWTEST_BOT_NAME: "${{ matrix.browser }}-${{ matrix.service-os }}-service"
        PLAYWRIGHT_SERVICE_ACCESS_KEY: ${{ secrets.PLAYWRIGHT_SERVICE_ACCESS_KEY }}
        PLAYWRIGHT_SERVICE_URL: ${{ secrets.PLAYWRIGHT_SERVICE_URL }}
        PLAYWRIGHT_SERVICE_OS: ${{ matrix.service-os }}
        PLAYWRIGHT_SERVICE_RUN_ID: ${{ github.run_id }}-${{ github.run_attempt }}-${{ github.sha }}
    - name: Upload blob report to GitHub
      if: ${{ !cancelled() }}
      uses: actions/upload-artifact@v4
      with:
        name: all-blob-reports
        path: blob-report
        retention-days: 2

  merge_reports:
    name: "Merge reports"
    needs: [test]
    if: ${{ !cancelled() }}
    runs-on: ubuntu-20.04
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
    - run: npm ci
      env:
        PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
    - run: npm run build
    - name: Download blob report artifact
      uses: actions/download-artifact@v4
      with:
        name: all-blob-reports
        path: all-blob-reports
    - run: npx playwright merge-reports --reporter markdown,html ./all-blob-reports
    - name: Upload HTML report to Azure
      run: |
        REPORT_DIR='run-service-${{ github.run_id }}-${{ github.run_attempt }}-${{ github.sha }}'
        azcopy cp --recursive "./playwright-report/*" "https://mspwblobreport.blob.core.windows.net/\$web/$REPORT_DIR"
        echo "Report url: https://mspwblobreport.z1.web.core.windows.net/$REPORT_DIR/index.html#?q=s:failed"
      env:
        AZCOPY_AUTO_LOGIN_TYPE: SPN
        AZCOPY_SPA_APPLICATION_ID: '${{ secrets.AZCOPY_SPA_APPLICATION_ID }}'
        AZCOPY_SPA_CLIENT_SECRET: '${{ secrets.AZCOPY_SPA_CLIENT_SECRET }}'
        AZCOPY_TENANT_ID: '${{ secrets.AZCOPY_TENANT_ID }}'
