From bbb8dd9646bd5caa631a0d528dbf7d39051b9e68 Mon Sep 17 00:00:00 2001 From: Manuel Date: Wed, 12 May 2021 07:47:58 +0200 Subject: [PATCH 1/5] Add lolcode image --- languages/lolcode/Dockerfile | 15 +++++++++++++++ languages/lolcode/run.sh | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 languages/lolcode/Dockerfile create mode 100644 languages/lolcode/run.sh diff --git a/languages/lolcode/Dockerfile b/languages/lolcode/Dockerfile new file mode 100644 index 0000000..9d5897a --- /dev/null +++ b/languages/lolcode/Dockerfile @@ -0,0 +1,15 @@ +FROM alpine as build + +RUN apk add --no-cache build-base git cmake + +WORKDIR /tmp/lci +RUN git clone https://github.com/justinmeza/lci.git . + +RUN cmake . && make + + +FROM alpine +LABEL author="SunRed" + +COPY --from=build /tmp/lci/lci /usr/local/bin +COPY run.sh /var/run/ diff --git a/languages/lolcode/run.sh b/languages/lolcode/run.sh new file mode 100644 index 0000000..82fcf02 --- /dev/null +++ b/languages/lolcode/run.sh @@ -0,0 +1,2 @@ +cat > program.lol +lci program.lol From 50e1a663c829abd93a1a9da778c4ab9ce1fafc05 Mon Sep 17 00:00:00 2001 From: Manuel Date: Wed, 12 May 2021 07:48:10 +0200 Subject: [PATCH 2/5] Add emojicode image --- languages/emojicode/Dockerfile | 57 ++++++++++++++++++++++++++++++++++ languages/emojicode/run.sh | 2 ++ 2 files changed, 59 insertions(+) create mode 100644 languages/emojicode/Dockerfile create mode 100644 languages/emojicode/run.sh diff --git a/languages/emojicode/Dockerfile b/languages/emojicode/Dockerfile new file mode 100644 index 0000000..818bc71 --- /dev/null +++ b/languages/emojicode/Dockerfile @@ -0,0 +1,57 @@ +FROM debian:stable-slim as build + +ENV CC clang-8 +ENV CXX clang++-8 +ENV DEBIAN_FRONTEND=nontinteractive +ENV PYTHONIOENCODING utf8 + +RUN \ + apt-get update && \ + apt-get install -y \ + gnupg \ + wget && \ + echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main" >> /etc/apt/sources.list && \ + echo "deb-src http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main" >> /etc/apt/sources.list && \ + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|apt-key add - && \ + apt-get update && \ + apt-get install -y \ + clang-8 \ + cmake \ + libstdc++-8-dev \ + libclang1-8 \ + libclang-8-dev \ + libclang-common-8-dev \ + libfuzzer-8-dev \ + libllvm8 \ + libncurses-dev \ + libz-dev \ + llvm-8 \ + llvm-8-dev \ + llvm-runtime \ + ninja-build \ + python3 \ + rsync \ + git && \ + rm -rf /var/lib/apt/lists/* && \ + mkdir /tmp/emojicode/ + +WORKDIR /tmp/emojicode/ +RUN git clone https://github.com/emojicode/emojicode.git . +RUN cmake . -GNinja && \ + ninja && \ + ninja magicinstall + + +FROM debian:stable-slim +LABEL author="SunRed" + +ENV CXX=g++ + +RUN apt-get update && \ + apt-get install -y ${CXX} && \ + apt-get autoremove -y && \ + apt-get autoclean -y + +COPY --from=build /usr/local/bin /usr/local/bin +COPY --from=build /usr/local/EmojicodePackages /usr/local/EmojicodePackages +COPY run.sh /var/run/ diff --git a/languages/emojicode/run.sh b/languages/emojicode/run.sh new file mode 100644 index 0000000..26188a7 --- /dev/null +++ b/languages/emojicode/run.sh @@ -0,0 +1,2 @@ +cat > program.emojic +emojicodec program.emojic -o program && ./program From 2a9afa5b25b250d6c413a45bf9b5010987afd905 Mon Sep 17 00:00:00 2001 From: Manuel Date: Wed, 12 May 2021 07:48:28 +0200 Subject: [PATCH 3/5] Add ArnoldC image --- languages/arnoldc/Dockerfile | 9 +++++++++ languages/arnoldc/run.sh | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 languages/arnoldc/Dockerfile create mode 100644 languages/arnoldc/run.sh diff --git a/languages/arnoldc/Dockerfile b/languages/arnoldc/Dockerfile new file mode 100644 index 0000000..214bfc5 --- /dev/null +++ b/languages/arnoldc/Dockerfile @@ -0,0 +1,9 @@ +FROM openjdk:17-alpine +LABEL author="SunRed" + +RUN apk add --no-cache curl && \ + curl -O http://lhartikk.github.io/ArnoldC.jar && \ + mv ArnoldC.jar /var/run && \ + apk del --no-cache curl + +COPY run.sh /var/run/ diff --git a/languages/arnoldc/run.sh b/languages/arnoldc/run.sh new file mode 100644 index 0000000..cdf141f --- /dev/null +++ b/languages/arnoldc/run.sh @@ -0,0 +1,2 @@ +cat > program.arnoldc +java -jar /var/run/ArnoldC.jar program.arnoldc && java program From e54e191f1b074b0a598d6334a2e27ddee9d4491e Mon Sep 17 00:00:00 2001 From: Manuel Date: Fri, 21 May 2021 05:53:13 +0200 Subject: [PATCH 4/5] Check if image exists before building (#12) --- src/Myriad/Docker.hs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Myriad/Docker.hs b/src/Myriad/Docker.hs index e94b809..3e67655 100644 --- a/src/Myriad/Docker.hs +++ b/src/Myriad/Docker.hs @@ -40,13 +40,19 @@ data EvalResult buildImage :: Language -> Myriad () buildImage lang = do env <- ask - logInfo ["Building image ", cs $ imageName lang] - exec_ ["docker build -t ", imageName lang, " ", cs (env ^. #languagesDir) cs (lang ^. #name)] - setupQSems - logInfo ["Built image ", cs $ imageName lang] - when (env ^. #config % #prepareContainers) . void $ setupContainer lang + logInfo ["Checking for image ", cs $ imageName lang] + res <- try $ exec ["docker images -q ", imageName lang] + case res of + Left (SomeException err) -> logError ["An exception occured when checking for image ", cs $ imageName lang, ":\n", cs $ show err] + Right s -> do + when (BL.null s) . void $ do -- If string is empty that means the image does not yet exist + logInfo ["Building image ", cs $ imageName lang] + exec_ ["docker build -t ", imageName lang, " ", cs (env ^. #languagesDir) cs (lang ^. #name)] + logInfo ["Built image ", cs $ imageName lang] + setupQSems + when (env ^. #config % #prepareContainers) . void $ setupContainer lang where - setupQSems :: Myriad () + setupQSems :: Myriad () setupQSems = do env <- ask csem <- newQSem 1 -- We only want one container to be set up at a time From 1205933acdcf7ceb8f3ca901d3382629caeebf1d Mon Sep 17 00:00:00 2001 From: Manuel Date: Mon, 31 May 2021 06:20:21 +0200 Subject: [PATCH 5/5] Update images and reduce their size (#13) * Allow container to be run with custom command * Reduce language image sizes * Update OpenJDK to latest version * Use swc for TypeScript and don't print by default * Update Haskell image and use stable Debian slim * Fix formatting and revert TS changes --- Dockerfile | 2 +- Dockerfile.release | 2 +- languages/brainfuck/Dockerfile | 6 +++--- languages/c/Dockerfile | 3 +-- languages/cpp/Dockerfile | 3 +-- languages/haskell/Dockerfile | 13 ++++++++----- languages/idris/Dockerfile | 3 ++- languages/java/Dockerfile | 2 +- languages/javascript/run.sh | 2 +- languages/lua/Dockerfile | 3 +-- languages/typescript/run.sh | 2 +- 11 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 624994b..fbf8add 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,4 +34,4 @@ COPY --from=build /opt/myriad . EXPOSE 8081 -CMD ["./myriad"] \ No newline at end of file +ENTRYPOINT ["./myriad"] \ No newline at end of file diff --git a/Dockerfile.release b/Dockerfile.release index 95b951b..e5e0c43 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -16,4 +16,4 @@ COPY --from=build /tmp/myriad . EXPOSE 8081 -CMD ["./myriad"] \ No newline at end of file +ENTRYPOINT ["./myriad"] \ No newline at end of file diff --git a/languages/brainfuck/Dockerfile b/languages/brainfuck/Dockerfile index 067f601..34b74b3 100644 --- a/languages/brainfuck/Dockerfile +++ b/languages/brainfuck/Dockerfile @@ -1,12 +1,12 @@ FROM alpine AS build -RUN apk update && apk add g++ COPY bf.cpp . -RUN g++ bf.cpp -o bf +RUN apk add --no-cache g++ && \ + g++ bf.cpp -o bf FROM alpine LABEL author="1Computer1" -RUN apk update && apk add libstdc++ +RUN apk add --no-cache libstdc++ COPY --from=build bf /usr/local/bin/ COPY run.sh /var/run/ diff --git a/languages/c/Dockerfile b/languages/c/Dockerfile index 1324766..862b281 100644 --- a/languages/c/Dockerfile +++ b/languages/c/Dockerfile @@ -1,7 +1,6 @@ FROM alpine LABEL author="1Computer1" -RUN apk update -RUN apk add gcc libc-dev +RUN apk add --no-cache gcc libc-dev COPY run.sh /var/run/ diff --git a/languages/cpp/Dockerfile b/languages/cpp/Dockerfile index 37bc37b..2242843 100644 --- a/languages/cpp/Dockerfile +++ b/languages/cpp/Dockerfile @@ -1,7 +1,6 @@ FROM alpine LABEL author="1Computer1" -RUN apk update -RUN apk add g++ +RUN apk add --no-cache g++ COPY run.sh /var/run/ diff --git a/languages/haskell/Dockerfile b/languages/haskell/Dockerfile index ad6b169..6039727 100644 --- a/languages/haskell/Dockerfile +++ b/languages/haskell/Dockerfile @@ -1,14 +1,17 @@ -FROM debian:stretch +FROM debian:stable-slim LABEL author="1Computer1" ENV LANG C.UTF-8 RUN apt-get update && \ - apt-get install -y --no-install-recommends gnupg dirmngr && \ - echo 'deb http://downloads.haskell.org/debian stretch main' > /etc/apt/sources.list.d/ghc.list && \ + apt-get install -y --no-install-recommends gnupg dirmngr ca-certificates && \ + echo 'deb https://downloads.haskell.org/debian stretch main' > /etc/apt/sources.list.d/ghc.list && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA3CBA3FFE22B574 && \ apt-get update && \ - apt-get install -y --no-install-recommends ghc-8.6.5 + apt-get install -y --no-install-recommends ghc-9.0.1 && \ + apt-get purge -y gnupg dirmngr ca-certificates && \ + apt-get autoremove -y && \ + apt-get autoclean -y -ENV PATH /opt/ghc/8.6.5/bin:$PATH +ENV PATH /opt/ghc/9.0.1/bin:$PATH COPY run.sh /var/run/ diff --git a/languages/idris/Dockerfile b/languages/idris/Dockerfile index 04b8d8f..418b58f 100644 --- a/languages/idris/Dockerfile +++ b/languages/idris/Dockerfile @@ -2,6 +2,7 @@ FROM alpine:latest RUN echo "@testing http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \ apk update && \ - apk add idris@testing + apk add idris@testing && \ + rm -rf /var/cache/apk/* COPY run.sh /var/run/ diff --git a/languages/java/Dockerfile b/languages/java/Dockerfile index dcc0975..e78541e 100644 --- a/languages/java/Dockerfile +++ b/languages/java/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:13-alpine +FROM openjdk:17-alpine LABEL author="1Computer1" COPY run.sh /var/run/ diff --git a/languages/javascript/run.sh b/languages/javascript/run.sh index 6e087ee..faceee1 100644 --- a/languages/javascript/run.sh +++ b/languages/javascript/run.sh @@ -1 +1 @@ -cat | node -p +cat | node diff --git a/languages/lua/Dockerfile b/languages/lua/Dockerfile index 0835675..c15ec01 100644 --- a/languages/lua/Dockerfile +++ b/languages/lua/Dockerfile @@ -1,6 +1,5 @@ FROM alpine -RUN apk update -RUN apk add lua5.3 +RUN apk add --no-cache lua5.3 COPY run.sh /var/run/ diff --git a/languages/typescript/run.sh b/languages/typescript/run.sh index 4d12a04..4fccb05 100644 --- a/languages/typescript/run.sh +++ b/languages/typescript/run.sh @@ -1,4 +1,4 @@ cat > program.ts tsc --lib DOM,ESNext --target ES2019 --strict \ --skipLibCheck --types /usr/local/share/.config/yarn/global/node_modules/@types/node program.ts \ - && cat program.js | node -p + && cat program.js | node