Skip to content
Cristian Gonzalez edited this page Jul 8, 2021 · 2 revisions

UNCode Grading containers

Given the architecture of UNCode, it is possible to plug in new grading containers (Docker), these containers are in charge of running the students' submissions. We have developed three new grading environments and each one is in charge of grading a different type of tasks: multiple languages, HDL and Notebook tasks. The corresponding containers are in the repository JuezUN/INGInious-containers, also the Docker images are stored on Docker hub.

Containers

A grading container is a container that executes a submission and generates feedback and a grade from it. It typically runs a script, which for the case of UNCode, is created automatically by the grader generator plugin. A submission is sent to a grading container and it starts running their code against some given tests, every test runs in a sub-container, launched from the grader container, that secures the grading code avoiding the student can interact with it (sandbox). The containers, are called student containers, are started using a provided API run_student.

The developed grading containers, follow a series of hierarchy as they share some functionalities across the different containers. Below is a diagram that shows this hierarchy for all containers. Here are explained each container:

containers_hierarchy

The code related to this container is in the main repository. This container contains all the logic to run the submissions and send back the feedback to the student. Also, provides all utilities to start the run_student container (sandbox). This container is developed by the INGInious team.

This container is not directly in charge of evaluating a student's submission, it contains code that all the other grading containers use to evaluate the submission in the correct environment, some classes are created to standardize the way the submissions are evaluated. Find the code here.

This container is in charge of evaluating multiple language submissions that include C, C11, C++, C++11, Java 7/8 and Python3, as well as custom input executions. Here are accepted either single code submission or file project submissions. Find the code here.

As this container inherits from the multilang container, it uses the same code as in multilang, the difference of this container is that it allows submissions that uses python modules, commonly used in data science such as: Pandas, NumPy, among others. The Dockerfile is here.

Container in charge of grading Jupyter Notebook submissions, for that, it receives a .ipynb file with the student's code and it is executed against test cases (see How to create a task). Then, this is a different grading environment which can be selected in the task settings on UNCode. Check the source code.

Submissions with Verilog and VHDL code are graded inside this container. The code is here.

Contributing

Check the repository JuezUN/INGInious-containers to learn how to start contributing to this repository, also, check the documentation: How to create a new container in case a new a new grading environment is needed.

Clone this wiki locally