====== 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".
{{:howto:git:grading:classroom_moodle_user.png?400|}}
===== 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/classroom'' und ''.github/workflows''.
- Erstelle die Datei ''classroom.yml'' in ''.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.json'' in ''.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.
{{:howto:git:grading:classroom_moodle_assignment.png?400|}}
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