Builds and Dependency Management
General Structure of Programming Exercise Execution
Artemis uses docker containers to run programming exercises. This ensures that the students' code does not have direct access to the build agents' hardware. To reduce the time required for each test run, these docker containers already include commonly used dependencies such as JUnit.
There are currently docker containers for:
- Maven (Java and Kotlin)
- OCaml
- Python
- C
- Swift
- Haskell (external)
- Assembler (external)
- VHDL (external)
Steps for Updating the Docker Builds used in Artemis
Updating can only be done with access to the account on Docker Hub. If you need access, contact Stephan Krusche.
-
Update the dependencies via a pull request in the repository of the docker container. Each docker container has its own repository as listed above.
-
After the PR got merged, go to the build overview on Docker Hub:
- Choose the correct repository on Docker Hub
- Go to the "Builds" tab of that repository
-
Wait for a successful build of "latest"
-
Click "Configure Automated Builds" and create a new build rule for a new tag, following the naming scheme:
<programming language><Version of programming language>-<Upwards counting number>, for examplejava17-25- The "Sourcetype" should be "Tag"
- This tag should be used as "Source Tag" and "Docker Tag"

-
Go back to the repository of the docker container in GitHub and create a new Tag
- Click "Releases" on the right on the front page of that repository
- Create a new release with the button called "Draft release" and give it the same name as in step 4
-
Wait for the build in Docker Hub of the newly created Tag
-
Change the docker image used in Artemis to the newly created tag: application.yml
-
If the used docker container should also be changed for already created exercises you have to change the build plan of that exercise
- Change the docker image used by following this path: Configure Buildplan > Default Job > Docker > Docker Image