Spaces:
Sleeping
Sleeping
| # 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}" | |