From f420a35fe0184d851ef237a2a6442c143bda7f9b Mon Sep 17 00:00:00 2001 From: Armin Friedl Date: Tue, 15 Dec 2020 03:52:07 +0100 Subject: [PATCH] Init --- Dockerfile | 47 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 10 ++++++++++ luke.png | Bin 0 -> 110301 bytes 4 files changed, 101 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100755 entrypoint.sh create mode 100644 luke.png diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..250182f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,47 @@ +FROM debian + +# Prepare image and install dependencies +ENV LANG=C.UTF-8 +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get upgrade -y + +RUN apt-get install -y flex bison build-essential \ + csh libxaw7-dev wget \ + libc6-i386 default-jdk + +# Install student dist + +# Note that this is _not_ what is in the `/usr/class/cs143` subdirectory in the +# VM! The `cs143` contains make files that generate the assignments in an +# arbitrary folder from skeleton files. Essentially this step was already done +# in the `student-dist.tar.gz`. The assignments just have to be completed and +# submitted in the respective /class/assignments/PA* subdirectories. + +# Prepare the immutable distribution +RUN mkdir -p /usr/class \ + && wget https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@student-dist.tar.gz -P /tmp \ + && tar xzf "/tmp/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@student-dist.tar.gz" -C /usr/class +ENV PATH=/usr/class/bin:$PATH + +# Download submission scripts +RUN wget -O - https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@pa1-grading.pl \ + | tee /usr/class/assignments/PA2J/grade.pl /usr/class/assignments/PA2/grade.pl > /dev/null + +RUN wget -O - https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@pa2-grading.pl \ + | tee /usr/class/assignments/PA3J/grade.pl /usr/class/assignments/PA3/grade.pl > /dev/null + +RUN wget -O - https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@pa3-grading.pl \ + | tee /usr/class/assignments/PA4J/grade.pl /usr/class/assignments/PA4/grade.pl > /dev/null + +RUN wget -O - https://courses.edx.org/asset-v1:StanfordOnline+SOE.YCSCS1+1T2020+type@asset+block@pa4-grading.pl \ + | tee /usr/class/assignments/PA5J/grade.pl /usr/class/assignments/PA5/grade.pl > /dev/null + +# Setup working directory +RUN mkdir -p /class +WORKDIR /class + +# Run entrypoint to connect working directory to mounted host volume +COPY entrypoint.sh /usr/bin/entrypoint.sh +ENTRYPOINT ["entrypoint.sh"] +CMD ["/bin/bash"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..3a8cb10 --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Lukewarm and the Cool +One day [Cool](https://en.wikipedia.org/wiki/Cool_(programming_language)) +compiled another +[`fact`](https://en.wikipedia.org/wiki/Cool_(programming_language)#Examples) and +suddenly got very sad. It was about its buddy +[Bodhi](https://www.bodhilinux.com/). Bodhi 1.4.0 (!!) was ancient and tired. +Its mirrors broke a long time ago an it just wanted to retire. + +Cool on the other hand was still full of verve and vim. So it went looking for a +new companion. Soon enough Lukewarm entered its life. Lukewarm was a slick, +quick-witted, up-to-date container and they immediately got along well. + +They lived happily ever after. The End. + +![](luke.png) + +_Totally unrelated image of a cowboy from [pngwing.com](https://www.pngwing.com/en/free-png-ydaxh)_ + +# Uhm?! +In short: If you are working through the [edX +Compilers](https://www.edx.org/course/compilers) course you probably want +Lukewarm instead of the Bodhi VM. It provides all the tools you need for +developing your Cool compiler in an up-to-date container image. + +# Features +Lukewarm is tailored for working through the Cool assignments. It also has +several improvements over the provided [Bhodi](https://www.bodhilinux.com/) VM: +- All dependencies are pre-installed +- All `Cool` tools, scripts and binaries +- Grading scripts are pre-installed and can be executed directly (no workarounds + like in the VM) +- Work locally with your favourite tools, then compile and submit from within + the container +- Predictable and lightweight +- Use it with CI/CD +- It's based on an up-to-date debian image so you can `apt-get` what you need + +# Usage + +```shell +docker run -it -v $PWD:/class arminfriedl/lukewarm +``` + +At first start this will set up all assignments in `$PWD`. diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..ce652bb --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# Copy immutable dist to work folder if it exists and is empty +if [ -d "/class" ] && [ -z "$(ls -A /class)" ]; then + cp -R /usr/class/* /class/ +fi + +exec "$@" diff --git a/luke.png b/luke.png new file mode 100644 index 0000000000000000000000000000000000000000..eb1261becad6f134057058c2ea0f68bb93e83d2e GIT binary patch literal 110301 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