name: Code Check

on:
  workflow_dispatch:
    inputs:
      branch:
        description: 'Branch to check'
        required: true
        default: 'main'

permissions:
  contents: read

jobs:
  check:
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: Checkout branch
        uses: actions/checkout@v3
        with:
          ref: ${{ gitea.event.inputs.branch }}

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 24

      - name: Install dependencies
        run: |
          set -euo pipefail
          npm ci --prefer-offline --no-audit 2>&1 | tee install.log
        env:
          NODE_OPTIONS: '--max-old-space-size=4096'
        timeout-minutes: 5

      - name: TypeScript check
        run: |
          set -euo pipefail
          npm run typecheck 2>&1 | tee build.log
        timeout-minutes: 3

      - name: ESLint check
        run: |
          set -euo pipefail
          npm run lint 2>&1 | tee build.log
        timeout-minutes: 3

      - name: Cleanup before completion
        if: always()
        run: |
          npm cache clean --force || true
          rm -rf node_modules || true

      - name: Upload build log on failure
        if: failure()
        uses: actions/upload-artifact@v3
        with:
          name: build-log
          path: build.log
          if-no-files-found: ignore
          retention-days: 1
          compression-level: 1

      - name: Check completed
        if: success()
        run: echo "Typecheck and lint passed successfully"
