fleet-memory/scripts/test-doc-examples.sh
Nicolò Boschi 7990381f6a
fix(ci): resolve all CI failures (#847)
* fix(ci): resolve all CI failures — unversioned integrations, test retries

- Move integration docs to separate unversioned docs plugin (docs-integrations/)
  so new integrations don't need to be duplicated across versioned_docs
- Remove integration pages from versioned_docs (v0.3, v0.4) — sidebar
  entries now use links instead of doc refs
- Add missing title/description SEO frontmatter to autogen.md
- Add retry logic (2 attempts) to test-doc-examples.sh for transient
  LLM timeouts
- Add pytest-rerunfailures to test-api with --reruns 2 for flaky
  Gemini-dependent integration tests

* ci: retrigger

* fix: graph entity inheritance, SyncTaskBackend error propagation, fact_type test regressions

- Fix observation entity inheritance in get_graph_data: the unit_entities
  query only fetched entities for visible observation IDs, not their source
  memory IDs, so the inheritance loop always found an empty entity_map
- Remove error swallowing in SyncTaskBackend._execute_task so test failures
  surface instead of being silently logged
- Wrap remaining consolidation submission call sites with try/except since
  consolidation is non-critical for those operations
- Fix test_sync_backend test to expect errors to propagate
- Remove fact_type=["world"] filter from test_document_upsert_behavior and
  test_mentioned_at_from_context_string (same PR #848 regression)
- Remove flaky marker from consolidation test (now deterministic)
2026-04-02 17:17:42 +02:00

163 lines
4.6 KiB
Bash
Executable file

#!/bin/bash
set +e # Don't exit on errors - we want to collect all failures
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
EXAMPLES_DIR="$PROJECT_ROOT/hindsight-docs/examples/api"
LOG_DIR="/tmp/doc-example-logs"
mkdir -p "$LOG_DIR"
TOTAL_PASSED=0
TOTAL_FAILED=0
FAILED_EXAMPLES=()
# Parse language filter from command line
LANGUAGE_FILTER=""
while [[ $# -gt 0 ]]; do
case $1 in
--lang)
LANGUAGE_FILTER="$2"
shift 2
;;
*)
echo "Unknown option: $1"
echo "Usage: $0 [--lang <python|node|cli|go>]"
exit 1
;;
esac
done
echo "======================================"
echo "Running Documentation Examples"
if [ -n "$LANGUAGE_FILTER" ]; then
echo "Language filter: $LANGUAGE_FILTER"
fi
echo "======================================"
echo ""
# Number of retry attempts for each example (handles transient LLM timeouts)
MAX_RETRIES=2
# Function to run a single example
run_example() {
local file="$1"
local runner="$2"
local workdir="${3:-$PROJECT_ROOT}"
local basename=$(basename "$file")
local logfile="$LOG_DIR/$basename.log"
echo -n "Running $basename... "
pushd "$workdir" > /dev/null 2>&1
local attempt=1
while [ $attempt -le $MAX_RETRIES ]; do
if $runner "$file" > "$logfile" 2>&1; then
if [ $attempt -gt 1 ]; then
echo -e "${GREEN}✓ PASS${NC} (passed on retry $attempt)"
else
echo -e "${GREEN}✓ PASS${NC}"
fi
TOTAL_PASSED=$((TOTAL_PASSED + 1))
rm -f "$logfile" # Clean up successful test logs
popd > /dev/null 2>&1
return 0
fi
if [ $attempt -lt $MAX_RETRIES ]; then
echo -e -n "${YELLOW}(attempt $attempt failed, retrying)${NC} "
fi
attempt=$((attempt + 1))
done
echo -e "${RED}✗ FAIL${NC} (after $MAX_RETRIES attempts)"
TOTAL_FAILED=$((TOTAL_FAILED + 1))
FAILED_EXAMPLES+=("$basename:$logfile")
popd > /dev/null 2>&1
return 1
}
# Run Python examples
if [ -z "$LANGUAGE_FILTER" ] || [ "$LANGUAGE_FILTER" = "python" ]; then
echo "======================================"
echo "Python Examples"
echo "======================================"
cd "$PROJECT_ROOT/hindsight-clients/python"
for f in "$EXAMPLES_DIR"/*.py; do
[ -e "$f" ] || continue # Skip if no files match
run_example "$f" "uv run python" "$PROJECT_ROOT/hindsight-clients/python"
done
echo ""
fi
# Run Node.js examples
if [ -z "$LANGUAGE_FILTER" ] || [ "$LANGUAGE_FILTER" = "node" ]; then
echo "======================================"
echo "Node.js Examples"
echo "======================================"
cd "$PROJECT_ROOT"
for f in "$EXAMPLES_DIR"/*.mjs; do
[ -e "$f" ] || continue # Skip if no files match
run_example "$f" "node" "$PROJECT_ROOT"
done
echo ""
fi
# Run CLI examples
if [ -z "$LANGUAGE_FILTER" ] || [ "$LANGUAGE_FILTER" = "cli" ]; then
echo "======================================"
echo "CLI Examples"
echo "======================================"
cd "$PROJECT_ROOT"
for f in "$EXAMPLES_DIR"/*.sh; do
[ -e "$f" ] || continue # Skip if no files match
run_example "$f" "bash" "$PROJECT_ROOT"
done
echo ""
fi
# Run Go examples
if [ -z "$LANGUAGE_FILTER" ] || [ "$LANGUAGE_FILTER" = "go" ]; then
echo "======================================"
echo "Go Examples"
echo "======================================"
cd "$PROJECT_ROOT/hindsight-clients/go"
for f in "$EXAMPLES_DIR"/*.go; do
[ -e "$f" ] || continue # Skip if no files match
run_example "$f" "go run" "$PROJECT_ROOT/hindsight-clients/go"
done
echo ""
fi
# Print summary
echo "======================================"
echo "Summary"
echo "======================================"
echo -e "${GREEN}Passed: $TOTAL_PASSED${NC}"
echo -e "${RED}Failed: $TOTAL_FAILED${NC}"
echo ""
# If there are failures, show the logs
if [ $TOTAL_FAILED -gt 0 ]; then
echo "======================================"
echo "Failed Example Logs"
echo "======================================"
for entry in "${FAILED_EXAMPLES[@]}"; do
IFS=':' read -r name logfile <<< "$entry"
echo ""
echo -e "${YELLOW}=== $name ===${NC}"
cat "$logfile"
done
echo ""
echo -e "${RED}$TOTAL_FAILED example(s) failed${NC}"
exit 1
fi
echo -e "${GREEN}All examples passed!${NC}"
exit 0