diff --git a/dev-requirements.txt b/dev-requirements.txt index 8aca38b..44194bc 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,3 +1,6 @@ pytest pytest-asyncio pyyaml +httpx +starlette +aiodocker \ No newline at end of file diff --git a/livecode_server/config.py b/livecode_server/config.py index ee0d0cd..dd46312 100644 --- a/livecode_server/config.py +++ b/livecode_server/config.py @@ -15,6 +15,11 @@ "command": [], "code_filename": "main.py" }, + "javascript": { + "image": "frappedevs/falcon-javascript:latest", + "command": [], + "code_filename": "main.js" + }, "rust": { "image": "fossunited/falcon-rust", "command": [], diff --git a/runtimes/javascript/Dockerfile b/runtimes/javascript/Dockerfile new file mode 100644 index 0000000..15ed33e --- /dev/null +++ b/runtimes/javascript/Dockerfile @@ -0,0 +1,7 @@ +FROM node:18 +WORKDIR /app +RUN mkdir -p /opt/modes +COPY run.sh /opt/ +COPY modes/exec.sh /opt/modes/ +RUN chmod +x /opt/run.sh /opt/modes/exec.sh +ENTRYPOINT ["/opt/run.sh"] diff --git a/runtimes/javascript/modes/exec.sh b/runtimes/javascript/modes/exec.sh new file mode 100644 index 0000000..d96ef00 --- /dev/null +++ b/runtimes/javascript/modes/exec.sh @@ -0,0 +1,3 @@ +#!/bin/sh +SOURCE_FILE=${FALCON_SOURCE_FILE:-"main.js"} +node "$SOURCE_FILE" diff --git a/runtimes/javascript/run.sh b/runtimes/javascript/run.sh new file mode 100644 index 0000000..290cbaf --- /dev/null +++ b/runtimes/javascript/run.sh @@ -0,0 +1,12 @@ +#! /bin/sh +TIMEOUT=10 +SOURCE_FILE=${FALCON_SOURCE_FILE:-"main.js"} +MODE=${FALCON_MODE:-"exec"} +SCRIPT=/opt/modes/$MODE.sh + +if [ -x "$SCRIPT" ]; then + exec timeout $TIMEOUT $SCRIPT "$@" +else + echo "ERROR: invalid mode - $MODE" 1>&2 + exit 1 +fi diff --git a/tests/runtimes/test_javascript_hello.yml b/tests/runtimes/test_javascript_hello.yml new file mode 100644 index 0000000..4aaf832 --- /dev/null +++ b/tests/runtimes/test_javascript_hello.yml @@ -0,0 +1,3 @@ +runtime: javascript +code: console.log("hello, world!") +expected_output: "hello, world!\n" \ No newline at end of file