Skip to content

Commit

Permalink
Merge branch 'master' into feat/add-comments
Browse files Browse the repository at this point in the history
  • Loading branch information
BrentBlanckaert committed Nov 16, 2024
2 parents f7a59d9 + f9689ae commit da4c1a3
Show file tree
Hide file tree
Showing 20 changed files with 406 additions and 1,516 deletions.
23 changes: 23 additions & 0 deletions .devcontainer/dev-dependencies.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/bash

# Install dev dependencies
pip install --no-cache-dir --upgrade \
pytest==8.2.1 \
pytest-mock==3.14.0 \
pytest-cov==5.0.0 \
pytest-xdist==3.6.1 \
syrupy==4.6.1 \
black==24.4.2 \
isort==5.13.2 \
pyright==1.1.365


# Install dependencies for the description generator
pip install --no-cache-dir --upgrade \
jinja2==3.1.4\
marko==2.0.3

# add installed packages to path
cat <<EOF >> /home/runner/.bashrc
export PATH=$PATH:/home/runner/.local/bin
EOF
14 changes: 14 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "dodona-tested",
"build": {
"dockerfile": "dodona-tested.dockerfile",
"context": "."
},
"postCreateCommand": "./.devcontainer/dev-dependencies.sh",
"features" : {
// add git to the container
"ghcr.io/devcontainers/features/git:1": {
"version": "latest"
}
}
}
118 changes: 118 additions & 0 deletions .devcontainer/dodona-tested.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# This is the Dockerfile for the tested judge.
# It can be downloaded using docker pull dodona/dodona-tested.

# This docker image is run in our production environment.
# It should not contain any development tools or dependencies.
# Add those to dev-dependencies.sh instead.

FROM python:3.12.4-slim-bullseye

# Set up the environment

# Kotlin
ENV SDKMAN_DIR /usr/local/sdkman
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

# 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

# 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

# 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 \
hlint \
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
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 eslint@8.57 abstract-syntax-tree@2.22

# C# 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
apt-get update
apt-get install -y --no-install-recommends dotnet-sdk-8.0

# Java and 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

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

# 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

COPY main.sh /main.sh
6 changes: 6 additions & 0 deletions .devcontainer/main.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/sh

# kill all child processes on exit
trap "pkill -P $$" EXIT

"$1"
16 changes: 16 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: 2
updates:
- package-ecosystem: docker
directory: "/"
schedule:
interval: monthly
time: "13:00"
timezone: Europe/Brussels
open-pull-requests-limit: 99
- package-ecosystem: "devcontainers"
directory: ".github/workflows"
schedule:
interval: monthly
time: "13:00"
timezone: Europe/Brussels
open-pull-requests-limit: 99
12 changes: 0 additions & 12 deletions .github/dodona-image-integration.dockerfile

This file was deleted.

12 changes: 0 additions & 12 deletions .github/dodona-image.dockerfile

This file was deleted.

26 changes: 26 additions & 0 deletions .github/workflows/build_devcontainer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# this file is used to build the devcontainer image and push it to the docker registry
# it is used to speed up other ci jobs by using the prebuilt image
# this does not create the production image, as that should only be done when merging to main
name: 'Build devcontainer'
on:
workflow_call:

jobs:
build:
runs-on: ubuntu-latest
steps:

- name: Checkout (GitHub)
uses: actions/checkout@v3

- name: Login to Docker Container Registry
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and run Dev Container task
uses: devcontainers/ci@v0.3
with:
imageName: dodona/dodona-tested
imageTag: dev
94 changes: 80 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,101 @@
name: CI

on: [ push ]
on:
push:
pull_request_target:
types: [labeled]

env:
EXERCISES_COMMIT: 31ef0f174efaeba2a37415115e7fd0332573d9b2

jobs:
build_devcontainer:
if: ${{ github.event.action != 'labeled' || (github.event.action == 'labeled' && github.event.label.name == 'run tests') }}
uses: ./.github/workflows/build_devcontainer.yml
secrets: inherit
test:
needs: [build_devcontainer]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main
- run: echo "${GITHUB_WORKSPACE}" >> $GITHUB_PATH
- run: nix build .#simple-tests --print-build-logs
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Run tests in container
uses: devcontainers/ci@v0.3
with:
imageName: dodona/dodona-tested
imageTag: dev
push: never
runCmd: pytest -n auto --cov=tested --cov-report=xml tests/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./result/coverage.xml
lint:
needs: [build_devcontainer]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main
- run: echo "${GITHUB_WORKSPACE}" >> $GITHUB_PATH
- run: nix develop .#format -c poetry run isort --check-only ./tested ./tests
- run: nix develop .#format -c poetry run black --check ./tested ./tests
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Run isort
uses: devcontainers/ci@v0.3
with:
imageName: dodona/dodona-tested
imageTag: dev
push: never
runCmd: isort --check-only --diff ./tested ./tests
- name: Run black
uses: devcontainers/ci@v0.3
with:
imageName: dodona/dodona-tested
imageTag: dev
push: never
runCmd: black --check ./tested ./tests
types:
needs: [build_devcontainer]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: DeterminateSystems/nix-installer-action@main
- uses: DeterminateSystems/magic-nix-cache-action@main
- run: echo "${GITHUB_WORKSPACE}" >> $GITHUB_PATH
- run: nix develop .#types -c pyright ./tested ./tests
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Run pyright
uses: devcontainers/ci@v0.3
with:
imageName: dodona/dodona-tested
imageTag: dev
push: never
runCmd: pyright ./tested ./tests
# check if the JS exercises still work.
javascript-dodona:
needs: [build_devcontainer]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- run: |
echo "$JAVASCRIPT_EXERCISES_KEY" > private
chmod 0600 private
GIT_SSH_COMMAND='ssh -o "StrictHostKeyChecking no" -i private' git clone git@github.ugent.be:Scriptingtalen/javascript-oefeningen.git
rm private
env:
JAVASCRIPT_EXERCISES_KEY: ${{ secrets.JAVASCRIPT_EXERCISES_KEY }}
- run: git checkout $EXERCISES_COMMIT
working-directory: ./javascript-oefeningen
- name: Run tests in container
uses: devcontainers/ci@v0.3
env:
EXERCISE_REPO: javascript-oefeningen
with:
imageName: dodona/dodona-tested
imageTag: dev
push: never
runCmd: pytest -x -n auto tests/test_integration_javascript.py
env: |
EXERCISE_REPO
6 changes: 6 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,12 @@ on:
- '**/*.txt'
schedule:
- cron: "18 21 2 * *"
pull_request_target:
types: [labeled]

jobs:
analyze:
if: ${{ github.event.action != 'labeled' || (github.event.action == 'labeled' && github.event.label.name == 'run tests') }}
name: Analyze
runs-on: ubuntu-latest
permissions:
Expand All @@ -23,6 +26,9 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}

- name: Initialize CodeQL
uses: github/codeql-action/init@v2
Expand Down
Loading

0 comments on commit da4c1a3

Please sign in to comment.