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 [2026/08/18 12:20] – Sync aus BZZ-Commons/pygrader50: Moodle-Zuordnung über das Profilfeld korrigiert admin | howto:git:classroom50:moodle [2026/08/25 10:06] (aktuell) – Veraltet - Inhalt jetzt unter github.com/BZZ-Commons/pygrader50/docs admin | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Classroom 50: Noten nach Moodle übertragen ====== | ||
| - | |||
| - | Der Übertrag läuft **zentral** aus dem '' | ||
| - | **nachts**, nicht bei jedem Push. | ||
| - | |||
| - | ===== Warum zentral und nachts ===== | ||
| - | |||
| - | Der Moodle-Webservice-Token kann Noten für **beliebige Personen** setzen. In | ||
| - | einem Studi-Repo liest ihn ein selbst hinzugefügter Workflow in drei Zeilen aus. | ||
| - | Genau so lief es unter GitHub Classroom ('' | ||
| - | '' | ||
| - | |||
| - | Technisch geht es unter Classroom 50 auch gar nicht anders: Der zentrale | ||
| - | Reusable Workflow '' | ||
| - | reicht **keine Secrets** an den Bewertungs-Job durch. | ||
| - | |||
| - | Nachts statt bei jedem Push, weil der direkte Weg einen Token in jedem | ||
| - | Studi-Repo, eine eigene Workflow-Datei je Repo, eine nachgebaute Skip-Logik und | ||
| - | rund 33 % mehr Actions-Minuten gekostet hätte — und ein Nacht-Fallback wäre | ||
| - | trotzdem nötig gewesen. | ||
| - | |||
| - | ===== Voraussetzungen auf der Moodle-Seite ===== | ||
| - | |||
| - | - Eine Aktivität vom Typ **External Assignment** ('' | ||
| - | - Ihr Name ist **exakt der Slug** der Aufgabe, z.B. '' | ||
| - | - Der **GitHub-Login steht im Moodle-Profil** der lernenden Person, im Feld //GitHub Classroom// — siehe [[howto: | ||
| - | - Die Person ist im Kurs eingeschrieben. | ||
| - | |||
| - | Welches Profilfeld gelesen wird, steht in der Plugin-Einstellung | ||
| - | '' | ||
| - | Das Plugin sucht ausschliesslich in diesem Feld — der Moodle-Benutzername ist | ||
| - | für die Zuordnung **irrelevant**. | ||
| - | |||
| - | <WRAP center round important 90%> | ||
| - | Zwei Fehlermeldungen, | ||
| - | |||
| - | ^ Meldung ^ Bedeutung ^ | ||
| - | | '' | ||
| - | | '' | ||
| - | |||
| - | Zum Testen deshalb einen echten Studi-Login nehmen — der eigene Lehrer-Account | ||
| - | ist im Kurs meist kein Teilnehmer. | ||
| - | </ | ||
| - | |||
| - | ===== Zugangsdaten ===== | ||
| - | |||
| - | Im **classroom50-Repo**, | ||
| - | |||
| - | ^ Art ^ Name ^ Wert ^ | ||
| - | | Secret | '' | ||
| - | | Variable | '' | ||
| - | | Variable | '' | ||
| - | |||
| - | <code bash> | ||
| - | gh secret | ||
| - | gh variable set MOODLE_URL | ||
| - | </ | ||
| - | |||
| - | Für den Token einen **eigenen Webservice-Benutzer** anlegen, der nur diese eine | ||
| - | Funktion darf. Je enger die Rechte, desto kleiner der Schaden bei einem Leck. | ||
| - | |||
| - | ===== Was übertragen wird ===== | ||
| - | |||
| - | Je Kombination aus Aufgabe und Person geht die **neueste** Abgabe raus. | ||
| - | |||
| - | ^ Moodle-Feld ^ Quelle ^ | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | |||
| - | ===== Zeitplan ===== | ||
| - | |||
| - | ^ Job ^ Zeit ^ Was er tut ^ | ||
| - | | '' | ||
| - | | '' | ||
| - | |||
| - | 40 Minuten Abstand, damit '' | ||
| - | |||
| - | Ein Zustandsfile ''< | ||
| - | übertragen wurde. Übersprungen wird nur, wenn Abgabe **und** Punktzahl | ||
| - | identisch sind — eine Nachbewertung derselben Abgabe geht also erneut raus. | ||
| - | |||
| - | ===== Von Hand auslösen ===== | ||
| - | |||
| - | Im classroom50-Repo unter **Actions → Moodle Sync → Run workflow**. | ||
| - | Eingaben: Klassenzimmer, | ||
| - | '' | ||
| - | mit einer '' | ||
| - | |||
| - | <code bash> | ||
| - | gh workflow run moodle-sync.yaml --repo < | ||
| - | -f classroom=< | ||
| - | </ | ||
| - | |||
| - | Trockenlauf-Ausgabe: | ||
| - | |||
| - | < | ||
| - | Moodle-Übertrag: | ||
| - | [dry-run] < | ||
| - | [dry-run] < | ||
| - | übertragen: | ||
| - | </ | ||
| - | |||
| - | ===== 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: [[.: | ||
| - | |||
| - | ===== Probleme ===== | ||
| - | |||
| - | ^ Meldung / Symptom ^ Ursache ^ | ||
| - | | '' | ||
| - | | '' | ||
| - | | Note kommt nicht an, Log sagt „unverändert" | ||
| - | | Nachtlauf jede Nacht rot, immer dieselbe Person | Karteileichen-Eintrag in '' | ||