#!/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