Files
uni/Makefile

193 lines
7.0 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
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