Dies ist eine alte Version des Dokuments!
Migration von GitHub Classroom auf Classroom 50
Diese Seite beschreibt, was beim Umstieg einer bestehenden Klasse zu tun ist. Ein neues Klassenzimmer von Grund auf: Einrichtung.
Solange beide Wege parallel installiert sind, laufen bei jedem Push zwei Autograder nebeneinander — der alte scheitert dabei am Moodle-Aufruf. Die Migration ist erst mit Schritt 2 abgeschlossen.
Was sich ändert
| vorher | nachher | |
|---|---|---|
| Bewertung ausgelöst von | .github/workflows/classroom.yml im Studi-Repo | zentralem autograde-runner.yaml |
| Bewertungs-Logik | BZZ-Commons/pygrader | BZZ-Commons/pygrader50, per Tag gepinnt |
| Moodle-Übertrag | direkt aus dem Studi-Repo | nachts, zentral aus dem Config-Repo |
| Moodle-Token | in der Org, per secrets: inherit überall lesbar | nur im Config-Repo |
| Zuordnung zu Moodle | GitHub-Name im Moodle-Profil | Moodle-Benutzername = GitHub-Login |
| Konfigurationsdateien | .github/autograding/ | Bundle im Config-Repo, .github/autograding/ bleibt Fallback |
Die drei Dateien unittests.json, lint.json und pylintrc behalten ihr
Format. Es ist kein Umschreiben der Aufgaben nötig.
1. Klassen-Default setzen
Erst wenn <CLASSROOM>/autograder.py im Config-Repo liegt, bewertet
Classroom 50 überhaupt etwas — vorher liefert es überall 0/0.
Ablauf und Prüfungen: Einrichtung, Schritt 2.
2. Alten Workflow entfernen
2.1 Was raus muss
.github/workflows/classroom.yml. Zwei Jobs stecken darin:
| Job | Was damit passiert |
|---|---|
grading | ruft den alten pygrader-Workflow — ersetzt durch Classroom 50 |
copy-issues | läuft nur unter if: contains(github.actor, ''classroom)'', also nur beim GitHub-Classroom-Bot; unter Classroom 50 feuert er nie |
Ein separates copyissues.yml mit workflow_dispatch macht dasselbe
manuell. Beim Löschen von classroom.yml geht also keine Funktion
verloren.
2.2 Was bleiben muss
.github/autograding/ mit unittests.json, lint.json und pylintrc
— das ist der Fallback, solange nicht jede Aufgabe ein Bundle im Config-Repo
hat.
requirements.txt und Hilfsskripte wie _run_pylint.py stören nicht,
werden aber nicht mehr benutzt: pygrader50 installiert die Studi-Abhängigkeiten
bewusst nicht.
2.3 Die Zielliste richtig bilden
Nicht die Repos der Template-Organisation auflisten. Dort liegen auch Templates von Modulen, die noch auf dem alten Pfad laufen — ihnen den Workflow zu nehmen, stoppt dort still die Bewertung.
Massgeblich ist der template-Block in <CLASSROOM>/assignments.json:
gh api repos/<ORG>/classroom50/contents/<CLASSROOM>/assignments.json \ -H 'Accept: application/vnd.github.raw' \ | jq -r '.assignments[] | "\(.template.owner)/\(.template.repo)"' | sort -u
2.4 Ausführen
scripts/remove-legacy-classroom-yml.sh <ORG> <CLASSROOM> # Trockenlauf scripts/remove-legacy-classroom-yml.sh <ORG> <CLASSROOM> --apply # löschen
Das Skript nimmt die Liste aus 2.3 und ergänzt die bereits angenommenen
Studi-Repos. Es ist wiederholbar; fehlende Dateien meldet es als absent.
Template-Änderungen erreichen bestehende Repos nicht. Ein Studi-Repo trägt seine Kopie aus dem Moment der Annahme — deshalb behandelt das Skript beide Seiten. Umgekehrt sind Repos früherer Klassen, die dasselbe Template benutzt haben, von der Template-Änderung nicht betroffen.
3. Alten Moodle-Token entwerten
Sicherheitsrelevant. Der alte Workflow reichte den Moodle-Token per
secrets: inherit an den Bewertungs-Workflow weiter. Jede Person mit
Schreibrecht auf ein Studi-Repo konnte ihn mit drei Zeilen auslesen — und der
Token kann Noten für beliebige Personen setzen.
- Secret in allen betroffenen Organisationen löschen — typischerweise die Studi-Org und die Template-Org. Namen prüfen: es gibt
MOODLE_TOKENundMOODLE_TOKEN2. - Den Token in Moodle neu erzeugen und den alten invalidieren. Löschen allein beendet nur die künftige Exposition, nicht die vergangene.
gh secret list --org <ORG>
4. Moodle-Seite umstellen
Unter GitHub Classroom trugen die Lernenden ihren GitHub-Namen im Moodle-Profil ein. Classroom 50 vergleicht stattdessen direkt Moodle-Benutzername und GitHub-Login. Vor dem ersten echten Übertrag prüfen, ob das für alle Teilnehmenden zutrifft.
Der Rest — Aktivität External Assignment, Slug als Name, Token im Config-Repo — steht unter Noten nach Moodle übertragen.
5. Prüfen, dass wirklich umgestellt ist
- In einem Studi-Repo pushen: Es startet genau ein Bewertungslauf.
- Das Release zeigt eine echte Punktzahl, nicht
0/0. gh secret list –org <ORG>listet keinen Moodle-Token mehr.- Ein
moodle-sync-Trockenlauf zeigt die erwarteten Personen und Punkte.