name: CI

on:
  pull_request:
  push:
    branches: [main]

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm run format:check
      - run: npm run typecheck
      - run: npm test

  # ALVA låg utanför pipelinen. Roten kör `npm test --workspaces`, och
  # felsokning/app är inte ett workspace — så samtliga 311 tester
  # passerade bara när någon körde dem för hand.
  #
  # Det betyder att varje garanti de två revisionerna kallar "låst av ett
  # test" — härkomsten, det stängda schemat, kvalitetsgrinden,
  # högvoltsspärren, ALVA-RULE-200 — i praktiken var olåst. Ett test som
  # ingen kör är dokumentation, inte en spärr.
  alva:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: felsokning/app
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
          cache-dependency-path: felsokning/app/package-lock.json
      - run: npm ci
      - run: npm run lint
      - run: npm run typkontroll
      - run: npm test

  # Genomgången: hela ärenden genom det byggda gränssnittet.
  #
  # Egen jobbrad därför att den kräver en webbläsare och tar längre tid.
  # Den fångar en annan sorts fel än enhetstesterna: tre defekter i förra
  # cykeln levde i ÖVERENSKOMMELSEN mellan moduler — mellan klient och
  # grind, mellan metodikens krav och den evidens den producerar — och
  # inget av dem syntes i en grön svit.
  genomgang:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: felsokning/app
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
          cache-dependency-path: felsokning/app/package-lock.json
      - run: npm ci
      - run: npx playwright install --with-deps chromium
      - run: npm run genomgang
      # Portalspärren kräver ett eget bygge (plattformen konfigurerad),
      # så den kan inte ligga i genomgången.
      - run: npm run portalsparr

  # Plattformstjänsten mot en riktig Postgres.
  #
  # Den här sviten fanns redan och kördes aldrig, vilket lät två fel leva
  # i backenden: en append-only-trigger som gjorde det omöjligt att skriva
  # ärendets härledda gallringsdatum — så varje avslut föll med 500 — och
  # en fordonshistorik som sökte i klartext efter en identifierare som
  # krypteras i vila, och därför svarade tomt på varje fordon. Med 200.
  #
  # Bägge kräver en databas för att synas. Enhetstester med attrapper hade
  # inte kunnat hitta någotdera, och gjorde det inte heller.
  plattform:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: felsokning/services/plattform
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: sudo apt-get update && sudo apt-get install -y postgresql
      - run: npm ci
      # Skriptet startar sin egen Postgres med initdb och behöver därför
      # köra som root; -E env PATH behåller runnerns node.
      - run: sudo -E env "PATH=$PATH" bash integrationstest.sh
