AdamK29/Meta-OpenENV-Hackathon
0
1#!/usr/bin/env bash2#3# validate-submission.sh — OpenEnv Submission Validator (FINAL FIXED)4#5 6set -uo pipefail7 8DOCKER_BUILD_TIMEOUT=6009 10if [ -t 1 ]; then11 RED='\033[0;31m'12 GREEN='\033[0;32m'13 YELLOW='\033[1;33m'14 BOLD='\033[1m'15 NC='\033[0m'16else17 RED='' GREEN='' YELLOW='' BOLD='' NC=''18fi19 20# ---------------- TIMEOUT HANDLER ----------------21 22run_with_timeout() {23 local secs="$1"; shift24 if command -v timeout &>/dev/null; then25 timeout "$secs" "$@"26 elif command -v gtimeout &>/dev/null; then27 gtimeout "$secs" "$@"28 else29 "$@" &30 local pid=$!31 ( sleep "$secs" && kill "$pid" 2>/dev/null ) &32 local watcher=$!33 wait "$pid" 2>/dev/null34 local rc=$?35 kill "$watcher" 2>/dev/null36 wait "$watcher" 2>/dev/null37 return $rc38 fi39}40 41# ---------------- INPUT ----------------42 43PING_URL="${1:-}"44REPO_DIR="${2:-.}"45 46if [ -z "$PING_URL" ]; then47 echo "Usage: $0 <ping_url> [repo_dir]"48 exit 149fi50 51REPO_DIR="$(cd "$REPO_DIR" && pwd)"52PING_URL="${PING_URL%/}"53 54# ---------------- AUTO FIX HF URL ----------------55 56if [[ "$PING_URL" == *"huggingface.co/spaces"* ]]; then57 USER_NAME=$(echo "$PING_URL" | awk -F'/' '{print $4}')58 SPACE_NAME=$(echo "$PING_URL" | awk -F'/' '{print $5}')59 60 # lowercase conversion61 USER_NAME=$(echo "$USER_NAME" | tr '[:upper:]' '[:lower:]')62 SPACE_NAME=$(echo "$SPACE_NAME" | tr '[:upper:]' '[:lower:]')63 64 PING_URL="https://${USER_NAME}-${SPACE_NAME}.hf.space"65fi66 67# ---------------- LOGGING ----------------68 69PASS=070 71log() { echo "[$(date -u +%H:%M:%S)] $*"; }72pass() { log "PASSED -- $1"; PASS=$((PASS + 1)); }73fail() { log "FAILED -- $1"; }74 75echo "========================================"76echo " OpenEnv Submission Validator"77echo "========================================"78log "Repo: $REPO_DIR"79log "Ping URL: $PING_URL"80 81# ---------------- STEP 1 ----------------82 83log "Step 1/3: Checking HF Space..."84 85HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -X POST \86 "$PING_URL/reset" \87 -H "Content-Type: application/json" \88 --data-raw '{}')89 90if [ "$HTTP_CODE" = "200" ]; then91 pass "HF Space responds correctly"92else93 fail "HF Space failed (HTTP $HTTP_CODE)"94 exit 195fi96 97# ---------------- STEP 2 ----------------98 99log "Step 2/3: Building Docker..."100 101if [ ! -f "$REPO_DIR/Dockerfile" ]; then102 fail "No Dockerfile found"103 exit 1104fi105 106if run_with_timeout "$DOCKER_BUILD_TIMEOUT" docker build -t openenv-test "$REPO_DIR" > /dev/null 2>&1; then107 pass "Docker build succeeded"108else109 fail "Docker build failed"110 exit 1111fi112 113# ---------------- STEP 3 ----------------114 115log "Step 3/3: Running openenv validate..."116 117if ! command -v openenv &>/dev/null; then118 echo "Install openenv-core: pip install openenv-core"119 exit 1120fi121 122if cd "$REPO_DIR" && openenv validate; then123 pass "OpenEnv validation passed"124else125 fail "OpenEnv validation failed"126 exit 1127fi128 129# ---------------- DONE ----------------130 131echo "========================================"132echo " ALL CHECKS PASSED!"133echo "========================================"