feat/ponder-lm-indexing (#142)

This commit is contained in:
johba 2026-02-18 00:19:05 +01:00
parent de3c8eef94
commit 31063379a8
107 changed files with 12517 additions and 367 deletions

View file

@ -68,11 +68,42 @@ services:
export START_BLOCK="$START_BLOCK"
export KRAIKEN_ADDRESS="$KRAIKEN"
export STAKE_ADDRESS="$STAKE"
export LM_ADDRESS="${LIQUIDITY_MANAGER:-0x0000000000000000000000000000000000000000}"
export PONDER_NETWORK=BASE_SEPOLIA_LOCAL_FORK
export PONDER_RPC_URL_BASE_SEPOLIA_LOCAL_FORK="$PONDER_RPC_URL_1"
export PONDER_RPC_URL_1="$PONDER_RPC_URL_1"
echo "=== Starting Ponder (pre-built image) ==="
# Overlay kraiken-lib and ponder source from workspace
# CI_WORKSPACE points to the repo checkout directory
WS="${CI_WORKSPACE:-$(pwd)}"
echo "=== Workspace: $WS ==="
echo "=== Overlaying kraiken-lib from workspace ==="
if [ -d "$WS/kraiken-lib/dist" ]; then
cp -r "$WS/kraiken-lib/dist/." /app/kraiken-lib/dist/
cp -r "$WS/kraiken-lib/src/." /app/kraiken-lib/src/
echo "kraiken-lib updated from workspace (src + dist)"
elif [ -d "$WS/kraiken-lib/src" ]; then
cp -r "$WS/kraiken-lib/src/." /app/kraiken-lib/src/
echo "kraiken-lib/src updated (dist not available — may need rebuild)"
else
echo "WARNING: kraiken-lib not found at $WS/kraiken-lib"
fi
echo "=== Overlaying ponder source from workspace ==="
# Copy individual source files (not the directory itself) to avoid nested src/src/
if [ -d "$WS/services/ponder/src" ]; then
cp -r "$WS/services/ponder/src/." /app/services/ponder/src/
echo "ponder/src files updated from workspace"
fi
for f in ponder.schema.ts ponder.config.ts; do
if [ -f "$WS/services/ponder/$f" ]; then
cp "$WS/services/ponder/$f" /app/services/ponder/"$f"
echo "ponder/$f updated from workspace"
fi
done
echo "=== Starting Ponder (pre-built image + workspace overlay) ==="
cd /app/services/ponder
{
echo "DATABASE_URL=${DATABASE_URL}"
@ -80,7 +111,9 @@ services:
echo "DATABASE_SCHEMA=${DATABASE_SCHEMA}"
echo "START_BLOCK=${START_BLOCK}"
} > .env.local
exec npm run dev
# Use 'start' mode in CI — 'dev' mode watches for file changes and causes
# a hot-restart loop when workspace overlay modifies source files
exec npm run start
# Webapp - waits for contracts.env from bootstrap
- name: webapp
@ -119,16 +152,17 @@ services:
export VITE_SWAP_ROUTER=0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4
export VITE_BASE_PATH=/app/
# kraiken-lib/src MUST be baked into the pre-built image
# (Woodpecker services don't have workspace access, so we can't copy from /woodpecker/src/)
echo "=== Verifying kraiken-lib/src in pre-built image ==="
if [ -d /app/kraiken-lib/src ]; then
echo "kraiken-lib/src found in image"
ls -la /app/kraiken-lib/
# Overlay kraiken-lib from workspace (may be newer than baked-in image)
WS="${CI_WORKSPACE:-$(pwd)}"
echo "=== Overlaying kraiken-lib from workspace ==="
if [ -d "$WS/kraiken-lib/dist" ]; then
cp -r "$WS/kraiken-lib/dist/." /app/kraiken-lib/dist/
cp -r "$WS/kraiken-lib/src/." /app/kraiken-lib/src/
echo "kraiken-lib updated from workspace (src + dist)"
elif [ -d /app/kraiken-lib/src ]; then
echo "kraiken-lib/src found in image (using baked-in version)"
else
echo "ERROR: kraiken-lib/src not found in image!"
echo "The webapp-ci image needs to be rebuilt. Run build-ci-images pipeline."
echo "Services in Woodpecker don't have workspace access - kraiken-lib/src must be baked into the image."
echo "ERROR: kraiken-lib/src not found!"
exit 1
fi
@ -224,8 +258,33 @@ steps:
set -eu
apk add --no-cache curl bash
echo "=== Waiting for DNS resolution (Docker embedded DNS can be slow under load) ==="
for svc in ponder webapp landing caddy; do
for attempt in $(seq 1 60); do
if getent hosts "$svc" >/dev/null 2>&1; then
echo "[dns] $svc resolved after $attempt attempts"
break
fi
echo "[dns] ($attempt/60) waiting for $svc DNS..."
sleep 5
done
done
echo "=== Waiting for stack to be healthy (max 7 min) ==="
bash scripts/wait-for-service.sh http://ponder:42069/ 420 ponder
bash scripts/wait-for-service.sh http://ponder:42069/health 420 ponder
# Extra: wait for ponder GraphQL to actually serve data
echo "=== Waiting for Ponder GraphQL to respond ==="
for i in $(seq 1 60); do
if curl -sf --max-time 3 -X POST http://ponder:42069/graphql \
-H 'Content-Type: application/json' \
-d '{"query":"{ statss(limit:1) { items { id } } }"}' > /dev/null 2>&1; then
echo "[wait] Ponder GraphQL ready after $((i * 5))s"
break
fi
echo "[wait] ($i/60) Ponder GraphQL not ready..."
sleep 5
done
bash scripts/wait-for-service.sh http://webapp:5173/app/ 420 webapp
bash scripts/wait-for-service.sh http://landing:5174/ 420 landing
bash scripts/wait-for-service.sh http://caddy:8081/app/ 420 caddy
@ -246,13 +305,22 @@ steps:
commands:
- |
set -eux
echo "=== Checking system resources ==="
free -h || true
cat /proc/meminfo | grep -E 'MemTotal|MemAvail' || true
echo "=== Verifying Playwright browsers ==="
npx playwright install --dry-run 2>&1 || true
ls -la /ms-playwright/ 2>/dev/null || echo "No /ms-playwright directory"
echo "=== Installing test dependencies ==="
npm config set fund false
npm config set audit false
npm ci --no-audit --no-fund
echo "=== Running E2E tests ==="
npx playwright test --reporter=list
echo "=== Running E2E tests (workers=1 to limit memory) ==="
npx playwright test --reporter=list --workers=1
# Step 4: Collect artifacts
- name: collect-artifacts