fetch_ml/scripts/dev/smoke-test.sh
Jeremie Fraeys dddc2913e1
chore(tools): update scripts, native libs, and documentation
Update tooling and documentation:
- Smoke test script with scheduler health checks
- Release cleanup script
- Native test scripts with Redis integration
- TUI SSH test script
- Performance regression detector with scheduler metrics
- Profiler with distributed tracing
- Native CMake with test targets
- Dataset hash tests
- Storage symlink resistance tests
- Configuration reference documentation updates
2026-02-26 12:08:58 -05:00

83 lines
No EOL
2.7 KiB
Bash
Executable file

#!/usr/bin/env bash
# Development smoke test for FetchML
#
# NOTE: If using Colima on macOS, ensure the repo directory is mounted:
# colima stop
# colima start --mount "/Users/jfraeys/Documents/dev/fetch_ml:w"
#
# Usage:
# ./scripts/dev/smoke-test.sh # Standard run
# BUILD_PROGRESS=plain ./scripts/dev/smoke-test.sh # Show full build logs
# KEEP_STACK=1 ./scripts/dev/smoke-test.sh # Keep containers after test
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
export FETCHML_REPO_ROOT="$repo_root"
# Use workspace-relative data directory (Colima-compatible)
# Avoid $HOME/.fetchml - Colima can't create directories through Docker volumes there
DEFAULT_DATA_DIR="$repo_root/data/smoke"
DATA_DIR="${FETCHML_DATA_DIR:-$DEFAULT_DATA_DIR}"
echo "Using DATA_DIR: $DATA_DIR"
rm -rf "$DATA_DIR"
# Create parent directory first with explicit permissions (for Colima compatibility)
mkdir -p "$(dirname "$DATA_DIR")"
chmod 755 "$(dirname "$DATA_DIR")"
# Create data directory structure
mkdir -p "$DATA_DIR"/{redis,minio,logs,experiments,active,workspaces,caddy/data,caddy/config,ssl,configs}
chmod -R 777 "$DATA_DIR"
# Copy configs to DATA_DIR for mounting
cp -r "$repo_root/configs/"* "$DATA_DIR/configs/"
# Build arguments
BUILD_PROGRESS="${BUILD_PROGRESS:-auto}" # Set to 'plain' for full logs
compose_cmd=$(command -v docker-compose >/dev/null 2>&1 && echo "docker-compose" || echo "docker compose")
# Determine build flags
build_flags=""
if [[ "$BUILD_PROGRESS" == "plain" ]]; then
# For docker compose v2+ with buildkit
export BUILDKIT_PROGRESS=plain
build_flags="--progress=plain"
fi
cleanup() {
status=$?
if [[ $status -ne 0 ]]; then
$compose_cmd -f "$repo_root/deployments/docker-compose.dev.yml" logs --no-color 2>/dev/null || true
fi
if [[ "${KEEP_STACK:-0}" != "1" ]]; then
$compose_cmd -f "$repo_root/deployments/docker-compose.dev.yml" down -v >/dev/null 2>&1 || true
rm -rf "$DATA_DIR"
fi
exit $status
}
trap cleanup EXIT
echo "Starting dev stack for smoke test..."
export DATA_DIR="$DATA_DIR"
# Build first with progress option if specified, then up
if [[ "$BUILD_PROGRESS" == "plain" ]]; then
$compose_cmd -f "$repo_root/deployments/docker-compose.dev.yml" --project-directory "$repo_root" build --progress=plain
fi
$compose_cmd -f "$repo_root/deployments/docker-compose.dev.yml" --project-directory "$repo_root" up -d --build
echo "Waiting for API to become healthy..."
deadline=$(( $(date +%s) + 180 ))
while ! curl -sf http://localhost:9101/health >/dev/null 2>&1; do
if [[ $(date +%s) -ge $deadline ]]; then
echo "Timed out waiting for API"
exit 1
fi
sleep 2
done
echo "API is healthy"