Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

howto:git:classroom50repo [2026/08/14 07:08] – angelegt msuterhowto:git:classroom50repo [2026/08/14 11:12] (aktuell) kmaurizi
Zeile 1: Zeile 1:
-====== Classroom50-Repo ====== +====== Das classroom50-Repository ======
-<WRAP center round tip 60%> +
-In der GitHub-Organisation ist ein Repository "classroom50" mit den Einstellungen, Scripts und Workflows für die Classrooms. +
-Pro Classroom besteht ein Unterordner mit dem Namen des Classrooms. +
-</WRAP>+
  
-===== Autograding ===== +Jede Klasse hat ein privates Repository ''<ORG>/classroom50''. Es ist die 
-==== Classroom50-Repository ====+**einzige** Konfigurationsquelle des Klassenzimmers: Aufgaben, Klassenliste, 
 +Autograder, Resultate und die Workflows liegen dort. Angelegt wird es von 
 +''gh teacher classroom add''.
  
-Unter ''...classroom50/blob/main/.github/workflows/autograde-runner.yaml'' erstellt Classroom50 eine Action für die Bewertung. +===== Aufbau =====
-Ersetze diese Action durch unsere Action für ''py-autograding.yml''.+
  
-<code yaml autograde-runner.yml+<code
-nameWorkflow for BZZ Programming Lessons using Github-Classroom and Moodle+classroom50/ 
 +├── .github/workflows/ 
 +│   ├── autograde-runner.yaml     ← zentraler Reusable Workflow (von gh teacher) 
 +│   ├── publish-pages.yaml        ← stellt Autograder und Bundles auf GitHub Pages 
 +│   ├── collect-scores.yaml       ← sammelt nachts alle Releases ein 
 +│   └── moodle-sync.yaml          ← BZZ-eigen: Übertrag nach Moodle 
 +└── <CLASSROOM>/                  ← ein Ordner pro Klassenzimmer 
 +    ├── classroom.json            ← Kurzname und Stammdaten 
 +    ├── assignments.json          ← alle Aufgaben, Templates, Termine 
 +    ├── roster.csv                ← Klassenliste (Anzeigedaten) 
 +    ├── autograder.py             ← Klassen-Defaultstartet pygrader50 
 +    ├── autograders/<SLUG>/       ← optional: Bewertungs-Bundle je Aufgabe 
 +    ├── scores.json               ← eingesammelte Resultate 
 +    └── moodle-state.json         ← was schon nach Moodle übertragen wurde 
 +</code>
  
-on: [push, fork]+Ein Repository kann **mehrere** Klassenzimmer enthalten — je einen Ordner. Der 
 +Ordnername ist der Kurzname aus ''classroom.json'' und muss nicht dem 
 +Organisationsnamen entsprechen.
  
-permissions: +===== Die Pages-Site =====
-  checks: write +
-  issues: write +
-  actions: read +
-  contents: read+
  
-jobs: +''publish-pages'' veröffentlicht Teile des Repos unter 
-  grading: +''https://<ORG>.github.io/classroom50/''Von dort holt der Runner bei jeder 
-    if: ${{ !contains(github.event.head_commit.message, 'CLASSROOM 50') && !contains(github.event.head_commit.message, 'NOACTION') }} +Abgabe:
-    usesBZZ-Commons/pygrader/.github/workflows/py_autograding.yml@main +
-    secretsinherit +
-</code>+
  
-==== Template-Repo ==== +^ Datei ^ URL ^ 
-<WRAP center round tip 60%+| Klassen-Default | ''https://<ORG>.github.io/classroom50/<CLASSROOM>/autograder.py'' | 
-Die Template-Repositories sind die Vorlagen, welche für die Lernenden geklont werden+| Bewertungs-Bundle | ''https://<ORG>.github.io/classroom50/<CLASSROOM>/autograders/<SLUG>.tar.gz'' | 
-Zum Beispiel [[https://github.com/templates-python/m320-lu02-a01-door]]+| Aufgabenliste | ''https://<ORG>.github.io/classroom50/<CLASSROOM>/assignments.json''
 + 
 +<WRAP center round important 90%> 
 +Das Klassen-Segment im Pfad ist Pflicht. ''…/classroom50/autograder.py'' **ohne** 
 +''<CLASSROOM>/'' liefert 404. Nach einem Push dauert der Deploy rund 30 Sekunden.
 </WRAP> </WRAP>
  
-In den einzelnen Template-Repositories wird keine Action für die Bewertung benötigt+===== Wie eine Abgabe bewertet wird ===== 
-Beim Erstellen des Repositories für die Lernenden wird automatisch eine Action eingefügt, die ''autograde-runner.yml'' im ''classroom50''-Repository aufruft.+ 
 +Im Studi-Repo liegt ''.github/workflows/autograde-runner.yaml''. Die Datei wird 
 +beim Anlegen des Repos eingesetzt und ruft nur den **zentralen** Reusable 
 +Workflow des Config-Repos auf. Der Lauf wird übersprungenwenn die 
 +Commit-Message ''CLASSROOM 50'' oder ''NOACTION'' enthält. 
 + 
 +  Der ''setup''-Job liest ''.classroom50.yaml'' aus dem Studi-Repo und den passenden Eintrag aus ''assignments.json'' der Pages-Site. 
 +  - Der ''grade''-Job holt ''runner.py'' von der Pages-Site und startet es. 
 +  - ''runner.py'' lädt ''autograders/<SLUG>.tar.gz'' und sucht dann in dieser Reihenfolge: aufgaben-eigenes ''autograder.py'' → aufgaben-eigene ''tests.json'' → ''<CLASSROOM>/autograder.py'' → 0/0. 
 +  - An der BZZ greift der dritte Punkt: ''<CLASSROOM>/autograder.py'' installiert [[https://github.com/BZZ-Commons/pygrader50|pygrader50]] in gepinnter Version und startet es im Studi-Checkout. 
 +  - ''runner.py'' liest danach ''result.json'', validiert es und publiziert Release und Commit-Status. 
 + 
 +<WRAP center round tip 90%> 
 +Der alte Weg über ''BZZ-Commons/pygrader'' und ''py_autograding.yml'' ist 
 +abgelöst. Wer ihn noch in einem Repo findet, siehe 
 +[[.:classroom50:migration|Migration von GitHub Classroom]]. 
 +</WRAP> 
 + 
 +===== Bewertungs-Konfiguration ===== 
 + 
 +Die drei Dateien ''unittests.json'', ''lint.json'' und ''pylintrc'' können 
 +entweder im Studi-Repo unter ''.github/autograding/'' liegen (Fallback aus der 
 +GitHub-Classroom-Zeit) oder manipulationssicher als Bundle im Config-Repo unter 
 +''<CLASSROOM>/autograders/<SLUG>/''
 + 
 +Details und Vorrangregeln: [[.:classroom50:bewertung|Wie bewertet wird]]. 
 + 
 +===== Sicherheit ===== 
 + 
 +Der Moodle-Token liegt **nur** hier, nicht in der Studi-Organisation. Der 
 +Bewertungs-Job bekommt gar keine Secrets: ''autograde-runner.yaml'' deklariert 
 +in seinem ''workflow_call:''-Block nur ''outputs:''. Der Job ist ausdrücklich 
 +**keine** Isolationsgrenze gegen selbst hinzugefügte Studi-Workflows — alles 
 +Vertrauliche gehört deshalb ins Config-Repo. 
 + 
 +===== Weiter ===== 
 + 
 +  * [[.:classroom50:start|Überblick Classroom 50]] 
 +  * [[.:classroom50:lehrpersonen|Klassenzimmer und Aufgaben verwalten]] 
 +  * [[.:classroom50:einrichtung|Ein Klassenzimmer einrichten]] 
 +  * [[.:template|Template-Repositories]]
  
-=== Konfiguration der Bewertung === 
-Die Einstellungen für Unittests, Linter, ... werden im Ordner ''.github/autograding'' definiert. 
-Für ein Python-Programm sind das typischerweise: 
-  * ''lint.json'': Definiert die Dateien, die von pylint geprüft werden sollen. 
-  * ''pylintrc'': Einstellungen und Regeln für pylint. 
-  * ''unittests.json'': Definition der Unittests für pytest. 
  • howto/git/classroom50repo.txt
  • Zuletzt geändert: 2026/08/14 11:12
  • von kmaurizi