105 lines
2.7 KiB
Bash
Executable File
105 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
PISTON_URL="${PISTON_URL:-http://piston:2000}"
|
|
|
|
# Create uploads directory
|
|
mkdir -p /app/uploads/avatars
|
|
echo "Uploads directory created."
|
|
|
|
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 "$@"
|