Bewertung vom Autograding in Moodle übernehmen
Voraussetzungen
GitHub Benutzername im Moodle-Profil
Die Lernenden müssen Ihren GitHub-Benutzernamen in ihrem Moodle-Profil eintragen. Unter „GitHub Classroom“ befindet sich das Feld „GitHub Benutzername“.
Workflow in Template
- Erstelle eine Kopie des Repositorys „BZZ-Common/pyhton-template“ um alle benötigten Dateien zu erhalten:
.github/workflows/classroom.yml.github/workflows/copyissues.yml(wird für das automatische Bewerten nicht benötigt).github/classroom/autograding.json
- Alternativ kannst du die Dateien/Ordner auch manuell erstellen:
- Öffne das Repository mit dem Template für das Assignment.
- Erstelle die Ordner
.github/classroomund.github/workflows. - Erstelle die Datei
classroom.ymlin.github/workflows.
name: GitHub Classroom Workflow on: push permissions: checks: write issues: write actions: read contents: read jobs: copy-issues: if: ${{ contains(github.actor, 'classroom') }} uses: BZZ-Commons/workflows/.github/workflows/setup.yml@main with: SOURCE_REPO: templates-python/m319_lu04_a00_classroom # CHANGE owner/name of the repo with the issues TARGET_REPO: ${{ github.repository }} ADD_LABELS: "false" secrets: GHSECRET: ${{ secrets.GITHUB_TOKEN }} grading: if: ${{ !contains(github.actor, 'classroom') }} uses: BZZ-Commons/workflows/.github/workflows/grading.yml@main with: MOODLE: false # CHANGE true=export grade to moodle secrets: inherit - Erstelle die Datei
autograding.jsonin.github/classroom. - Füge deine Testfälle in diese Datei ein.
Beispiel für Testfälle
{
"tests": [
{
"name": "test_main1",
"setup": "sudo -H pip3 install -r requirements.txt",
"run": "pytest -v -k \"test_main1\"",
"input": "",
"output": "",
"comparison": "included",
"timeout": 10,
"points": 1
},
{
"name": "test_main2",
"setup": "sudo -H pip3 install -r requirements.txt",
"run": "pytest -v -k \"test_main2\"",
"input": "",
"output": "",
"comparison": "included",
"timeout": 10,
"points": 1
}
]
}
Classroom Assignment
- Erstelle ein neues Assignment in GitHub Classroom.
- Der Name des Assignments wird in Kleinbuchstaben und snake_case geschrieben.
- GitHub Classroom zeigt den Prefix an, welcher für die Repositories der Lernenden verwendet wird: Zum Beispiel „m319-lu08-a01-multiply“.
- Wähle das Template aus dem letzten Abschnitt aus.
Der Prefix für die Repos ist nicht immer 1:1 der Name des Classrooms. Aktuell (Juli 2023) werden offenbar Underscores durch Bindestriche ersetzt.
Aufgabe in Moodle
- Erstelle eine Aufgabe in Moodle.
- Trage den Namen des Classroom Assignments unter „GitHub Classroom“ ⇒ „Classroom Assignment“ ein.
TODO Das Assignment sollte wie das Repo Kleingeschrieben werden.
Technische Doku
Activity modules
| Anzeige | Short name | fieldid |
|---|---|---|
| Classroom Assignment | classroom_assignment | 2 |
| Classroom Template | classroom_template | ? |
| GitHub Template | gh_template | ? |
| Classroom Link | classroom_link | ? |
mdl_customfield_field
- id
- shortname
mdl_customfield_data
- id
- fieldid (FK zu mdl_customfield_field)
- instanceid (FK courseid)
- value
Course
| Anzeige | Short name | fieldid |
|---|---|---|
| GitHub Classroom | classroom_name | 1 |
mdl_customfield_field
- id
- shortname
mdl_customfield_data
- id
- fieldid (FK zu mdl_customfield_field)
- instanceid (FK courseid)
- value
User
| Anzeige | Short name | fieldid |
|---|---|---|
| GitHub Benutzername | github_username | 1 |
mdl_user_info_field
- id
- shortname
mdl_user_info_data
- userid
- fieldid (FK auf id in mdl_user_info_field)
- data
mdl_assignfeedback_comments
- id
- assignment (FK auf id in mdl_assign)
- grade
- commenttext
- commentformat
Use Cases
Bewertung aus Repo übernehmen (Umgesetzt)
Lernender macht einen Push ins Repository. Die GitHub Actions bewerten die Abgabe und vergeben eine Punktzahl.
- Workflow-Step in GitHub Actions
- FGIT API
- Pythonscript via CRON
Classroom anlegen
Im Moodle-Kurs wird der Classroom-Name (owner/name) eingetragen.
- Prüfen ob der Classroom existiert
- Falls nein: Anlegen des Classrooms
- Loop über Teilnehmer
- In Classroom als Student eintragen (falls noch nicht existiert.
Probleme
- Kein API / CLI von GitHub verfügbar
- Eintragen der Teilnehmer bei Änderungen an den Teilnehmern, z.B. neuer Lernender
Assignment im Classroom erstellen
In der Moodle-Aktivität (z.B. Aufgabe) wird ein Template-Repo eingetragen.
- Lesen des Classrooms aus Kurs
- Prüfen ob ein Assignement mit diesem Namen existiert
- Falls nein:
- Assignment anlegen
- Link zum Assignment in Moodle-Aktivität übertragen
Probleme
- Kein API / CLI von GitHub vorhanden

