Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| howto:git:classroom50:moodle_simple [2026/08/25 09:53] – [Schritt 1: Den Workflow ins Repo kopieren] admin | howto:git:classroom50:moodle_simple [2026/10/01 11:56] (aktuell) – [4. Testen] aprobst | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== | + | ====== |
| - | **Kurz gesagt:** Die Lernenden geben ihre Aufgabe auf GitHub ab. In der Nacht | + | <WRAP center round tip 60%> |
| - | holt ein Job die Punkte ab und trägt sie in Moodle ein. Du musst dafür nichts | + | Diese Seite erklärt, wie die Noten aus Classroom 50 automatisch ins |
| - | von Hand starten — aber einmal pro Kurs etwas einrichten. | + | Moodle-Notenbuch kommen. Der Übertrag läuft |
| - | + | von Hand starten. | |
| - | <WRAP center round tip 90%> | + | |
| - | **Die drei Dinge, die stimmen müssen** | + | |
| - | + | ||
| - | - In Moodle | + | |
| - | | + | |
| - | - Die Person ist **im Kurs eingeschrieben**. | + | |
| - | + | ||
| - | Stimmt eines davon nicht, kommt die Note nicht an. | + | |
| </ | </ | ||
| - | ===== Schritt 1: Den Workflow ins Repo kopieren | + | ===== Voraussetzungen |
| - | '' | + | * Die Organisation ist in GitHub und Classroom50 erstellt [[.:setup]]. |
| - | '' | + | * Die Klasse |
| - | ('' | + | |
| - | dieser nicht — du kopierst ihn einmal von Hand hinein. | + | |
| - | Die Vorlage liegt im Repo [[https:// | + | ===== 1. Workflow ins Repo kopieren ===== |
| - | im Ordner '' | + | |
| - | <code bash> | + | '' |
| - | cp classroom50/ | + | mitgeliefert. Du kopierst sie einmal pro Config-Repo von Hand hinein — die |
| - | </code> | + | Vorlage liegt im Repository [[https://github.com/BZZ-Commons/pygrader50|BZZ-Commons/ |
| + | im Ordner '' | ||
| - | Danach committen und pushen. Ab jetzt erscheint der Workflow im Config-Repo | + | - Öffne das Repository '' |
| - | unter **Actions → Moodle Sync**. | + | - Kopiere '' |
| + | - Committen. Der Workflow erscheint danach | ||
| - | <WRAP center round important | + | <WRAP center round important |
| - | **Eigener Dateiname, | + | Den Dateinamen so lassen und **keine bestehende |
| - | überschreibt seine mitgelieferten | + | verwenden: Classroom50 |
| - | hineinschreibst, | + | |
| </ | </ | ||
| - | Die Datei gilt für **alle** | + | Die Datei gilt für **alle** |
| - | Klassen braucht also keine zweite | + | mehreren Klassenordnern. |
| - | pygrader50-Tag, | + | |
| + | ===== 2. Zugangsdaten hinterlegen ===== | ||
| - | ===== Schritt 2: Aktivität in Moodle anlegen ===== | + | Ebenfalls im Repo '' |
| - | + | Actions**: | |
| - | Pro Aufgabe **eine** Aktivität vom Typ **External Assignment** | + | |
| - | ('' | + | |
| - | + | ||
| - | Der Name der Aktivität muss **exakt** der Slug der Aufgabe sein, zum Beispiel: | + | |
| - | + | ||
| - | < | + | |
| - | + | ||
| - | Kein zusätzliches Wort, kein Leerzeichen davor oder dahinter. Am besten den | + | |
| - | Slug kopieren und einfügen. | + | |
| - | + | ||
| - | ===== Schritt 3: GitHub-Login im Moodle-Profil ===== | + | |
| - | + | ||
| - | Jede lernende Person trägt ihren GitHub-Login im eigenen Moodle-Profil ein, | + | |
| - | im Feld //GitHub Classroom// | + | |
| - | + | ||
| - | Wichtig: Der **Moodle-Benutzername spielt keine Rolle**. Gesucht wird nur in | + | |
| - | diesem einen Profilfeld. Welches Feld das ist, legt die Plugin-Einstellung | + | |
| - | '' | + | |
| - | + | ||
| - | ===== Schritt 4: Zugangsdaten hinterlegen ===== | + | |
| - | + | ||
| - | Das machst du **einmal** — und zwar im Repo '' | + | |
| - | Organisation der Lernenden. | + | |
| ^ Art ^ Name ^ Wert ^ | ^ Art ^ Name ^ Wert ^ | ||
| | Secret | '' | | Secret | '' | ||
| - | | Variable | '' | + | | Variable | '' |
| - | | Variable | '' | + | |
| + | Oder im Terminal: | ||
| <code bash> | <code bash> | ||
| Zeile 79: | Zeile 48: | ||
| </ | </ | ||
| - | Für den Token in Moodle einen **eigenen Webservice-Benutzer** anlegen, der nur | + | <WRAP center round important 60%> |
| - | diese eine Funktion ausführen darf. Je weniger der Token kann, desto kleiner | + | Der Token gehört |
| - | der Schaden, falls er einmal ausserhalb landet. | + | Lernenden — damit lassen sich Noten für beliebige Personen setzen. |
| + | </ | ||
| - | ===== Schritt 5: Testen | + | ===== 3. Zuordnung prüfen |
| - | Teste mit einem **echten Login einer lernenden Person**. Dein eigener | + | Damit eine Note ankommt, muss die Person in Moodle gefunden werden: |
| - | Lehrer-Account ist im Kurs meistens kein Teilnehmer — damit schlägt der Test | + | |
| - | fehl, obwohl alles richtig eingerichtet ist. | + | |
| - | Trockenlauf (ändert nichts in Moodle): | + | - Die lernende Person hat ihren **GitHub-Login im Moodle-Profil** eingetragen, |
| + | - Die Person ist **im Moodle-Kurs eingeschrieben**. | ||
| + | - Die Aktivität //external assignment// | ||
| - | <code bash> | + | Der Moodle-Benutzername spielt keine Rolle — gesucht wird nur im Profilfeld. |
| - | gh workflow run moodle-sync.yaml --repo < | + | |
| - | -f classroom=< | + | ===== 4. Testen ===== |
| - | </ | + | |
| - | So sieht es aus, wenn es klappt: | + | Im Repo '' |
| + | Häkchen bei '' | ||
| < | < | ||
| Zeile 105: | Zeile 75: | ||
| </ | </ | ||
| - | ===== Wann läuft der Übertrag? ===== | + | Sieht das gut aus, dasselbe ohne '' |
| + | Einrichtung fertig. | ||
| - | ^ Job ^ Zeit ^ Was er tut ^ | + | <WRAP center round important 60%> |
| - | | '' | + | Zum Testen einen **echten Login einer lernenden Person** nehmen. Der eigene |
| - | | '' | + | Lehrer-Account ist im Kurs meist kein Teilnehmer — der Test scheitert dann, |
| + | obwohl alles richtig eingerichtet ist. | ||
| + | </ | ||
| + | {{: | ||
| - | Zwischen den beiden liegen 40 Minuten, damit der erste Job sicher fertig ist. | + | ===== Ab jetzt automatisch ===== |
| - | Übertragen wird pro Person und Aufgabe immer die **neueste** Abgabe. | + | ^ Wann ^ Was ^ |
| - | übertragen wurde, merkt sich die Datei '' | + | | nachts | Classroom 50 sammelt alle Abgaben ein | |
| - | Übersprungen wird nur, wenn Abgabe //und// Punktzahl gleich geblieben sind — | + | | 04:57 | '' |
| - | eine Nachbewertung derselben Abgabe geht also erneut raus. | + | |
| - | Das kommt in Moodle an: | + | Übertragen wird pro Person und Aufgabe die **neueste** Abgabe, zusammen mit |
| + | Punktzahl, Feedback und Link zur Abgabe. Schon Übertragenes wird übersprungen — | ||
| + | ausser die Punktzahl hat sich geändert. | ||
| - | ^ Moodle-Feld ^ Inhalt ^ | + | Zwischendurch von Hand: **Actions → Moodle Sync → Run workflow**. |
| - | | '' | + | '' |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | + | ||
| - | ===== Von Hand auslösen ===== | + | |
| - | + | ||
| - | Im Repo '' | + | |
| - | + | ||
| - | Eingaben: Classroom, optional Aufgabe und Login, dazu die Schalter | + | |
| - | (nur anzeigen) und '' | + | |
| - | Lässt du den Classroom leer, laufen **alle** Ordner mit einer '' | + | |
| ===== Wenn etwas nicht klappt ===== | ===== Wenn etwas nicht klappt ===== | ||
| - | ^ Meldung / Symptom | + | ^ Meldung / Symptom ^ Das hilft ^ |
| - | | '' | + | | kein Eintrag **Moodle Sync** unter Actions | Schritt 1 nachholen | |
| - | | '' | + | | '' |
| - | | '' | + | | '' |
| - | | Note kommt nicht an, Log sagt „unverändert" | + | | '' |
| - | | Kein Eintrag **Moodle Sync** unter Actions | Workflow-Datei fehlt im Config-Repo | Schritt 1 nachholen | + | | Note kommt nicht an, Log sagt „unverändert" |
| - | | Nachtlauf jede Nacht rot, immer dieselbe Person | alter Eintrag in '' | + | | Nachtlauf jede Nacht rot, immer dieselbe Person | alter Eintrag in '' |
| - | ===== Zum Nachschauen | + | ===== Details |
| - | + | ||
| - | ==== Warum zentral und nicht im Repo der Lernenden? ==== | + | |
| - | + | ||
| - | Mit dem Moodle-Token kann man Noten für **beliebige Personen** setzen. Läge er | + | |
| - | in einem Studi-Repo, könnte ihn ein selbst hinzugefügter Workflow in drei | + | |
| - | Zeilen auslesen. Genau so war es unter GitHub Classroom | + | |
| - | ('' | + | |
| - | Workflow '' | + | |
| - | Bewertungs-Job weiter. | + | |
| - | + | ||
| - | ==== Warum nachts und nicht bei jedem Push? ==== | + | |
| - | + | ||
| - | Der direkte Weg hätte einen Token in jedem Studi-Repo gebraucht, eine eigene | + | |
| - | Workflow-Datei pro Repo, eine nachgebaute Skip-Logik und rund 33 % mehr | + | |
| - | Actions-Minuten — und einen Nacht-Fallback hätte es trotzdem gebraucht. | + | |
| - | + | ||
| - | ==== Lokal prüfen, ohne Zugangsdaten ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | gh api repos/< | + | |
| - | -H ' | + | |
| - | GH_TOKEN=$(gh auth token) python -m pygrader50.moodle scores.json --dry-run | + | |
| - | </ | + | |
| - | Alle Optionen: [[.: | + | * [[https:// |
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[.: | ||