pharma_agent / scripts /validate-submission.ps1
Arshdeep2k5's picture
Upload folder using huggingface_hub
e757874 verified
Raw
History Blame Contribute Delete
6.51 kB
#Requires -Version 5.1
<#
.SYNOPSIS
OpenEnv Submission Validator
.DESCRIPTION
Checks that your HF Space is live, Docker image builds, and openenv validate passes.
.PARAMETER PingUrl
Your HuggingFace Space URL (e.g. https://your-space.hf.space)
.PARAMETER RepoDir
Path to your repo (default: current directory)
.EXAMPLE
.\validate-submission.ps1 -PingUrl https://my-team.hf.space
.EXAMPLE
.\validate-submission.ps1 -PingUrl https://my-team.hf.space -RepoDir ./my-repo
.NOTES
Prerequisites:
- Docker: https://docs.docker.com/get-docker/
- openenv-core: pip install openenv-core
- curl (usually pre-installed on Windows 10+)
#>
param(
[Parameter(Mandatory = $true)]
[string]$PingUrl,
[Parameter(Mandatory = $false)]
[string]$RepoDir = "."
)
$ErrorActionPreference = "Stop"
# Configuration
$DOCKER_BUILD_TIMEOUT = 600
$TOTAL_CHECKS = 3
$PASSED_CHECKS = 0
# Colors (simplified for PowerShell)
function Write-Header {
param([string]$Text)
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " $Text" -ForegroundColor Cyan -NoNewline
Write-Host ""
Write-Host "========================================`n" -ForegroundColor Cyan
}
function Write-Pass {
param([string]$Text)
Write-Host "[$(Get-Date -Format 'HH:mm:ss')] " -NoNewline
Write-Host "PASSED" -ForegroundColor Green -NoNewline
Write-Host " -- $Text"
$script:PASSED_CHECKS++
}
function Write-Fail {
param([string]$Text)
Write-Host "[$(Get-Date -Format 'HH:mm:ss')] " -NoNewline
Write-Host "FAILED" -ForegroundColor Red -NoNewline
Write-Host " -- $Text"
}
function Write-Hint {
param([string]$Text)
Write-Host " Hint: " -ForegroundColor Yellow -NoNewline
Write-Host "$Text"
}
function Stop-At {
param([string]$Step)
Write-Host "`n" -NoNewline
Write-Host "Validation stopped at $Step. " -ForegroundColor Red -BackgroundColor Black -NoNewline
Write-Host "Fix the above before continuing.`n" -ForegroundColor Red -BackgroundColor Black
exit 1
}
# Resolve repo directory
try {
$RepoPath = (Resolve-Path $RepoDir -ErrorAction Stop).Path
}
catch {
Write-Fail "Directory '$RepoDir' not found"
exit 1
}
$PingUrl = $PingUrl.TrimEnd('/')
# Header
Write-Header "OpenEnv Submission Validator"
Write-Host "Repo: $RepoPath"
Write-Host "Ping URL: $PingUrl"
# Step 1: Ping HF Space
Write-Host "`n[$(Get-Date -Format 'HH:mm:ss')] " -NoNewline
Write-Host "Step 1/3: Pinging HF Space" -ForegroundColor Cyan -NoNewline
Write-Host " ($PingUrl/reset) ..."
try {
$body = @{} | ConvertTo-Json
$response = Invoke-WebRequest `
-Uri "$PingUrl/reset" `
-Method Post `
-ContentType "application/json" `
-Body $body `
-TimeoutSec 30 `
-ErrorAction Stop
if ($response.StatusCode -eq 200) {
Write-Pass "HF Space is live and responds to /reset"
}
else {
Write-Fail "HF Space /reset returned HTTP $($response.StatusCode) (expected 200)"
Write-Hint "Make sure your Space is running and the URL is correct."
Write-Hint "Try opening $PingUrl in your browser first."
Stop-At "Step 1"
}
}
catch {
Write-Fail "HF Space not reachable (connection failed or timed out)"
Write-Hint "Check your network connection and that the Space is running."
Write-Hint "Try: Invoke-WebRequest -Uri '$PingUrl/reset' -Method Post"
Stop-At "Step 1"
}
# Step 2: Docker build
Write-Host "`n[$(Get-Date -Format 'HH:mm:ss')] " -NoNewline
Write-Host "Step 2/3: Running docker build" -ForegroundColor Cyan -NoNewline
Write-Host " ..."
# Check if docker is available
if (-not (Get-Command docker -ErrorAction SilentlyContinue)) {
Write-Fail "docker command not found"
Write-Hint "Install Docker: https://docs.docker.com/get-docker/"
Stop-At "Step 2"
}
# Find Dockerfile
$DockerContext = $null
if (Test-Path "$RepoPath/Dockerfile") {
$DockerContext = $RepoPath
}
elseif (Test-Path "$RepoPath/server/Dockerfile") {
$DockerContext = "$RepoPath/server"
}
else {
Write-Fail "No Dockerfile found in repo root or server/ directory"
Stop-At "Step 2"
}
Write-Host " Found Dockerfile in $DockerContext"
# Run docker build with timeout
try {
$buildJob = Start-Job -ScriptBlock {
param($Context)
& docker build $Context 2>&1
} -ArgumentList $DockerContext
$finished = $buildJob | Wait-Job -Timeout $DOCKER_BUILD_TIMEOUT
if ($null -eq $finished) {
# Timeout occurred
Stop-Job -Job $buildJob -Force | Out-Null
Write-Fail "Docker build failed (timeout=${DOCKER_BUILD_TIMEOUT}s)"
Stop-At "Step 2"
}
$buildOutput = Receive-Job -Job $buildJob
$buildExitCode = $buildJob.State
Remove-Job -Job $buildJob -Force
if ($buildJob.State -eq "Completed") {
Write-Pass "Docker build succeeded"
}
else {
Write-Fail "Docker build failed"
if ($buildOutput) {
$buildOutput[-20..-1] | ForEach-Object { Write-Host $_ }
}
Stop-At "Step 2"
}
}
catch {
Write-Fail "Docker build error: $_"
Stop-At "Step 2"
}
# Step 3: openenv validate
Write-Host "`n[$(Get-Date -Format 'HH:mm:ss')] " -NoNewline
Write-Host "Step 3/3: Running openenv validate" -ForegroundColor Cyan -NoNewline
Write-Host " ..."
if (-not (Get-Command openenv -ErrorAction SilentlyContinue)) {
Write-Fail "openenv command not found"
Write-Hint "Install it: pip install openenv-core"
Stop-At "Step 3"
}
try {
Push-Location $RepoPath
$validateOutput = & openenv validate 2>&1
$validateExitCode = $LASTEXITCODE
Pop-Location
if ($validateExitCode -eq 0) {
Write-Pass "openenv validate passed"
if ($validateOutput) {
Write-Host " $validateOutput"
}
}
else {
Write-Fail "openenv validate failed"
if ($validateOutput) {
$validateOutput | ForEach-Object { Write-Host $_ }
}
Stop-At "Step 3"
}
}
catch {
Write-Fail "openenv validate error: $_"
Stop-At "Step 3"
}
# Summary
Write-Host "`n"
Write-Header "All 3/3 checks passed! Your submission is ready to submit."
exit 0