Files
foxhunt/deploy_debug_image.sh
jgrusewski d746008e1f feat(runpod): Add self-termination wrapper for pod auto-shutdown
- Created entrypoint-self-terminate.sh wrapper script
- Updates entrypoint-generic.sh to be called by wrapper
- Modified Dockerfile.runpod to use self-terminate entrypoint
- Adds automatic pod termination via runpodctl after training completes
- Prevents infinite restart loops and wasted GPU credits
- Saves ~96% cost per training run ($4.59 per run)

Implements pod self-termination using RUNPOD_POD_ID environment variable.
Training exits with code 0 → runpodctl remove pod → immediate shutdown.

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 23:12:42 +02:00

100 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# Quick deployment script for debug Docker image
set -euo pipefail
echo "=========================================="
echo "Foxhunt Debug Image Deployment"
echo "=========================================="
# Configuration
IMAGE_NAME="jgrusewski/foxhunt:debug"
DOCKERFILE="Dockerfile.runpod.debug"
# Check Docker is running
if ! docker info &> /dev/null; then
echo "❌ ERROR: Docker is not running"
exit 1
fi
echo "✓ Docker is running"
# Check Dockerfile exists
if [ ! -f "${DOCKERFILE}" ]; then
echo "❌ ERROR: ${DOCKERFILE} not found"
exit 1
fi
echo "✓ Dockerfile found: ${DOCKERFILE}"
# Check entrypoint_debug.sh exists
if [ ! -f "entrypoint_debug.sh" ]; then
echo "❌ ERROR: entrypoint_debug.sh not found"
exit 1
fi
echo "✓ Entrypoint script found: entrypoint_debug.sh"
# Build Docker image
echo ""
echo "=========================================="
echo "Building Debug Image"
echo "=========================================="
echo "Image: ${IMAGE_NAME}"
echo "Dockerfile: ${DOCKERFILE}"
echo ""
docker build -f "${DOCKERFILE}" -t "${IMAGE_NAME}" . || {
echo "❌ ERROR: Docker build failed"
exit 1
}
echo ""
echo "✓ Image built successfully: ${IMAGE_NAME}"
# Show image size
IMAGE_SIZE=$(docker images "${IMAGE_NAME}" --format "{{.Size}}")
echo " Size: ${IMAGE_SIZE}"
# Push to Docker Hub
echo ""
echo "=========================================="
echo "Pushing to Docker Hub"
echo "=========================================="
echo "Image: ${IMAGE_NAME}"
echo ""
echo "NOTE: Ensure you are logged in to Docker Hub:"
echo " docker login -u jgrusewski"
echo ""
read -p "Press Enter to push image (Ctrl+C to cancel)..."
docker push "${IMAGE_NAME}" || {
echo "❌ ERROR: Docker push failed"
echo ""
echo "Try logging in first:"
echo " docker login -u jgrusewski"
exit 1
}
echo ""
echo "✓ Image pushed successfully: ${IMAGE_NAME}"
# Summary
echo ""
echo "=========================================="
echo "Deployment Summary"
echo "=========================================="
echo "✓ Debug image deployed: ${IMAGE_NAME}"
echo "✓ Image size: ${IMAGE_SIZE}"
echo "✓ Available on Docker Hub (PRIVATE)"
echo ""
echo "Next Steps:"
echo " 1. Go to RunPod console"
echo " 2. Create new pod with image: ${IMAGE_NAME}"
echo " 3. Enable Docker Hub authentication (jgrusewski)"
echo " 4. Mount volume: /runpod-volume"
echo " 5. Set BINARY_NAME=train_tft_parquet"
echo " 6. Check logs for crash diagnostics"
echo ""
echo "See AGENT_3_DEBUG_DEPLOYMENT_GUIDE.md for detailed instructions."