Case Study: Building and testing programming assignments with Nix
We use Nix to build and test student assignments for a systems programming course that we teach. Many tools have been used by many teachers to automate this kind of task. Some tools support one or more specific programming environments. We speculate that many teachers simply write their own automation scripts, specific to the programming environment they teach in their course. Using Nix, we can decouple the supported programming environments from the automation around them, so that a user can freely specify a programming environment and a tool can provide some artifact, automated workflow or service that uses or provides the specified environment. We have used Nix to build several teaching tools around the same declared environment:
- A grading pipeline which ingests all submissions for a specific assignment after they have been submitted, runs the tests for them and then outputs build logs and test results. This output is then handed over to several tutors for manual inspection.
- A self-updating VM tied to a repo on GitHub, which students can download and use to work on their assignments.
- A working prototype of a Go-based web service where students can upload their assignment submission and get immediate feedback while they are still actively working on it.We have already employed the first two of those processes in practice during the last term.
During our talk:
- We would like to briefly introduce what our tools do for context and motivation.
- We would then pick a few interesting properties from the above list and present our various attempts to achieve them as users of Nix
- In between we would gather different approaches to individual problems we might have not thought of from the audience.
We do have solutions to get some of those properties, but some of our solutions are terrible hacks. We are also still actively working on this project, so we expect to make improvements to some of our current solutions until then.We think that discussing needs that arise when writing tools like this, where individual build steps require additional control and the user cares about other outputs of the process than the build result, would be beneficial for the Nix ecosystem.
Mon 18 OctDisplayed time zone: Central Time (US & Canada) change
13:50 - 15:10
|Case Study: Building and testing programming assignments with Nix|
Martin Schwaighofer JKU Linz, AustriaMedia Attached
|Large-Scale Engineering of Configuration with Unification|
|Six Ways Configuration Systems Fail|
Daniel Spoonhower LightstepMedia Attached
|Experience report: Q&A and discussion|