diff --git a/api/main.go b/api/main.go index 486f060..5c99b2c 100644 --- a/api/main.go +++ b/api/main.go @@ -84,11 +84,13 @@ func Execute(res http.ResponseWriter, req *http.Request) { "lua", "nasm", "asm", "nasm64", "asm64", + "nim", "node", "javascript", "js", "perl", "pl", "php", "python2", "python3", "python", + "paradoc", "ruby", "rust", "swift", diff --git a/lxc/execute b/lxc/execute index 9752781..c6bb189 100755 --- a/lxc/execute +++ b/lxc/execute @@ -90,12 +90,18 @@ case "$lang" in "nasm64" | "asm64") bin=nasm64 ;; +"nim") + bin=nim + ;; "node" | "js" | "javascript") bin=node ;; "deno" | "denojs" | "denots") bin=deno ;; +"paradoc") + bin=paradoc + ;; "perl") bin=perl ;; diff --git a/lxc/executors/java b/lxc/executors/java index 822e67d..66261bb 100755 --- a/lxc/executors/java +++ b/lxc/executors/java @@ -1,6 +1,6 @@ cd /tmp/$2 cp code.code interim.java -name=$(cat interim.java | grep -Eo 'public\s+class\s+([A-Za-z0-9]+)' | sed -n 's/ */ /gp' | cut -d' ' -f3) +name=$(grep -Po "(?<=\n|\A)\s*(public\s+)?(class|interface)\s+\K([^\n\s{]+)" interim.java) mv interim.java $name.java timeout -s KILL 10 javac $name.java runuser runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 java $name" diff --git a/lxc/executors/nim b/lxc/executors/nim new file mode 100755 index 0000000..c6e6caf --- /dev/null +++ b/lxc/executors/nim @@ -0,0 +1,4 @@ +cd /tmp/$2 +timeout -s KILL 10 nim --hints:off c code.code +runuser runner$1 -c "cd /tmp/$2 ; cat args.args | xargs -d '\n' timeout -s KILL 3 ./code" + diff --git a/lxc/executors/paradoc b/lxc/executors/paradoc new file mode 100755 index 0000000..33fe880 --- /dev/null +++ b/lxc/executors/paradoc @@ -0,0 +1,2 @@ +cd /tmp/$2 +runuser runner$1 -c "cd /tmp/$2 ; timeout -s KILL 3 python3 -m paradoc code.code <<< args.args" diff --git a/lxc/test_all_lxc b/lxc/test_all_lxc index fe079e5..a6f2ea7 100755 --- a/lxc/test_all_lxc +++ b/lxc/test_all_lxc @@ -31,6 +31,8 @@ echo 'testing asm 32 bit' ../execute asm test.nasm echo 'testing asm 64 bit' ../execute asm64 test64.nasm +echo 'testing nim' +../execute nim test.nim echo 'testing php' ../execute php test.php echo 'testing perl' @@ -51,3 +53,5 @@ echo 'testing python3' ../execute python3 test3.py echo 'testing common lisp' ../execute sbcl --script test.cl +echo 'testing paradoc' +../execute python3 test_paradoc.py \ No newline at end of file diff --git a/lxc/tests/test.nim b/lxc/tests/test.nim new file mode 100644 index 0000000..bd50e25 --- /dev/null +++ b/lxc/tests/test.nim @@ -0,0 +1 @@ +echo("good") diff --git a/lxc/tests/test_paradoc.py b/lxc/tests/test_paradoc.py new file mode 100644 index 0000000..3acba15 --- /dev/null +++ b/lxc/tests/test_paradoc.py @@ -0,0 +1,5 @@ +try: + import paradoc + print('good') +except: + pass diff --git a/lxc/versions b/lxc/versions index a63fa2d..9d68593 100755 --- a/lxc/versions +++ b/lxc/versions @@ -9,6 +9,10 @@ echo 'bash' lxc-attach --clear-env -n piston -- /bin/bash -l -c "bash --version" echo '---' +echo 'brainfuck' +echo '1.0.0' +echo '---' + echo 'c' lxc-attach --clear-env -n piston -- /bin/bash -l -c "gcc -v" echo '---' @@ -65,6 +69,10 @@ echo 'nasm' lxc-attach --clear-env -n piston -- /bin/bash -l -c "nasm -version" echo '---' +echo 'nim' +lxc-attach --clear-env -n piston -- /bin/bash -l -c "nim -v | head -n1" +echo '---' + echo 'node' lxc-attach --clear-env -n piston -- /bin/bash -l -c "node --version" echo '---' @@ -85,6 +93,10 @@ echo 'python3' lxc-attach --clear-env -n piston -- /bin/bash -l -c "python3 -V" echo '---' +echo 'paradoc' +lxc-attach --clear-env -n piston -- /bin/bash -l -c "python3 -m paradoc --version" +echo '---' + echo 'ruby' lxc-attach --clear-env -n piston -- /bin/bash -l -c "ruby --version" echo '---' diff --git a/readme.md b/readme.md index f02105b..5826d70 100644 --- a/readme.md +++ b/readme.md @@ -85,6 +85,14 @@ ln -s python python3.8 echo 'export PATH=$PATH:/opt/python3/Python-3.8.2' >> /opt/.profile source /opt/.profile +# install paradoc +# this is not a binary, it is a python module +# therefore it cannot be run directly as it requires python3 to be installed +cd /opt && mkdir paradoc && cd paradoc +git clone https://github.com/betaveros/paradoc.git +echo 'export PYTHONPATH=$PYTHONPATH:/opt/paradoc/paradoc' >> /opt/.profile +source /opt/.profile + # install node.js # final binary: /opt/nodejs/node-v12.16.1-linux-x64/bin/node # get version: /opt/nodejs/node-v12.16.1-linux-x64/bin/node -v @@ -179,9 +187,9 @@ source /opt/.profile # final binary: /opt/kotlinc/bin/kotlinc # get version: /opt/kotlinc/bin/kotlinc -version cd /opt -wget https://github.com/JetBrains/kotlin/releases/download/v1.3.72/kotlin-compiler-1.3.72.zip -unzip kotlin-compiler-1.3.72.zip -rm kotlin-compiler-1.3.72.zip +wget https://github.com/JetBrains/kotlin/releases/download/v1.4.10/kotlin-compiler-1.4.10.zip +unzip kotlin-compiler-1.4.10.zip +rm kotlin-compiler-1.4.10.zip echo 'export PATH=$PATH:/opt/kotlinc/bin' >> /opt/.profile source /opt/.profile @@ -246,6 +254,18 @@ source /opt/.profile # important notice: use sbcl --script to run a clisp file, sbcl enters the REPL apt install -y sbcl +# install nim +# final binary: /opt/nim/bin/nim +# get version: /opt/nim/bin/nim -v +cd /opt && mkdir nim && cd nim +wget https://nim-lang.org/download/nim-1.4.0-linux_x64.tar.xz +unxz nim-1.4.0-linux_x64.tar.xz +tar -xf nim-1.4.0-linux_x64.tar +cd nim-1.4.0 +./install.sh /opt +echo 'export PATH=$PATH:/opt/nim/bin' >> /opt/.profile +source /opt/.profile + # create runnable users and apply limits for i in {1..150}; do useradd -M runner$i @@ -363,6 +383,7 @@ If an invalid language is supplied, a typical response will look like the follow - php - python2 - python3 +- paradoc - ruby - rust - swift