Menu
akurai-tasks
publicLatest change 2c9c32aa6fc1bd2551a09c6a1fc1e71b2dd98c79 - feat: complete and deploy AkurAI Tasks 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/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)
: "${AKURAI_TASKS_MCP_TOKEN:?AKURAI_TASKS_MCP_TOKEN is required for live MCP validation}"
base=${AKURAI_TASKS_PUBLIC_URL:-https://akurai-tasks.olibuijr.com}
curl -fsS "$base/health" | grep -q '"status":"ok"'
curl -fsS "$base/ready" | grep -q '"ready":true'
curl -fsS "$base/" | grep -q '<title>AkurAI Tasks</title>'
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
printf '%s\n' "validate --live: public health, readiness, embedded UI, and authenticated MCP passed"
;;
*)
echo "usage: scripts/validate.sh --local|--live" >&2
exit 2
;;
esac