# This is a basic workflow to help you get started with Actions
name: 'Linux Build'

# Controls when the action will run.
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build:
    strategy:
      matrix:
        node-version: [24]

    # The type of runner that the job will run on
    runs-on: ubuntu-22.04

    steps:
    - uses: actions/checkout@v6

    - name: Cache Node modules
      uses: actions/cache@v5
      with:
        # npm cache files are stored in ~/.npm
        path: ~/.npm
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-

    - name: Cache Electron binaries
      uses: actions/cache@v5
      with:
        path: |
          ~/.cache/electron
          ~/.cache/electron-builder
        key: ${{ runner.os }}-electron-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-electron-

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v6
      with:
        node-version: ${{ matrix.node-version }}

    - name: Install linux dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf

    - name: Install Dependencies
      uses: nick-fields/retry@v3
      with:
        timeout_minutes: 10
        max_attempts: 3
        command: npm ci

    - name: Check lint
      run: npm run lint

    - name: Install Playwright Browsers
      run: npx playwright@1.58.2 install --with-deps

    - name: Run headless unit test
      uses: GabrielBB/xvfb-action@v1
      with:
        run: npm run test -- --reporters=default

    - name: Run headless e2e test
      uses: GabrielBB/xvfb-action@v1
      with:
        run: npm run e2e
