diff --git a/docker-compose.yml b/docker-compose.yml index c14a9ab..eec4f7c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,6 +26,10 @@ services: - "2000:2000" privileged: true restart: unless-stopped + entrypoint: ["/bin/bash", "/piston-init/entrypoint.sh"] + volumes: + - ./piston/entrypoint.sh:/piston-init/entrypoint.sh:ro + - piston_packages:/piston/packages tmpfs: - /piston/jobs:exec,mode=777 @@ -72,3 +76,4 @@ services: volumes: postgres_data: + piston_packages: diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index ef3f5ec..5172cd2 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -35,7 +35,7 @@ const features = [ }, { icon: Code2, - title: "60+ языков", + title: "30+ языков", description: "Python, C++, Java, JavaScript, Go, Rust и многие другие языки", color: "text-green-500", bgColor: "bg-green-500/10", @@ -151,7 +151,7 @@ export default function HomePage() { className="mt-20 grid grid-cols-2 md:grid-cols-4 gap-8 max-w-4xl mx-auto" > {[ - { value: "60+", label: "Языков программирования" }, + { value: "30+", label: "Языков программирования" }, { value: "∞", label: "Контестов" }, { value: "100%", label: "Автопроверка" }, { value: "24/7", label: "Доступность" }, diff --git a/piston/entrypoint.sh b/piston/entrypoint.sh new file mode 100644 index 0000000..b706de1 --- /dev/null +++ b/piston/entrypoint.sh @@ -0,0 +1,82 @@ +#!/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/pkg/piston/piston_api diff --git a/scripts/install-piston-languages.sh b/scripts/install-piston-languages.sh new file mode 100755 index 0000000..a948863 --- /dev/null +++ b/scripts/install-piston-languages.sh @@ -0,0 +1,93 @@ +#!/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