fetch_ml/scripts/dev/smoke-test.sh
Jeremie Fraeys e08feae6ab
chore: migrate scripts from docker-compose v1 to v2
- Update all scripts to use 'docker compose' instead of 'docker-compose'
- Fix compose file paths after consolidation (test.yml, prod.yml)
- Update cleanup.sh to handle --profile debug and --profile smoke
- Update test fixtures to reference consolidated compose files
2026-03-04 13:22:26 -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"