This is an example of a programming course using manytask and checker.
Please refer to manytask and checker documentation first to understand the drill.
In this example Python course will be used, but you can use any language you want, just need to change .checker.yml
and .docker
files (and tasks, of course).
Note: this course template assumes you hold private repo on GitHub and use GitHub-Actions to test and publish, so .github/workflows
folder is used. If you want to hold it on GitLab, you will need to adapt and use .gitlab-ci.private.yml
to test and publish you private code.
manytask
- store and display deadlines and grades, create students' repos.checker
- test students' solutions against private and public tests, push scores to manytask.
private
- private repo with tasks, public/private tests and gold solutions.public
- public repo with tasks, templates and public tests.
flowchart LR
private(Private Repo) -->|checker check| private
private -->|checker export| public
student([Student's Repo]) -->|checker grade| manytask
subgraph gitlab
public(Public Repo) -.->|fork| student
public -->|updates| student
end
Here is important files and folders listed:
├── .checker.yml <- checker config - how to test, export files etc
├── .deadlines.yml <- deadlines config - when to open/close tasks - sent to manytask
│
├── .docker <- docker image with testing environment
├── .dockerignore <- dockerignore file - important to minimize image size
│
├── .github <- github-actions to run in private repo - test and publish to public repo
│ └── workflows
│ ├── publish.yml
│ └── test.yml
├── .gitlab-ci.private.yml <- if using gitlab-ci in private repo
├── .gitlab-ci.yml <- gitlab-ci to run in students' repos - test and push scores
│
├── 1.FirstGroup <- groups with tasks, lectures and reviews
│ ├── .lecture
│ │ └── SampleLectureFile.ipynb
│ ├── .review
│ │ └── SampleReviewFile.ipynb
│ ├── hello_world
│ │ ├── .task.yml
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── hello_world.py
│ │ └── test_public.py
│ └── sum_a_b/...
├── 2.SecondGroup/...
├── 3.ThirdGroup/...
│
├── README.md <- readme with course description visible for students
├── pyproject.toml <- public config with linters, typechecker, formatter etc configs
├── requirements.txt <- public requirements with all stunedts' dependencies
├── tools <- repository with some tools to help in testing, e.g. additional plugins for checker
│ └── plugins
│ └── run_pytest.py
- Install Self-Hosted GitLab or Create main group on GitLab.com
- Install Self-Hosted GitLab runner and connect as a instance runner or shared group runner.
- Create group for your course, enable shared runners. e.g.
gitlab.manytask.org/python
(self-hosted) orgitlab.com/manytask/python
(global). - Create empty public repo for your this year of course, e.g.
.../python/public-2023-fall
. - Create PRIVATE group for students, e.g.
.../python/students-2023-fall/
(for students not to see other repos). - Setup manytask.
- Create private repository with tasks, public/private tests and solutions. Use this repo as a examples.
- Setup private CI to run
checker check
on each push/mr andchecker export
on each push/mr or release or regularly or manually. Also add job to build and PRIVATELY publish docker with testenv and repo. - Setup public CI to run
checker grade
on each push/mr. - Profit!