Course-Overview der Arbeitsgruppe Softwareentwicklung und Robotik (TU Freiberg)
Die Kurs-Assets werden lokal generiert mit einem intelligenten Change-Detection-System, das sowohl lokale YAML-Änderungen als auch Remote-Repository-Updates überwacht. Das System nutzt ein optimiertes Makefile für die lokale Entwicklung und eine schlanke GitHub Action als Fallback.
sequenceDiagram
participant Dev as Entwickler
participant Make as Makefile
participant Git as Git Repository
participant Action as GitHub Action
participant Pages as GitHub Pages
Note over Dev,Pages: Intelligenter Entwicklungsworkflow mit Change-Detection
Dev->>Make: make digitalesysteme
Make->>Make: ./check_changes.sh digitalesysteme
Note right of Make: Prüft YAML-Hash + Remote-Repository
alt Änderungen erkannt
Make->>Make: liaex -i digitalesysteme.yml
Note right of Make: Generiert HTML + PDFs
Make->>Make: mkdir -p assets/digitalesysteme/pdf
Make->>Make: cp *.pdf assets/digitalesysteme/pdf/
Note right of Make: Organisiert Assets in Kursordner
Make->>Make: sed -i 's|assets/pdf/|assets/digitalesysteme/pdf/|g'
Note right of Make: Korrigiert PDF-Pfade in HTML
Make->>Git: git add . && git commit --amend
Make->>Git: git push --force
Note right of Make: Automatischer Git-Workflow
else Keine Änderungen
Make->>Dev: ⏭️ Übersprungen (Sekunden statt Minuten!)
Note right of Make: Verwendet existierende Assets
end
Git->>Action: Push Trigger
Action->>Action: git diff --name-only HEAD~1 HEAD
Note right of Action: Erkennt geänderte YAML-Dateien
alt YAML geändert oder HTML fehlt
Action->>Action: liaex -i [changed].yml
Note right of Action: Regeneriert nur bei Bedarf
Action->>Pages: Deploy Assets
else Keine Änderungen nötig
Action->>Pages: Deploy existierende Assets
Note right of Action: Überspringt Generierung
end
Note over Dev,Pages: Fallback-Szenario (wenn lokal nicht generiert)
Dev->>Git: git push (nur YAML-Änderung)
Git->>Action: Push Trigger
Action->>Action: Erkennt fehlendes HTML
Action->>Action: npm install -g @liascript/exporter
Action->>Action: liaex -i digitalesysteme.yml (mit PDF-Generation)
Action->>Pages: Deploy neu generierte Assets
Note over Dev,Pages: Vorteile des Hybrid-Ansatzes
Note right of Dev: ⚡ Schnelle lokale Entwicklung
Note right of Make: 🎯 Automatisierte Asset-Organisation
Note right of Action: 🧠 Intelligente Erkennung
Note right of Pages: 🔄 Zuverlässiges Fallback
# Intelligente Kurs-Generierung (mit Change-Detection)
make digitalesysteme # ⚡ Überspringt wenn keine Änderungen
make prozprog # ⚡ Überspringt wenn keine Änderungen
make softwareentwicklung # ⚡ Überspringt wenn keine Änderungen
make robotikprojekt # ⚡ Überspringt wenn keine Änderungen
make index # Übersichtsseite (keine Remote-Überwachung)
# Alle Kurse mit Change-Detection
make all # Nur geänderte Kurse werden regeneriert
# Erzwungene Neugenerierung (ignoriert Cache)
make force-build-digitalesysteme # Einzelner Kurs
make force-all # Alle Kurse
# Utility-Befehle
make status # Zeigt Build-Status und Cache-Informationen
make clean-cache # Löscht Cache → nächster Build regeneriert alles
make clean-all # Löscht alle generierten Dateien
make help # Zeigt alle verfügbaren TargetsDas Makefile ist zentral konfiguriert:
# Kurse mit PDF-Generierung
PDF_COURSES = digitalesysteme prozprog softwareentwicklung robotikprojekt
# SCORM-Parameter
SCORM_ORG = "TU-Bergakademie Freiberg"
SCORM_SCORE = 80├── digitalesysteme.yml # Kurskonfiguration
├── digitalesysteme.html # Generierte Webseite
├── check_changes.sh # 🆕 Intelligente Change-Detection
├── .cache/ # 🆕 Cache für Change-Detection
│ └── digitalesysteme # Hash-Cache (YAML + Remote)
├── assets/
│ └── digitalesysteme/
│ └── pdf/ # Kurs-spezifische PDFs
│ ├── 272cfe0.pdf
│ ├── 0611ae484.pdf
│ └── ... # 16 PDFs insgesamt
├── Makefile # 🔄 Verbessertes Build-System
├── .gitignore # 🆕 Ignoriert .cache/ Verzeichnis
└── .github/workflows/
└── generateOERoverview.yml # Optimierte GitHub Action
- 📄 Lokale YAML-Dateien: SHA256-Hash der Konfiguration
- 🌐 Remote GitHub-Repositories: Commit-Hash via GitHub API
digitalesysteme→VL_EingebetteteSystemeprozprog→VL_ProzeduraleProgrammierungsoftwareentwicklung→VL_Softwareentwicklungrobotikprojekt→VL_Robotikprojekt
- 📁 Generierte HTML-Dateien: Existenz-Check
- Sekunden statt Minuten bei unveränderten Inhalten
- Automatisches Überspringen bei identischen Hashes
- Selective Rebuilds nur bei tatsächlichen Änderungen
-
Status prüfen:
make status📚 Course: digitalesysteme ✅ HTML file exists 📋 Cache file exists 💾 Cached YAML: bd241dd6... 💾 Cached remote: 5caf909b... 📁 Assets: 16 PDFs 🌐 Monitoring: VL_EingebetteteSysteme -
Intelligente Entwicklung:
make digitalesysteme- ✅ Änderung erkannt → Vollständige Regenerierung (HTML + PDFs + Git)
- ⏭️ Keine Änderung → Überspringt Build (< 5 Sekunden)
-
Automatischer Git-Workflow (nur bei Änderungen):
git add .undgit commit --amendgit push --forcefür saubere History
# Prüft lokale YAML-Änderungen
YAML_HASH=$(sha256sum digitalesysteme.yml | cut -d' ' -f1)
# Überwacht Remote-Repository via GitHub API
REMOTE_HASH=$(curl -s "https://api.github.com/repos/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/commits/master" | jq -r '.sha')
# Vergleicht mit Cache
if [ "$YAML_HASH" != "$CACHED_YAML" ] || [ "$REMOTE_HASH" != "$CACHED_REMOTE" ]; then
echo "✅ Changes detected - rebuild needed"
# Update cache and trigger rebuild
else
echo "⏭️ No changes detected - skipping"
fi- Speicherort:
.cache/[course](ignoriert von Git) - Format: Zeile 1 = YAML-Hash, Zeile 2 = Remote-Hash
- Invalidierung: Automatisch bei erkannten Änderungen
- ✅ YAML-Datei geändert → Lokale Konfiguration aktualisiert
- ✅ Remote-Repository aktualisiert → Neue Markdown-Inhalte verfügbar
- ✅ HTML-Datei fehlt → Erste Generierung oder Datei gelöscht
- ⏭️ Alles unverändert → Skip (massive Zeitersparnis)
# Erzwungene Neugenerierung (ignoriert Cache)
make force-build-digitalesysteme
# Cache zurücksetzen (nächster Build regeneriert alles)
make clean-cache
# Vollständige Neugenerierung aller Kurse
make force-all
# Status aller Kurse anzeigen
make statusDas System erkennt automatisch neue Commits in den überwachten Repositories:
- Neue Markdown-Inhalte werden automatisch bei
make digitalesystemegezogen - PDF-Dateinamen bleiben bei unverändertem Inhalt identisch
- Remote-Verbindungsfehler → System nutzt cached Version
- Mit Änderungen: ~3-5 Minuten (komplette PDF-Generierung)
- Ohne Änderungen: ~3-5 Sekunden (Change-Detection + Skip)
- Überwachte Repositories: 4 aktive + 1 index (nur lokal)