Skip to content

Commit

Permalink
Cleanup docker file
Browse files Browse the repository at this point in the history
  • Loading branch information
jorg-vr committed Oct 30, 2024
1 parent 4264b98 commit fae17da
Showing 1 changed file with 99 additions and 62 deletions.
161 changes: 99 additions & 62 deletions .devcontainer/dodona-tested.dockerfile
Original file line number Diff line number Diff line change
@@ -1,73 +1,110 @@
# This is the Dockerfile for the tested judge.
# It can be downloaded using docker pull dodona/dodona-tested.

FROM python:3.12.4-slim-bullseye

# Environment Kotlin
# Set up the environment

# Kotlin
ENV SDKMAN_DIR /usr/local/sdkman
ENV HASKELL_DIR /usr/local/ghcupdir
ENV PATH $SDKMAN_DIR/candidates/kotlin/current/bin:$PATH
ENV PATH $SDKMAN_DIR/candidates/java/current/bin:$PATH
# Haskell
ENV HASKELL_DIR /usr/local/ghcupdir
ENV PATH $HASKELL_DIR/ghc/bin:$PATH
ENV PATH $HASKELL_DIR/cabal:$PATH
# Node
ENV NODE_PATH /usr/lib/node_modules
# Add manual directory for default-jdk
RUN mkdir -p /usr/share/man/man1mkdir -p /usr/share/man/man1 \
&& apt-get update \
# Install additional dependencies
&& apt-get install -y --no-install-recommends \
procps \
dos2unix \
curl \
zip \
unzip \
# Bash language dependencies
bc binutils bsdmainutils cowsay ed figlet file toilet tree vim xxd \
# Dependencies for GHCup
autoconf build-essential zlib1g-dev libgmp-dev \
&& curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb --output packages-microsoft-prod.deb \
&& dpkg -i packages-microsoft-prod.deb \
&& rm packages-microsoft-prod.deb \
# JavaScript dependencies
&& bash -c 'set -o pipefail && curl -fsSL https://deb.nodesource.com/setup_22.x | bash -' \
# Haskell dependencies
&& bash -c "set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_MINIMAL=1 sh" \
&& bash -c "source /root/.ghcup/env && ghcup install ghc 9.6 --isolate $HASKELL_DIR/ghc" \
&& bash -c "source /root/.ghcup/env && ghcup install cabal --isolate $HASKELL_DIR/cabal" \
# Install programming languages \
&& apt-get install -y --no-install-recommends \
# Checkstyle, other Java stuff uses SDKMAN! below
checkstyle \
hlint \
# TESTed C judge dependency
gcc \
cppcheck \
# TESTed Javascript judge dependency
nodejs \
# TESTed bash judge dependency
shellcheck \
# C# dependency
dotnet-sdk-8.0 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
# TESTed Judge depencencies
&& pip install --no-cache-dir --upgrade psutil==5.9.8 attrs==23.2.0 cattrs==23.2.3 jsonschema==4.22.0 typing_inspect==0.9.0 pyyaml==6.0.1 Pygments==2.18.0 python-i18n==0.3.9 pylint==3.0.1 \
# TESTed Kotlin judge dependencies
&& bash -c 'set -o pipefail && curl -s "https://get.sdkman.io?rcupdate=false" | bash' \
&& chmod a+x "$SDKMAN_DIR/bin/sdkman-init.sh" \
&& bash -c "source \"$SDKMAN_DIR/bin/sdkman-init.sh\" && sdk install java 21.0.3-tem && sdk install kotlin" \
&& curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.2.1/ktlint \
&& chmod a+x ktlint \
&& mv ktlint /usr/local/bin \
# JavaScript dependencies
&& npm install -g [email protected] [email protected] \
# Haskell dependencies
&& cabal update \
&& cabal v1-install --global aeson \
# Make sure the students can't find our secret path, which is mounted in
# /mnt with a secure random name.
&& chmod 711 /mnt \
# Add the user which will run the student's code and the judge.
&& useradd -m runner \
&& mkdir /home/runner/workdir \
&& chown -R runner:runner /home/runner/workdir

# Install dependencies
RUN <<EOF
# Update apt-get
apt-get update

# Install general dependencies
apt-get install -y --no-install-recommends \
procps \
dos2unix \
curl \
zip \
unzip

# Java dependencies
apt-get install -y --no-install-recommends checkstyle

# C/C++ dependencies
apt-get install -y --no-install-recommends \
gcc \
cppcheck

# Bash dependencies
apt-get install -y --no-install-recommends \
bc \
binutils \
bsdmainutils \
cowsay \
ed \
figlet \
file \
toilet \
tree \
vim \
xxd \
shellcheck

# Haskell dependencies
apt-get install -y --no-install-recommends \
autoconf \
build-essential \
zlib1g-dev \
libgmp-dev
bash -c "set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_MINIMAL=1 sh"
bash -c "source /root/.ghcup/env && ghcup install ghc 9.6 --isolate $HASKELL_DIR/ghc"
bash -c "source /root/.ghcup/env && ghcup install cabal --isolate $HASKELL_DIR/cabal"
cabal update
cabal v1-install --global aeson

# JavaScript dependencies
curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb --output packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
bash -c 'set -o pipefail && curl -fsSL https://deb.nodesource.com/setup_22.x | bash -'
apt-get install -y --no-install-recommends nodejs
npm install -g [email protected] [email protected]

# C# dependencies
apt-get install -y --no-install-recommends dotnet-sdk-8.0

# Python dependencies
pip install --no-cache-dir --upgrade \
psutil==5.9.8 \
attrs==23.2.0 \
cattrs==23.2.3 \
jsonschema==4.22.0 \
typing_inspect==0.9.0 \
pyyaml==6.0.1 \
Pygments==2.18.0 \
python-i18n==0.3.9 \
pylint==3.0.1

# Kotlin dependencies
bash -c 'set -o pipefail && curl -s "https://get.sdkman.io?rcupdate=false" | bash'
chmod a+x "$SDKMAN_DIR/bin/sdkman-init.sh"
bash -c "source \"$SDKMAN_DIR/bin/sdkman-init.sh\" && sdk install java 21.0.3-tem && sdk install kotlin"
curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.2.1/ktlint
chmod a+x ktlint
mv ktlint /usr/local/bin

# Clean up apt caches
apt-get clean
rm -rf /var/lib/apt/lists/*

# Setup permissions and user
chmod 711 /mnt
useradd -m runner
mkdir /home/runner/workdir
chown -R runner:runner /home/runner/workdir
EOF

USER runner
WORKDIR /home/runner/workdir
Expand Down

0 comments on commit fae17da

Please sign in to comment.