store / scripts /validate-submission.sh
Code-Father's picture
Infrance script fixed
7a2fcb3
Raw History Blame Contribute Delete
4.38 kB
#!/usr/bin/env bash
#
# validate-submission.sh — OpenEnv Submission Validator
#
# Checks that your HF Space is live, Docker image builds, and openenv validate passes.
#
# Run:
# chmod +x scripts/validate-submission.sh
# ./scripts/validate-submission.sh <ping_url> [repo_dir]
#
set -uo pipefail
DOCKER_BUILD_TIMEOUT=600
if [ -t 1 ]; then
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BOLD='\033[1m'
NC='\033[0m'
else
RED='' GREEN='' YELLOW='' BOLD='' NC=''
fi
pass() { echo -e "${GREEN}[PASS]${NC} $1"; }
fail() { echo -e "${RED}[FAIL]${NC} $1"; FAILED=1; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
info() { echo -e "${BOLD}[INFO]${NC} $1"; }
FAILED=0
PING_URL="${1:-}"
REPO_DIR="${2:-.}"
if [ -z "$PING_URL" ]; then
echo "Usage: $0 <ping_url> [repo_dir]"
echo " ping_url Your HuggingFace Space URL (e.g. https://your-space.hf.space)"
echo " repo_dir Path to your repo (default: current directory)"
exit 1
fi
REPO_DIR="$(cd "$REPO_DIR" && pwd)"
echo ""
echo -e "${BOLD}=== OpenEnv Submission Validator ===${NC}"
echo ""
# ---------- Check 1: Required files ----------
info "Checking required files..."
for f in openenv.yaml Dockerfile inference.py; do
if [ -f "$REPO_DIR/$f" ]; then
pass "Found $f"
else
fail "Missing $f"
fi
done
# ---------- Check 2: openenv.yaml ----------
info "Checking openenv.yaml..."
if [ -f "$REPO_DIR/openenv.yaml" ]; then
if grep -q "spec_version" "$REPO_DIR/openenv.yaml"; then
pass "openenv.yaml has spec_version"
else
fail "openenv.yaml missing spec_version"
fi
if grep -q "name:" "$REPO_DIR/openenv.yaml"; then
pass "openenv.yaml has name field"
else
fail "openenv.yaml missing name field"
fi
fi
# ---------- Check 3: inference.py structure ----------
info "Checking inference.py structure..."
if [ -f "$REPO_DIR/inference.py" ]; then
for pattern in 'API_BASE_URL' 'MODEL_NAME' 'HF_TOKEN' 'OpenAI' '"START"' '"STEP"' '"END"'; do
if grep -q "$pattern" "$REPO_DIR/inference.py"; then
pass "inference.py references $pattern"
else
fail "inference.py missing reference to $pattern"
fi
done
fi
# ---------- Check 4: Environment variables ----------
info "Checking environment variables..."
for var in API_BASE_URL MODEL_NAME HF_TOKEN; do
if [ -n "${!var:-}" ]; then
pass "$var is set"
else
warn "$var is not set (required at runtime)"
fi
done
# ---------- Check 5: Docker build ----------
info "Checking Docker build..."
if command -v docker &>/dev/null; then
info "Running docker build (timeout ${DOCKER_BUILD_TIMEOUT}s)..."
if timeout "$DOCKER_BUILD_TIMEOUT" docker build -t openenv-store-test "$REPO_DIR" 2>&1; then
pass "Docker build succeeded"
else
fail "Docker build failed"
fi
else
warn "Docker not found — skipping Docker build check"
fi
# ---------- Check 6: HF Space ping ----------
info "Pinging HF Space at $PING_URL ..."
if command -v curl &>/dev/null; then
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 30 "$PING_URL/health" 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ]; then
pass "HF Space /health returned 200"
else
fail "HF Space /health returned HTTP $HTTP_CODE (expected 200)"
fi
RESET_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 30 -X POST "$PING_URL/reset" 2>/dev/null || echo "000")
if [ "$RESET_CODE" = "200" ]; then
pass "HF Space /reset returned 200"
else
fail "HF Space /reset returned HTTP $RESET_CODE (expected 200)"
fi
else
warn "curl not found — skipping ping check"
fi
# ---------- Check 7: openenv validate ----------
info "Running openenv validate..."
if command -v openenv &>/dev/null; then
if (cd "$REPO_DIR" && openenv validate .); then
pass "openenv validate passed"
else
fail "openenv validate failed"
fi
elif command -v uv &>/dev/null && [ -f "$REPO_DIR/pyproject.toml" ]; then
if (cd "$REPO_DIR" && uv run --project . openenv validate .); then
pass "openenv validate passed (via uv)"
else
fail "openenv validate failed (via uv)"
fi
else
warn "Neither openenv nor uv found — skipping validate"
fi
# ---------- Summary ----------
echo ""
if [ "$FAILED" -eq 0 ]; then
echo -e "${GREEN}${BOLD}All checks passed!${NC}"
exit 0
else
echo -e "${RED}${BOLD}Some checks failed. Please fix the issues above before submitting.${NC}"
exit 1
fi