#!/usr/bin/env bash set -euo pipefail REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PING_URL="${PING_URL:-}" DOCKER_IMAGE_TAG="${DOCKER_IMAGE_TAG:-delivery-openenv:precheck}" OPENENV_BIN_FALLBACK="$REPO_DIR/.venv/bin/openenv" VENV_PYTHON="$REPO_DIR/.venv/bin/python" pass() { echo "[PASS] $1"; } info() { echo "[INFO] $1"; } fail() { echo "[FAIL] $1"; exit 1; } info "Step 1/4: Optional Hugging Face Space ping" if [[ -n "$PING_URL" ]]; then HTTP_CODE="$( curl -sS -o /tmp/openenv_reset_response.txt -w "%{http_code}" \ -X POST "$PING_URL/reset" \ -H "Content-Type: application/json" \ -d '{"task":"easy","seed":101}' || true )" if [[ "$HTTP_CODE" == "200" ]]; then pass "HF Space /reset returned HTTP 200" else fail "HF Space /reset returned HTTP $HTTP_CODE" fi else info "PING_URL is not set; skipping remote endpoint check" fi info "Step 2/4: Docker build" if ! command -v docker >/dev/null 2>&1; then fail "docker command not found" fi if ! docker info >/dev/null 2>&1; then fail "docker daemon is not running or not reachable" fi docker build -t "$DOCKER_IMAGE_TAG" "$REPO_DIR" >/tmp/openenv_docker_build.log 2>&1 || { tail -20 /tmp/openenv_docker_build.log || true fail "docker build failed" } pass "Docker build succeeded" info "Step 3/4: OpenEnv validation" if command -v openenv >/dev/null 2>&1; then OPENENV_CMD=(openenv) elif [[ -x "$OPENENV_BIN_FALLBACK" ]]; then OPENENV_CMD=("$OPENENV_BIN_FALLBACK") else fail "openenv CLI not found; install with 'pip install openenv-core'" fi (cd "$REPO_DIR" && "${OPENENV_CMD[@]}" validate) pass "openenv validate passed" info "Step 4/4: Test suite" if [[ -x "$VENV_PYTHON" ]]; then PYTHON_BIN="$VENV_PYTHON" elif command -v python3 >/dev/null 2>&1; then PYTHON_BIN="$(command -v python3)" else fail "python3 not found" fi (cd "$REPO_DIR" && "$PYTHON_BIN" -m pytest -q) pass "pytest passed" echo echo "[PASS] All validation checks completed"