193 lines
7.0 KiB
Makefile
193 lines
7.0 KiB
Makefile
# 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
|
||
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_PORT = 1313
|
||
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_PORT = 1314
|
||
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_PORT = 1315
|
||
dhbw_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 "Per-course (replace <c> with course id):"
|
||
@echo " make dev-<c> Live server (HMR)"
|
||
@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 dev Combined dev server (port 1312, 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: dev-<c>, build-<c>, html-<c>, pdf-<c>, klausur-<c>, deploy-<c>
|
||
# Per-course config read via $($*_VAR)
|
||
# -----------------------------------------------------------------------------
|
||
dev-%:
|
||
@./scripts/dev-server.sh $* $($*_PORT)
|
||
|
||
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
|