AkurAI Build
Menu

akurai-tasks

public

Latest change fb58324a11c83d8d63b871a2be85535d5c80521b - feat: conform Tasks to Framework 0.8.4 by Ólafur Búi Ólafsson

#!/bin/sh
set -eu

root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
cd "$root"
mode=${1:-}

case "$mode" in
  --local)
    cargo build -p akurai-tasks >/dev/null
    work=$(mktemp -d "${TMPDIR:-/tmp}/akurai-tasks-validate.XXXXXX")
    pid=""
    trap '[ -z "$pid" ] || kill "$pid" 2>/dev/null || true; rm -rf "$work"' EXIT HUP INT TERM
    db="$work/tasks.db"
    bin=target/debug/akurai-tasks
    "$bin" --db "$db" --actor validate --idempotency validate-project project create VALIDATE "Validation project" owner/api,owner/web >/dev/null
    "$bin" --db "$db" --actor validate --idempotency validate-item item create VALIDATE "Validation task" --repo owner/web --priority high >/dev/null
    "$bin" --db "$db" backup "$work/tasks.backup" >/dev/null
    "$bin" --db "$work/restored.db" restore "$work/tasks.backup" >/dev/null
    restored=$("$bin" --db "$work/restored.db" query --project VALIDATE --repo owner/web --limit 10)
    case "$restored" in *'"id":"VALIDATE-1"'*) ;; *) echo "restore validation failed" >&2; exit 1;; esac

    AKURAI_TASKS_TOKEN=local-validation-token-32-characters \
    AKURAI_TASKS_MCP_TOKEN=local-validation-mcp-token-32-chars \
    AKURAI_TASKS_ALLOWED_ORIGIN=http://127.0.0.1:18091 \
      "$bin" --db "$db" --actor validate serve --host 127.0.0.1 --port 18091 >"$work/server.log" 2>&1 &
    pid=$!
    ready=0
    for _ in 1 2 3 4 5 6 7 8 9 10; do
      if curl -fsS http://127.0.0.1:18091/api/ready >/dev/null 2>&1; then ready=1; break; fi
      sleep 0.2
    done
    [ "$ready" -eq 1 ] || { cat "$work/server.log" >&2; exit 1; }
    curl -fsS http://127.0.0.1:18091/ | grep -q '<title>AkurAI Tasks</title>'
    query=$(curl -fsS -H 'Authorization: Bearer local-validation-token-32-characters' -H 'Origin: http://127.0.0.1:18091' -H 'Content-Type: application/json' -d '{"projects":["VALIDATE"],"repos":["owner/web"],"limit":10}' http://127.0.0.1:18091/api/v1/query)
    case "$query" in *'"id":"VALIDATE-1"'*) ;; *) echo "REST query validation failed" >&2; exit 1;; esac
    mcp=$(curl -fsS -H 'Authorization: Bearer local-validation-mcp-token-32-chars' -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize"}' http://127.0.0.1:18091/mcp)
    case "$mcp" in *'"protocolVersion":"2025-11-25"'*) ;; *) echo "MCP validation failed" >&2; exit 1;; esac
    kill "$pid"
    wait "$pid" 2>/dev/null || true
    pid=""
    printf '%s\n' "validate --local: backup/restore, readiness, embedded UI, REST query, and HTTP MCP passed"
    ;;
  --live)
    base=${AKURAI_TASKS_PUBLIC_URL:-https://akurai-tasks.olibuijr.com}
    health=$(curl -fsS "$base/api/health")
    printf '%s' "$health" | python3 -c 'import json,sys; d=json.load(sys.stdin); assert d["app"] == "akurai-tasks"; assert d["status"] == "ok"; assert d["framework"] == "AkurAI-Framework"; assert d["framework_version"] == "0.8.4"'
    curl -fsS "$base/api/ready" | grep -q '"ready":true'
    curl -fsS "$base/" | grep -q '<title>AkurAI Tasks</title>'
    if [ -n "${AKURAI_TASKS_MCP_TOKEN:-}" ]; then
      mcp=$(curl -fsS -H "Authorization: Bearer $AKURAI_TASKS_MCP_TOKEN" -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize"}' "$base/mcp")
      case "$mcp" in *'"protocolVersion":"2025-11-25"'*) ;; *) echo "live MCP validation failed" >&2; exit 1;; esac
      mcp_result="authenticated MCP"
    else
      status=$(curl -sS -o /dev/null -w '%{http_code}' -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize"}' "$base/mcp")
      [ "$status" = 401 ]
      mcp_result="unauthenticated MCP denial"
    fi
    printf '%s\n' "validate --live: Framework 0.8.4 health, readiness, embedded UI, and $mcp_result passed"
    ;;
  *)
    echo "usage: scripts/validate.sh --local|--live" >&2
    exit 2
    ;;
esac