gitea-classroom/README.md

5.7 KiB

gitea-classroom

GitHub Classroom Ersatz für selbst-gehostete Gitea-Instanzen.
Unterstützt Einzel-Assignments (ein Repo pro Student) und Gruppen-Assignments (ein Repo pro Gruppe mit eigenem Gitea-Team).

Hinweis: Dieses Tool wurde mit KI erstellt.

Installation

pip install gitea-classroom

Oder lokal aus dem Quellcode:

git clone https://github.com/…/gitea-classroom
cd gitea-classroom
pip install -e .

Konfiguration

export GITEA_URL="https://gitea.meine-uni.de"
export GITEA_TOKEN="dein_persönliches_api_token"

API-Token erstellen: Gitea → Einstellungen → Anwendungen → Token generieren
Benötigte Scopes: repo, org, admin:org


Template-Repo vorbereiten

Das Template-Repo muss in Gitea als Template markiert sein:
Repo → Einstellungen → Erweiterte Einstellungen → "Dieses Repository ist ein Template"

Das Template kann in der eigenen Org oder bei einem anderen Nutzer liegen.
Das Template-Repo selbst wird nie verändert.


CSV-Formate

students.csv — für Einzel-Assignments

username,name,email
max.mustermann,Max Mustermann,max@uni.de
erika.musterfrau,Erika Musterfrau,erika@uni.de

groups.csv — für Gruppen-Assignments

group,username
team-a,max.mustermann
team-a,erika.musterfrau
team-b,lena.schmidt
team-b,tom.mueller

Gruppenname (group) wird Teil des Repo-Namens: proj01-team-a


Befehle

add-students — Studenten zur Organisation hinzufügen

gitea-classroom add-students --org info2-ss25 --csv students.csv

Fügt alle Nutzer aus der CSV dem students-Team der Org hinzu.
Die Gitea-Accounts müssen vorher existieren.


create-assignment — Einzel-Assignment erstellen

gitea-classroom create-assignment \
  --org info2-ss25 \
  --assignment ueb01 \
  --template uebung01-template \
  --csv students.csv
Option Beschreibung
--org Ziel-Organisation
--assignment Prefix für Repo-Namen (z. B. ueb01)
--template Name des Template-Repos
--template-owner Owner des Templates (Standard: --org)
--csv students.csv
--public Repos öffentlich erstellen (Standard: privat)

Erstellt pro Student:

  • Ein privates Repo (ueb01-max.mustermann) als Kopie des Templates
  • Schreibzugriff nur auf das eigene Repo
  • Einen Feedback-PR (mainfeedback), der alle Student-Commits zeigt
info2-ss25/
  ueb01-max.mustermann
  ueb01-erika.musterfrau
  ...

create-group-assignment — Gruppen-Assignment erstellen

gitea-classroom create-group-assignment \
  --org info2-ss25 \
  --assignment proj01 \
  --template projekt-template \
  --csv groups.csv
Option Beschreibung
--org Ziel-Organisation
--assignment Prefix für Repo-Namen (z. B. proj01)
--template Name des Template-Repos
--template-owner Owner des Templates (Standard: --org)
--csv groups.csv
--public Repos öffentlich erstellen (Standard: privat)

Erstellt pro Gruppe:

  • Ein privates Repo (proj01-team-a) als Kopie des Templates
  • Ein Gitea-Team (proj01-team-a) mit Schreibzugriff für alle Gruppenmitglieder
  • Einen Feedback-PR (mainfeedback), der alle Gruppen-Commits zeigt
  • Studenten sehen ausschließlich das eigene Gruppen-Repo
info2-ss25/
  proj01-team-a   ← max.mustermann + erika.musterfrau
  proj01-team-b   ← lena.schmidt + tom.mueller

list-submissions — Abgaben einsehen (Übersicht)

gitea-classroom list-submissions --org info2-ss25 --assignment ueb01

Zeigt den letzten Commit je Repo in einer kompakten Tabelle.
Funktioniert für Einzel- und Gruppen-Assignments.


list-group-submissions — Abgaben einsehen (Detailansicht)

gitea-classroom list-group-submissions --org info2-ss25 --assignment proj01

Zeigt die letzten 5 Commits je Gruppen-Repo.


clone-submissions — Abgaben lokal klonen

gitea-classroom clone-submissions \
  --org info2-ss25 \
  --assignment ueb01 \
  --dir ./abgaben
Option Beschreibung
--org Organisation
--assignment Assignment-Name
--dir Zielverzeichnis (Standard: .)

Klont alle Repos des Assignments nach <dir>/<assignment>/<student>/.
Bei erneutem Aufruf wird git pull auf bereits geklonte Repos ausgeführt.


delete-assignment — Assignment löschen

gitea-classroom delete-assignment --org info2-ss25 --assignment ueb01

Löscht alle Repos und die zugehörigen Gruppen-Teams des Assignments.
Verlangt manuelle Bestätigung durch Eingabe des Assignment-Namens.


Feedback-PR

Jedes Repo erhält automatisch einen offenen Pull Request mit dem Titel „Feedback":

  • feedback-Branch — eingefrorener Template-Stand (Referenzpunkt)
  • main-Branch — Student-Commits werden hier gepusht
  • Der PR zeigt alle Änderungen relativ zum Template und wächst mit jedem Push

Dozenten können direkt im PR Zeilen kommentieren oder ein Review hinterlassen.
Der PR wird nie gemergt — er dient ausschließlich als Feedback-Kanal.


Typischer Semesterablauf

Semesterbeginn:
  add-students                      (einmalig, students.csv)

Übungsblätter (Einzel):
  create-assignment   → ueb01, ueb02, ...
  list-submissions                  (Abgabe-Übersicht)
  clone-submissions                 (lokal klonen / aktualisieren)

Projekt (Gruppe):
  create-group-assignment  → proj01
  list-group-submissions            (während der Bearbeitung)
  list-submissions                  (kompakte Abgabe-Übersicht)
  clone-submissions                 (lokal klonen / aktualisieren)

Semesterende:
  delete-assignment                 (optional, für jedes Assignment)