Files
uni/Makefile
T
libretech 351e3dfc23 branch-coexist: 3 neue decks 223015b-2026 / 223015c-2026 / dhbw-2026 daneben main
per user-request einen branch der main-content UND rewrite-content trägt — saubere separierung statt symlink/merge-conflict.

struktur:
- slides/<course>/ → main-content restored, eigene assets (kein new-demo-leak)
- slides/<course>-2026/ → rewrite-content, eigene assets (komplett kopiert + new demos)

Makefile: COURSES += 223015b-2026 223015c-2026 dhbw-2026 mit eigenen NAME/KAPITEL/DEPLOY/KLAUSUR-konfig. Klausur für b+c=1, dhbw=leer. Deploy-paths /hdm/223015b-2026 etc.

make build durchlaufen für alle 6 decks, 0 fehler.

dedup: 223015c+dhbw assets identisch in beiden ordnern (kein neu-demos auf b ergänzt). 223015b 86 → 120 files in -2026 (= +34 neue eroeffner/usb-c-drei-achsen/container-vs-codec/etc).
2026-05-14 21:54:15 +02:00

204 lines
7.9 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Uni Slides – Unified Makefile
# Multi-course Marp build system (HdM + DHBW)
.PHONY: help dev build html pdf klausur deploy deploy-index build-index \
clean install qr qr-slides optimize-images
# -----------------------------------------------------------------------------
# Course registry
# -----------------------------------------------------------------------------
COURSES = 223015b 223015c dhbw 223015b-2026 223015c-2026 dhbw-2026
SLIDES_DIR = slides
DEPLOY_HOST = tengo@tuttle.uberspace.de
# Per-course settings: NAME, KAPITEL, DEPLOY, PORT, KLAUSUR (1 or empty)
223015b_NAME = Dateiformate, Schnittstellen, Speichermedien
223015b_KAPITEL = 00-intro 01-grundlagen-text-audio 02-bild-audio-video 03-speichermedien-schnittstellen 04-distribution-apis-zukunft 05-vertiefung-offene-fragen klausurfolien klausurfragen
223015b_DEPLOY = /home/tengo/html/hdm/223015b
223015b_KLAUSUR = 1
223015c_NAME = Internettechnologien
223015c_KAPITEL = 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript klausurfolien klausurfragen
223015c_DEPLOY = /home/tengo/html/hdm/223015c
223015c_KLAUSUR = 1
dhbw_NAME = Technik I – Grundlagen IT
dhbw_KAPITEL = 01_web_eng 02_css_extended 03_nodejs_basics 04_nodejs_advanced 05_testing 06_typescript 07_docker 08_best_practices
dhbw_DEPLOY = /home/tengo/html/dhbw
dhbw_KLAUSUR =
# -- 2026-rewrite versions --------------------------------------------------
223015b-2026_NAME = Dateiformate, Schnittstellen, Speichermedien (Rewrite 2026)
223015b-2026_KAPITEL = 00-intro 01-daten-grundlagen 02-kompression 03-inhalte-bild-audio-video 04-speicher-schnittstellen 05-distribution-metadaten klausurfolien klausurfragen
223015b-2026_DEPLOY = /home/tengo/html/hdm/223015b-2026
223015b-2026_KLAUSUR = 1
223015c-2026_NAME = Internettechnologien (Rewrite 2026)
223015c-2026_KAPITEL = 00-intro 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript klausurfolien klausurfragen
223015c-2026_DEPLOY = /home/tengo/html/hdm/223015c-2026
223015c-2026_KLAUSUR = 1
dhbw-2026_NAME = Technik I – Grundlagen IT (Rewrite 2026)
dhbw-2026_KAPITEL = 01_web_eng 02_css_extended 03_nodejs_basics 04_nodejs_advanced 05_testing 06_typescript 07_docker 08_best_practices
dhbw-2026_DEPLOY = /home/tengo/html/dhbw-2026
dhbw-2026_KLAUSUR =
# Courses with klausur extraction enabled
KLAUSUR_COURSES = $(foreach c,$(COURSES),$(if $($(c)_KLAUSUR),$(c),))
ROOT_DEPLOY = /home/tengo/html/hdm
# -----------------------------------------------------------------------------
# Help
# -----------------------------------------------------------------------------
help:
@echo "Uni Slides – Unified Build System"
@echo ""
@echo "Courses:"
@for c in $(COURSES); do echo " $$c"; done
@echo ""
@echo "Dev:"
@echo " make dev Live server, all courses (port 1312)"
@echo ""
@echo "Per-course build/deploy (replace <c> with course id):"
@echo " make build-<c> Build HTML + PDF"
@echo " make html-<c> Build HTML only"
@echo " make pdf-<c> Build PDF only"
@echo " make klausur-<c> Extract klausur slides"
@echo " make deploy-<c> Build + deploy"
@echo ""
@echo "All courses:"
@echo " make build Build everything"
@echo " make html / pdf HTML / PDF only"
@echo " make klausur Extract klausur (HdM courses)"
@echo " make deploy Deploy everything"
@echo ""
@echo "Tools:"
@echo " make qr URL=... QR code"
@echo " make qr-slides COURSE=<c> QR for course URL"
@echo " make optimize-images COURSE=<c> Resize images"
@echo " make clean Remove generated files"
@echo " make install npm install"
# -----------------------------------------------------------------------------
# Build infrastructure
# -----------------------------------------------------------------------------
build/.exists:
@mkdir -p $(addprefix build/,$(COURSES))
@touch $@
# -----------------------------------------------------------------------------
# Pattern rules: build-<c>, html-<c>, pdf-<c>, klausur-<c>, deploy-<c>
# Per-course config read via $($*_VAR)
# -----------------------------------------------------------------------------
build-%: build/.exists
@echo "Building $*..."
@mkdir -p build/$*
@cp -r $(SLIDES_DIR)/$*/assets build/$*/ 2>/dev/null || true
@cp -r $(SLIDES_DIR)/$*/materials build/$*/ 2>/dev/null || true
@for f in $($*_KAPITEL); do \
if [ -f "$(SLIDES_DIR)/$*/$$f.md" ]; then \
echo " $$f"; \
npx @marp-team/marp-cli $(SLIDES_DIR)/$*/$$f.md -o build/$*/$$f.html; \
npx @marp-team/marp-cli $(SLIDES_DIR)/$*/$$f.md --pdf --allow-local-files -o build/$*/$$f.pdf; \
fi \
done
@./scripts/generate-index.sh $* build/$*
html-%: build/.exists
@echo "Building HTML for $*..."
@mkdir -p build/$*
@cp -r $(SLIDES_DIR)/$*/assets build/$*/ 2>/dev/null || true
@cp -r $(SLIDES_DIR)/$*/materials build/$*/ 2>/dev/null || true
@for f in $($*_KAPITEL); do \
if [ -f "$(SLIDES_DIR)/$*/$$f.md" ]; then \
echo " $$f.html"; \
npx @marp-team/marp-cli $(SLIDES_DIR)/$*/$$f.md -o build/$*/$$f.html; \
fi \
done
@./scripts/generate-index.sh $* build/$*
pdf-%: build/.exists
@echo "Building PDFs for $*..."
@mkdir -p build/$*
@for f in $($*_KAPITEL); do \
if [ -f "$(SLIDES_DIR)/$*/$$f.md" ]; then \
echo " $$f.pdf"; \
npx @marp-team/marp-cli $(SLIDES_DIR)/$*/$$f.md --pdf --allow-local-files -o build/$*/$$f.pdf; \
fi \
done
klausur-%:
@./scripts/extract-klausur.sh $*
deploy-%: build-%
@echo "Deploying $*..."
scp build/$*/*.html $(DEPLOY_HOST):$($*_DEPLOY)/
scp build/$*/*.pdf $(DEPLOY_HOST):$($*_DEPLOY)/ 2>/dev/null || true
scp build/$*/*.svg $(DEPLOY_HOST):$($*_DEPLOY)/ 2>/dev/null || true
scp -r build/$*/assets/ $(DEPLOY_HOST):$($*_DEPLOY)/ 2>/dev/null || true
scp -r build/$*/materials/ $(DEPLOY_HOST):$($*_DEPLOY)/ 2>/dev/null || true
@echo "$* deployed."
# -----------------------------------------------------------------------------
# Group targets (all courses)
# -----------------------------------------------------------------------------
dev:
@./scripts/dev-server.sh
build: $(addprefix build-,$(COURSES))
html: $(addprefix html-,$(COURSES))
pdf: $(addprefix pdf-,$(COURSES))
klausur: $(addprefix klausur-,$(KLAUSUR_COURSES))
build-index: build/.exists
@echo "Building root index..."
@mkdir -p build
@./scripts/generate-root-index.sh
deploy-index: build-index
@echo "Deploying root index..."
scp build/index.html $(DEPLOY_HOST):$(ROOT_DEPLOY)/ 2>/dev/null || true
@echo "Root index deployed."
deploy: build-index $(addprefix deploy-,$(COURSES)) deploy-index
@echo "All courses deployed."
# -----------------------------------------------------------------------------
# Tools
# -----------------------------------------------------------------------------
qr:
ifndef URL
@echo "Usage: make qr URL=https://example.com [OUTPUT=qr.png]"
else
@nix-shell -p qrencode --run 'qrencode -o $(or $(OUTPUT),qr-code.png) -s 10 "$(URL)"'
@echo "Generated: $(or $(OUTPUT),qr-code.png)"
endif
qr-slides:
ifndef COURSE
@echo "Usage: make qr-slides COURSE=<course>"
else
@nix-shell -p qrencode --run 'qrencode -o build/$(COURSE)/qr-$(COURSE).png -s 10 "https://librete.ch/hdm/$(COURSE)/"'
@echo "Generated: build/$(COURSE)/qr-$(COURSE).png"
endif
optimize-images:
ifndef COURSE
@echo "Usage: make optimize-images COURSE=<course>"
else
@echo "Optimizing images for $(COURSE)..."
@mkdir -p $(SLIDES_DIR)/$(COURSE)/assets-original
@nix-shell -p imagemagick --run 'for img in $(SLIDES_DIR)/$(COURSE)/assets/*.png $(SLIDES_DIR)/$(COURSE)/assets/*.jpg 2>/dev/null; do \
[ -f "$$img" ] && cp "$$img" $(SLIDES_DIR)/$(COURSE)/assets-original/ && \
magick "$$img" -resize "1920x>" -quality 85 "$$img" && echo " $$(basename $$img)"; \
done || true'
@echo "Done. Originals in assets-original/"
endif
clean:
@echo "Cleaning..."
rm -rf build/ .dev-index/ *.pdf *.html qr-code.png
install:
@npm install