name: KBX Quality Gate

on:
  push:
  pull_request:

jobs:
  architecture:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Validate KBX architecture
        run: node scripts/validate-kbx.mjs
      - name: Ensure generated manifests are committed
        run: git diff --exit-code -- generated/ apps/web/src/registry/screens.generated.ts packages/kbx-ui/src/tokens/kbx.css packages/kbx-contracts/src/generated/ backend/Shared/Contracts/Generated/ backend/Shared/Authorization/Generated/ backend/Shared/Telemetry/Generated/ backend/Shared/Experiments/Generated/ backend/Shared/Testing/Generated/ backend/Shared/Integrations/Generated/ backend/Shared/Providers/Generated/ backend/Shared/ExternalData/Generated/ backend/Shared/Configuration/Generated/ design/figma/ contracts/api/openapi.kbx.json deploy/kbx/

  frontend:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Enable Corepack
        run: corepack enable
      - name: Install and execute FE runtime evidence when lockfile exists
        shell: bash
        run: |
          if [ -f pnpm-lock.yaml ]; then
            pnpm install --frozen-lockfile
            pnpm typecheck:web
            pnpm test:unit
            pnpm build:web:demo
            pnpm exec playwright install --with-deps chromium
            pnpm test:e2e
          else
            node scripts/report-fe-runtime-readiness.mjs
            echo "pnpm-lock.yaml is absent; reproducible browser-runtime evidence is blocked and is not reported as PASS."
          fi

  backend:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Build/test when solution exists
        shell: bash
        run: |
          shopt -s nullglob
          solutions=( *.sln *.slnx )
          if [ ${#solutions[@]} -gt 0 ]; then
            dotnet restore "${solutions[0]}"
            dotnet build "${solutions[0]}" --no-restore -c Release
            dotnet test "${solutions[0]}" --no-build -c Release
          else
            echo "Reference starter has no .NET solution file; backend compile gate is deferred to host repository."
          fi
