volsu-contests/piston/entrypoint.sh

83 lines
2.1 KiB
Bash

#!/bin/bash
# Piston entrypoint - installs languages on first run
LANGUAGES_INSTALLED_FLAG="/piston/packages/.languages_installed"
PPMAN="/piston_api/cli/index.js ppman"
install_lang() {
local pkg=$1
echo "Installing $pkg..."
$PPMAN install "$pkg" || echo "Warning: Failed to install $pkg"
}
install_languages() {
echo "=== Installing Competitive Programming Languages ==="
echo "This may take a while on first run..."
echo ""
# Core languages (most used in competitive programming)
echo ">>> Core Languages"
install_lang "python=3.12.0"
install_lang "gcc=10.2.0" # C/C++
install_lang "java=15.0.2"
install_lang "node=20.11.1" # JavaScript
# Systems programming
echo ">>> Systems Programming"
install_lang "go=1.16.2"
install_lang "rust=1.68.2"
# JVM languages
echo ">>> JVM Languages"
install_lang "kotlin=1.8.20"
install_lang "scala=3.2.2"
# .NET
echo ">>> .NET"
install_lang "dotnet=5.0.201" # C#
# Scripting
echo ">>> Scripting Languages"
install_lang "ruby=3.0.1"
install_lang "perl=5.36.0"
install_lang "php=8.2.3"
install_lang "lua=5.4.4"
# Functional
echo ">>> Functional Languages"
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"
# Other competitive programming languages
echo ">>> Other Languages"
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"
# Low-level
echo ">>> Low-level"
install_lang "nasm=2.15.5"
install_lang "bash=5.1.0"
touch "$LANGUAGES_INSTALLED_FLAG"
echo ""
echo "=== Languages installation complete ==="
$PPMAN list
}
# Install languages only on first run
if [ ! -f "$LANGUAGES_INSTALLED_FLAG" ]; then
install_languages &
fi
# Start Piston API server (don't wait for languages to finish)
exec /piston_api/src/docker-entrypoint.sh