name: Shell CI — agent-queue + CLI

on:
  push:
    branches: [main]
    paths:
      - 'agent-queue/**'
      - 'bytelyst-cli.sh'
      - '.gitea/workflows/shell-ci.yml'
  pull_request:
    branches: [main]
    paths:
      - 'agent-queue/**'
      - 'bytelyst-cli.sh'
      - '.gitea/workflows/shell-ci.yml'

concurrency:
  group: shell-ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  lint:
    name: shellcheck + syntax
    runs-on: [ubuntu-latest, bytelyst, hostinger]
    container:
      image: node:20-bookworm
    timeout-minutes: 10
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          github-server-url: https://gitea.bytelyst.com

      - name: Install shellcheck
        run: |
          apt-get update -qq
          apt-get install -y -qq shellcheck
          shellcheck --version

      - name: shellcheck (errors fail the build)
        run: |
          shellcheck --severity=error --shell=bash \
            agent-queue/agent-queue.sh \
            agent-queue/selftest.sh \
            bytelyst-cli.sh

      - name: bash syntax check (gating, all scripts)
        run: |
          bash -n agent-queue/agent-queue.sh
          bash -n agent-queue/selftest.sh
          bash -n bytelyst-cli.sh

      - name: agent-queue self-test (no-op engine cycle)
        run: ./agent-queue/selftest.sh

      - name: node syntax check (dashboard)
        run: node --check agent-queue/dashboard.mjs

      - name: smoke test (init + add + drain, no real agent)
        run: |
          set -euo pipefail
          export AGENT_QUEUE_ROOT="$PWD/.ci-queue"
          ./agent-queue/agent-queue.sh init
          # task with an invalid cwd lands in failed/ without launching any agent
          printf '%s\n' '---' 'engine: devin' 'cwd: /no/such/dir' 'yolo: true' '---' '# ci' \
            > /tmp/ci-task.md
          ./agent-queue/agent-queue.sh add /tmp/ci-task.md
          ./agent-queue/agent-queue.sh run --once
          test -f "$AGENT_QUEUE_ROOT"/failed/*.md
          echo "smoke OK: task routed to failed/ as expected"
          rm -rf "$AGENT_QUEUE_ROOT"
