Skip to content

Allow usage of different graders #4

@nwalters512

Description

@nwalters512

All of Zephyr is currently hardcoded for the Catch grader. We'll need to allow Zephyr to use different graders depending on the course. It's likely that each piece of Zephyr will need a different solution for this.

Student CLI

For student usage, the workflow is simply running zephyr in an assignment directory. So, Zephyr will need to understand how to grade an assignment based only on the directory. For that, I'm thinking a zephyr.yml file in the root of an assignment that names the required grader. We can read that file to determine what to do. We could even be clever like npm and recursively search upward in the filesystem looking for a zephyr.yml file to identify an assignment root.

Staff CLI

This should likely be configurable via the config.yml that Zephyr already expects to set various repo info, rosters, etc. This could maybe also be overridable on a per-assignment basis, with assignment config taking precedence over course config.

PrairieLearn

Given that each course + grader could have a different set of dependencies, my current thought is actually that we'll just build one Docker image per grader. We could provide a plumbing package so that the only thing needed to do to wire up a grader to PL is something very roughly like

import grader from './grader.js'
import plRunner from '@illinois/zephyr-pl-runner'

// grader-specific code here...

plRunner.run(grader);

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions