YashashMathur's picture
Sync from GitHub - all files
f762b8d verified
#!/usr/bin/env bash
# OpenEnv Hackathon Pre-Submission Validation Script
# Based on Meta x Scaler Hackathon Round 1 Guidelines
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
BOLD='\033[1m'
NC='\033[0m'
echo -e "${BOLD}Starting Validation...${NC}\n"
# ─────────────────────────────────────────────
# STEP 1: Prerequisite Check
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 1/4: Checking Prerequisites...${NC}"
if ! command -v docker &>/dev/null; then
echo -e "${RED}[FAIL] Docker command not found. Install it: https://docs.docker.com/get-docker/${NC}"
exit 1
fi
if ! command -v openenv &>/dev/null; then
echo -e "${RED}[FAIL] openenv-core not found. Install it: pip install openenv-core${NC}"
exit 1
fi
echo -e "${GREEN}[PASS] Prerequisites found.${NC}\n"
# ─────────────────────────────────────────────
# STEP 2: Docker Build Check
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 2/4: Running Docker Build...${NC}"
if [ -f "Dockerfile" ]; then
DOCKER_CONTEXT="."
elif [ -f "server/Dockerfile" ]; then
DOCKER_CONTEXT="server"
else
echo -e "${RED}[FAIL] No Dockerfile found in root or server/ directory.${NC}"
exit 1
fi
docker build -t openenv-validator "$DOCKER_CONTEXT"
if [ $? -eq 0 ]; then
echo -e "${GREEN}[PASS] Docker build succeeded.${NC}\n"
else
echo -e "${RED}[FAIL] Docker build failed. Check your Dockerfile.${NC}"
exit 1
fi
# ─────────────────────────────────────────────
# STEP 3: OpenEnv Spec Validation
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 3/4: Running openenv validate...${NC}"
openenv validate
if [ $? -eq 0 ]; then
echo -e "${GREEN}[PASS] OpenEnv spec compliance verified (yaml, models, endpoints).${NC}\n"
else
echo -e "${RED}[FAIL] OpenEnv validation failed. Check openenv.yaml and models.py.${NC}"
exit 1
fi
# ─────────────────────────────────────────────
# STEP 4: Baseline Inference & Log Format Check
# ─────────────────────────────────────────────
echo -e "${BOLD}Step 4/4: Running Baseline Inference Check...${NC}"
if [ ! -f "inference.py" ]; then
echo -e "${RED}[FAIL] inference.py NOT found in root directory.${NC}"
exit 1
fi
# Run inference and capture output to check STDOUT format
OUTPUT=$(python inference.py 2>&1)
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo -e "${RED}[FAIL] inference.py failed to execute without errors.${NC}"
echo "$OUTPUT"
exit 1
fi
# Verify mandatory log tags: [START], [STEP], [END]
if [[ "$OUTPUT" == *"[START]"* ]] && [[ "$OUTPUT" == *"[STEP]"* ]] && [[ "$OUTPUT" == *"[END]"* ]]; then
echo -e "${GREEN}[PASS] Mandatory STDOUT log format ([START], [STEP], [END]) detected.${NC}"
else
echo -e "${RED}[FAIL] STDOUT format incorrect. Must strictly follow [START], [STEP], [END] lines.${NC}"
exit 1
fi
# Verify score is within valid 0.0–1.0 range
if [[ "$OUTPUT" =~ "score="([0-9]*\.[0-9]+|[0-9]+) ]]; then
SCORE=${BASH_REMATCH[1]}
if awk "BEGIN {exit !($SCORE >= 0.0 && $SCORE <= 1.0)}"; then
echo -e "${GREEN}[PASS] Score ($SCORE) is within valid 0.0-1.0 range.${NC}"
else
echo -e "${RED}[FAIL] Invalid score: $SCORE. Must be between 0.0 and 1.0.${NC}"
exit 1
fi
fi
# ─────────────────────────────────────────────
# ALL CHECKS PASSED
# ─────────────────────────────────────────────
echo -e "\n${GREEN}${BOLD}========================================${NC}"
echo -e "${GREEN}${BOLD} ALL 4/4 CHECKS PASSED!${NC}"
echo -e "${GREEN}${BOLD} YOUR SUBMISSION IS READY.${NC}"
echo -e "${GREEN}${BOLD}========================================${NC}"