====== Template-Repositories ======
Ein **Template-Repository** enthält den Startcode einer Aufgabe. Classroom 50
kopiert es beim Annehmen in ein privates Repository der lernenden Person. Die
Python-Templates der BZZ liegen in der Organisation ''templates-python''.
===== Aufbau =====
/
├── .github/
│ └── autograding/ ← Bewertungs-Konfiguration (Fallback)
│ ├── unittests.json
│ ├── lint.json
│ └── pylintrc
├── tests/ ← die Tests der Lehrperson
│ └── test_*.py
├── main.py ← Startcode / Stub
├── requirements.txt ← für die lokale Arbeit der Lernenden
└── README.md ← Aufgabenstellung
**Kein ''.github/workflows/classroom.yml''.** Der Bewertungs-Workflow kommt
unter Classroom 50 zentral aus dem Config-Repo. Bleibt die alte Datei liegen,
laufen bei jedem Push zwei Autograder nebeneinander — siehe
[[.:classroom50:migration|Migration]].
===== Namensregeln =====
Der Repository-Name ist der **Slug** der Aufgabe. Er wird an drei Stellen
identisch verwendet:
- Name des Template-Repos
- ''slug'' in ''/assignments.json''
- Name der Aktivität //External Assignment// in Moodle
Kleinbuchstaben, Bindestriche als Trenner, Modul und Lerneinheit voran:
m323-lu01-a02-imperativer-ggt
m320-lu04-a4-objektkommunikation
Gegenüber GitHub Classroom entfällt die alte Einschränkung, dass der Name keine
Bindestriche enthalten darf. Classroom 50 arbeitet durchgehend mit Slugs.
===== Neues Template anlegen =====
- Repository in ''templates-python'' erstellen und unter **Settings → Template repository** als Template markieren.
- Startcode, Tests und ''README.md'' mit der Aufgabenstellung einfügen.
- ''.github/autograding/'' mit ''unittests.json'', ''lint.json'' und ''pylintrc'' anlegen — Aufbau siehe [[.:classroom50:bewertung|Wie bewertet wird]].
- Aufgabe in ''/assignments.json'' des Config-Repos eintragen, mit ''"autograder": "default"'' und ohne ''tests''-Block.
- In Moodle eine Aktivität //External Assignment// mit demselben Slug anlegen, siehe [[.:classroom50:moodle|]].
===== requirements.txt =====
Die Datei ist für die **lokale** Arbeit der Lernenden da. Die Bewertung auf
GitHub installiert sie bewusst nicht: pygrader50 bringt eigene, gepinnte
Abhängigkeiten mit, damit die Bewertung reproduzierbar bleibt.
Die alten Pins ''pytest==8.3.3'' und ''pylint==3.2.7'' sind auf Python 3.14
nicht mehr lauffähig. Wer die Datei pflegt, sollte sie deshalb auf aktuelle
Versionen heben — sonst weicht die lokale Umgebung der Lernenden von der
Bewertung ab.
===== Änderungen an einem Template =====
**Template-Änderungen erreichen bestehende Repositories nicht.** Ein Studi-Repo
trägt seine Kopie aus dem Moment der Annahme. Eine korrigierte ''unittests.json''
muss also entweder in die bereits angenommenen Repos nachgezogen werden — oder,
besser, als Bundle ins Config-Repo wandern, wo sie sofort für alle gilt.
Das ist das stärkste Argument für die Bundles unter
''/autograders//'': Eine Korrektur dort wirkt beim nächsten
Push für die ganze Klasse.
===== Weiter =====
* [[.:classroom50repo|Das classroom50-Repository]]
* [[.:classroom50:bewertung|Wie bewertet wird]]
* [[howto:pycharm:template|PyCharm-Template]]