Files
John Dvorak 8f823d959b feat: CI verification pipeline and structural conformance gates
- Add scripts/check-structural.js: counts production as any, empty catch,
  and ?? 0 patterns; fails CI if counts exceed committed baseline
- Add scripts/.structural-baseline.json: committed baseline (101 as any,
  17 empty catch, 62 ?? 0); use --fix-baseline to ratchet down
- Add scripts/ci-verify.sh: ordered pipeline (build → typecheck → lint →
  structural → unit tests → E2E) with pass/fail summary
- Add npm scripts: test:structural, test:structural:fix, ci:verify
- Add cache-staleness conformance test: verifies WORLD_CACHE_SCHEMA_VERSION
  is prefixed to all cache keys for auto-invalidation on schema changes
- Cache test suite grows from 141 → 142 passes
2026-05-22 16:33:34 -07:00

85 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
pass_count=0
fail_count=0
start_time=$(date +%s)
step() {
local label="$1"
shift
echo -e "${YELLOW}[CI]${NC} ${label}..."
if "$@" > /tmp/ci-output-$$.log 2>&1; then
echo -e " ${GREEN}PASS${NC}"
pass_count=$((pass_count + 1))
else
echo -e " ${RED}FAIL${NC}"
tail -30 /tmp/ci-output-$$.log
fail_count=$((fail_count + 1))
fi
}
echo "============================================================"
echo " Imhotep CI Verification"
echo "============================================================"
echo ""
# 1. Build all packages
step "Build" npm run build
# 2. Typecheck
step "Typecheck" npm run typecheck
# 3. Lint
step "Lint" npm run lint
# 4. Structural conformance (as any, empty catch, ?? 0 baselines)
step "Structural conformance" node scripts/check-structural.js
# 5. Unit tests (DSL, core, solver, playwright)
step "Core tests (DSL)" npm test --workspace=imhotep-dsl --if-present
step "Core tests (core)" npm test --workspace=imhotep-core --if-present
step "Core tests (solver)" npm test --workspace=imhotep-solver --if-present
step "Core tests (extractor)" npm test --workspace=imhotep-extractor --if-present
step "Core tests (geometry)" npm test --workspace=imhotep-geometry --if-present
# 6. E2E tests (requires browser)
echo -e "${YELLOW}[CI]${NC} E2E hard tests..."
if npx playwright test --config packages/imhotep-fixtures/playwright.config.ts --grep="hard test" --workers=1 > /tmp/ci-output-$$.log 2>&1; then
echo -e " ${GREEN}PASS${NC}"
pass_count=$((pass_count + 1))
else
echo -e " ${RED}FAIL${NC}"
tail -30 /tmp/ci-output-$$.log
fail_count=$((fail_count + 1))
fi
# Summary
end_time=$(date +%s)
elapsed=$((end_time - start_time))
echo ""
echo "============================================================"
echo " CI Summary"
echo "============================================================"
echo " Passed: ${GREEN}${pass_count}${NC}"
echo " Failed: ${RED}${fail_count}${NC}"
echo " Elapsed: ${elapsed}s"
echo ""
if [ "$fail_count" -gt 0 ]; then
echo -e "${RED}CI verification FAILED${NC}"
exit 1
else
echo -e "${GREEN}CI verification PASSED${NC}"
exit 0
fi