120 lines
3.3 KiB
Bash
Executable File
120 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
source "$ROOT_DIR/scripts/harness/lib.sh"
|
|
|
|
DOCKER_SMOKE="${PLANET_HARNESS_DOCKER_SMOKE:-0}"
|
|
FRONTEND_SMOKE="${PLANET_HARNESS_FRONTEND_SMOKE:-1}"
|
|
FRONTEND_SMOKE_PORT="${PLANET_HARNESS_FRONTEND_SMOKE_PORT:-4173}"
|
|
|
|
run_helm_smoke_if_available() {
|
|
local helm_bin
|
|
if ! helm_bin="$(harness_find_cmd helm)"; then
|
|
printf "warn: helm not found; skipping Helm lint/template smoke\n"
|
|
return 0
|
|
fi
|
|
|
|
harness_run "$helm_bin" lint deploy/helm/planet
|
|
harness_run "$helm_bin" template planet-staging deploy/helm/planet \
|
|
--namespace planet-staging \
|
|
-f deploy/helm/planet/values.single-node.yaml \
|
|
--set image.tag=harness-smoke >/tmp/planet-harness-rendered.yaml
|
|
}
|
|
|
|
run_docker_smoke_if_requested() {
|
|
case "$DOCKER_SMOKE" in
|
|
1|true|yes|on)
|
|
;;
|
|
*)
|
|
printf "info: Docker image smoke skipped; set PLANET_HARNESS_DOCKER_SMOKE=1 to enable\n"
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
local docker_bin
|
|
if ! docker_bin="$(harness_find_cmd docker)"; then
|
|
printf "fail: docker not found; cannot run requested image smoke builds\n"
|
|
return 1
|
|
fi
|
|
|
|
harness_run "$docker_bin" build -t planet-harness/frontend:smoke ./frontend
|
|
harness_run "$docker_bin" build -t planet-harness/backend:smoke -f backend/Dockerfile .
|
|
harness_run "$docker_bin" build -t planet-harness/aiprovider:smoke -f aiprovider/Dockerfile .
|
|
}
|
|
|
|
wait_for_frontend_preview() {
|
|
local bun_bin="$1"
|
|
local url="$2"
|
|
local attempts=60
|
|
local index=0
|
|
while [ "$index" -lt "$attempts" ]; do
|
|
if PLANET_FRONTEND_SMOKE_URL="$url" "$bun_bin" -e \
|
|
'fetch(process.env.PLANET_FRONTEND_SMOKE_URL).then((r) => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))' \
|
|
>/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
index=$((index + 1))
|
|
sleep 1
|
|
done
|
|
return 1
|
|
}
|
|
|
|
run_frontend_smoke_if_enabled() {
|
|
local bun_bin="$1"
|
|
case "$FRONTEND_SMOKE" in
|
|
0|false|no|off)
|
|
printf "info: frontend Playwright smoke skipped; set PLANET_HARNESS_FRONTEND_SMOKE=1 to enable\n"
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
local url="http://127.0.0.1:${FRONTEND_SMOKE_PORT}"
|
|
local log_path="/tmp/planet-harness-frontend-preview.log"
|
|
(
|
|
cd "$ROOT_DIR/frontend"
|
|
"$bun_bin" ./node_modules/vite/bin/vite.js preview \
|
|
--host 127.0.0.1 \
|
|
--port "$FRONTEND_SMOKE_PORT" \
|
|
--strictPort
|
|
) >"$log_path" 2>&1 &
|
|
local preview_pid=$!
|
|
|
|
if ! wait_for_frontend_preview "$bun_bin" "$url"; then
|
|
printf "fail: frontend preview did not become ready at %s\n" "$url"
|
|
printf "preview log: %s\n" "$log_path"
|
|
kill "$preview_pid" >/dev/null 2>&1 || true
|
|
wait "$preview_pid" >/dev/null 2>&1 || true
|
|
return 1
|
|
fi
|
|
|
|
local smoke_status=0
|
|
PLANET_FRONTEND_SMOKE_URL="$url" harness_run "$bun_bin" "$ROOT_DIR/scripts/harness/frontend-smoke.mjs" || smoke_status=$?
|
|
kill "$preview_pid" >/dev/null 2>&1 || true
|
|
wait "$preview_pid" >/dev/null 2>&1 || true
|
|
return "$smoke_status"
|
|
}
|
|
|
|
main() {
|
|
cd "$ROOT_DIR"
|
|
local bun_bin
|
|
bun_bin="$(harness_require_tool bun)"
|
|
|
|
harness_run scripts/harness/quick-check.sh
|
|
|
|
(
|
|
cd "$ROOT_DIR/frontend"
|
|
harness_run "$bun_bin" install --frozen-lockfile
|
|
harness_run "$bun_bin" run build
|
|
)
|
|
|
|
run_frontend_smoke_if_enabled "$bun_bin"
|
|
run_helm_smoke_if_available
|
|
run_docker_smoke_if_requested
|
|
|
|
printf "harness validation passed\n"
|
|
}
|
|
|
|
main "$@"
|