Spaces:
Sleeping
Sleeping
Download scripts/validate-submission.sh from Code-Father/store: direct link, hf CLI and curl.
- Browser
- Download file 4.38 kB
-
https://huggingface.co/spaces/Code-Father/store/resolve/main/scripts/validate-submission.sh
- Command line
-
hf download hf://spaces/Code-Father/store/scripts/validate-submission.sh
-
curl -L -o validate-submission.sh https://huggingface.co/spaces/Code-Father/store/resolve/main/scripts/validate-submission.sh
4.38 kB
| # | |
| # 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 | |