feat: move Piston language installation from Piston service to backend entrypoint
This commit is contained in:
parent
ab4f9c1c0b
commit
e69ba6755d
@ -1,6 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
PISTON_URL="${PISTON_URL:-http://piston:2000}"
|
||||||
|
|
||||||
MAX_RETRIES=10
|
MAX_RETRIES=10
|
||||||
COUNT=0
|
COUNT=0
|
||||||
|
|
||||||
@ -16,4 +18,83 @@ until alembic upgrade head; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
echo "Migrations applied."
|
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 "$@"
|
exec "$@"
|
||||||
|
|||||||
@ -26,9 +26,7 @@ services:
|
|||||||
- "2000:2000"
|
- "2000:2000"
|
||||||
privileged: true
|
privileged: true
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
entrypoint: ["/bin/bash", "/piston-init/entrypoint.sh"]
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./piston/entrypoint.sh:/piston-init/entrypoint.sh:ro
|
|
||||||
- piston_packages:/piston/packages
|
- piston_packages:/piston/packages
|
||||||
tmpfs:
|
tmpfs:
|
||||||
- /piston/jobs:exec,mode=777
|
- /piston/jobs:exec,mode=777
|
||||||
|
|||||||
@ -1,82 +0,0 @@
|
|||||||
#!/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
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Script to install competitive programming languages in Piston
|
|
||||||
# Run this script inside the Piston container:
|
|
||||||
# docker cp scripts/install-piston-languages.sh sp-piston:/tmp/
|
|
||||||
# docker exec -it sp-piston bash /tmp/install-piston-languages.sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
echo "=== Installing Competitive Programming Languages in Piston ==="
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Function to install a language with error handling
|
|
||||||
install_lang() {
|
|
||||||
local lang=$1
|
|
||||||
local version=$2
|
|
||||||
echo "Installing $lang $version..."
|
|
||||||
if piston ppman install "$lang=$version"; then
|
|
||||||
echo "✓ $lang $version installed successfully"
|
|
||||||
else
|
|
||||||
echo "✗ Failed to install $lang $version"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
# Core competitive programming languages (latest versions from Piston repo)
|
|
||||||
echo "=== Core Languages ==="
|
|
||||||
install_lang "python" "3.12.0"
|
|
||||||
install_lang "gcc" "10.2.0" # C/C++ (provides c and c++)
|
|
||||||
install_lang "java" "15.0.2"
|
|
||||||
install_lang "node" "20.11.1" # JavaScript
|
|
||||||
|
|
||||||
# Systems programming languages
|
|
||||||
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#/F#
|
|
||||||
install_lang "mono" "6.12.0" # Mono C#
|
|
||||||
|
|
||||||
# Scripting languages
|
|
||||||
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 programming languages
|
|
||||||
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 "erlang" "23.0.0"
|
|
||||||
install_lang "racket" "8.3.0"
|
|
||||||
install_lang "lisp" "2.1.2" # CLISP
|
|
||||||
|
|
||||||
# Other competitive programming languages
|
|
||||||
echo "=== Other Languages ==="
|
|
||||||
install_lang "pascal" "3.2.2" # Free Pascal
|
|
||||||
install_lang "fortran" "10.2.0" # GFortran
|
|
||||||
install_lang "swift" "5.3.3"
|
|
||||||
install_lang "typescript" "5.0.3"
|
|
||||||
install_lang "nim" "1.6.2"
|
|
||||||
install_lang "crystal" "1.9.2"
|
|
||||||
install_lang "julia" "1.8.5"
|
|
||||||
install_lang "zig" "0.10.1"
|
|
||||||
install_lang "vlang" "0.3.3"
|
|
||||||
install_lang "d" "10.2.0" # GDC
|
|
||||||
install_lang "groovy" "3.0.7"
|
|
||||||
install_lang "cobol" "3.1.2"
|
|
||||||
install_lang "fsharp" "5.0.201"
|
|
||||||
install_lang "prolog" "8.2.4" # SWI-Prolog
|
|
||||||
install_lang "r" "4.1.1"
|
|
||||||
|
|
||||||
# Low-level / Assembly
|
|
||||||
echo "=== Low-level ==="
|
|
||||||
install_lang "nasm" "2.15.5" # x86/x64 Assembly
|
|
||||||
|
|
||||||
# Shell scripting
|
|
||||||
echo "=== Shell ==="
|
|
||||||
install_lang "bash" "5.1.0"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "=== Installation Complete ==="
|
|
||||||
echo "Installed languages:"
|
|
||||||
piston ppman list
|
|
||||||
Loading…
Reference in New Issue
Block a user