name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - uses: actions/checkout@v7

      - uses: actions/setup-node@v6
        with:
          node-version-file: '.nvmrc'
          cache: 'npm'

      - run: npm ci

      - run: npm run build

      - uses: actions/upload-artifact@v7
        with:
          name: dist
          path: dist
          retention-days: 7

  lint:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - uses: actions/checkout@v7

      - uses: actions/setup-node@v6
        with:
          node-version-file: '.nvmrc'
          cache: 'npm'

      - run: npm ci

      - run: npm run lint

  test:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
      - uses: actions/checkout@v7

      - uses: actions/setup-node@v6
        with:
          node-version-file: '.nvmrc'
          cache: 'npm'

      - run: npm ci

      - name: Install Firefox
        run: |
          sudo apt-get update
          sudo apt-get install -y firefox

      - name: Run tests with Smokestack and Firefox
        env:
          MapboxAccessToken: ${{ secrets.MAPBOX_ACCESS_TOKEN }}
        run: |
          export DISPLAY=:99
          Xvfb :99 -screen 0 1024x768x24 2> /dev/null &
          npm test
