volsu-contests/backend/entrypoint.sh

101 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
set -e
PISTON_URL="${PISTON_URL:-http://piston:2000}"
MAX_RETRIES=10
COUNT=0
echo "Waiting for DB and running alembic migrations..."
until alembic upgrade head; do
COUNT=$((COUNT+1))
if [ "$COUNT" -ge "$MAX_RETRIES" ]; then
echo "Alembic migrations failed after $COUNT attempts." >&2
exit 1
fi
echo "Alembic failed, retrying in 3s... ($COUNT/$MAX_RETRIES)"
sleep 3
done
echo "Migrations applied."
# Install Piston languages in background
install_piston_languages() {
echo "Installing Piston languages in background..."
# Wait for Piston to be ready
until curl -s "$PISTON_URL/api/v2/runtimes" > /dev/null 2>&1; do
echo "Waiting for Piston..."
sleep 2
done
# Check which languages are already installed
INSTALLED=$(curl -s "$PISTON_URL/api/v2/runtimes" | python3 -c "import sys,json; print(' '.join(f\"{r['language']}={r['version']}\" for r in json.load(sys.stdin)))" 2>/dev/null || echo "")
install_lang() {
lang=$1
version=$2
if echo "$INSTALLED" | grep -q "$lang=$version"; then
echo "$lang $version already installed"
else
echo "Installing $lang $version..."
curl -s -X POST "$PISTON_URL/api/v2/packages" \
-H "Content-Type: application/json" \
-d "{\"language\":\"$lang\",\"version\":\"$version\"}" > /dev/null && \
echo "$lang $version installed" || \
echo "✗ Failed to install $lang $version"
fi
}
echo "=== Core Languages ==="
install_lang "python" "3.12.0"
install_lang "gcc" "10.2.0"
install_lang "java" "15.0.2"
install_lang "node" "20.11.1"
echo "=== Systems Programming ==="
install_lang "go" "1.16.2"
install_lang "rust" "1.68.2"
echo "=== JVM Languages ==="
install_lang "kotlin" "1.8.20"
install_lang "scala" "3.2.2"
echo "=== .NET ==="
install_lang "dotnet" "5.0.201"
echo "=== Scripting ==="
install_lang "ruby" "3.0.1"
install_lang "perl" "5.36.0"
install_lang "php" "8.2.3"
install_lang "lua" "5.4.4"
echo "=== Functional ==="
install_lang "haskell" "9.0.1"
install_lang "ocaml" "4.12.0"
install_lang "elixir" "1.11.3"
install_lang "clojure" "1.10.3"
install_lang "racket" "8.3.0"
echo "=== Other ==="
install_lang "pascal" "3.2.2"
install_lang "fortran" "10.2.0"
install_lang "swift" "5.3.3"
install_lang "typescript" "5.0.3"
install_lang "nim" "1.6.2"
install_lang "zig" "0.10.1"
install_lang "d" "10.2.0"
install_lang "prolog" "8.2.4"
echo "=== Low-level ==="
install_lang "nasm" "2.15.5"
install_lang "bash" "5.1.0"
echo "=== Piston languages installation complete ==="
}
# Run language installation in background
install_piston_languages &
exec "$@"