- split slides/klausurfragen.md into course-specific files: - slides/223015b/klausurfragen.md (blocks J-O: dateiformate) - slides/223015c/klausurfragen.md (blocks A-I: it-grundlagen) - add erklaerung slides to 223015c (16 new vertiefung slides) - update erklaerung slides in 223015b with deeper content - update makefile to build klausurfragen per-course - remove global klausurfragen from root index
220 lines
6.4 KiB
Makefile
220 lines
6.4 KiB
Makefile
# HdM Slides - Unified Makefile
|
|
# Supports multiple courses: 223015b (Dateiformate) and 223015c (Internettechnik)
|
|
|
|
.PHONY: help dev dev-b dev-c build build-b build-c pdf html klausur clean install deploy qr optimize-images
|
|
|
|
# Course configuration
|
|
COURSES = 223015b 223015c
|
|
SLIDES_DIR = slides
|
|
|
|
# Course-specific settings
|
|
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_PATH = /home/tengo/html/hdm/223015b
|
|
|
|
223015c_NAME = Internettechnologien
|
|
223015c_KAPITEL = 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript klausurfolien klausurfragen
|
|
223015c_DEPLOY_PATH = /home/tengo/html/hdm/223015c
|
|
|
|
DEPLOY_HOST = tengo@tuttle.uberspace.de
|
|
|
|
# Default target
|
|
help:
|
|
@echo "HdM Slides - Unified Build System"
|
|
@echo ""
|
|
@echo "Courses:"
|
|
@echo " 223015b - Dateiformate, Schnittstellen, Speichermedien"
|
|
@echo " 223015c - Internettechnologien"
|
|
@echo ""
|
|
@echo "Development:"
|
|
@echo " make dev - Start development server (port 3000)"
|
|
@echo ""
|
|
@echo "Build:"
|
|
@echo " make build - Build all courses"
|
|
@echo " make build-b - Build 223015b only"
|
|
@echo " make build-c - Build 223015c only"
|
|
@echo " make pdf - Export all to PDF"
|
|
@echo " make html - Export all to HTML"
|
|
@echo " make klausur - Extract klausurfolien slides"
|
|
@echo ""
|
|
@echo "Tools:"
|
|
@echo " make qr URL=... - Generate QR code for URL"
|
|
@echo " make optimize-images COURSE=223015b - Resize images"
|
|
@echo ""
|
|
@echo "Deploy:"
|
|
@echo " make deploy - Deploy all courses"
|
|
@echo " make deploy-b - Deploy 223015b only"
|
|
@echo " make deploy-c - Deploy 223015c only"
|
|
@echo ""
|
|
@echo "Other:"
|
|
@echo " make clean - Remove generated files"
|
|
@echo " make install - Install dependencies"
|
|
|
|
# Ensure build directories exist
|
|
build/.exists:
|
|
@mkdir -p build/223015b build/223015c
|
|
@touch $@
|
|
|
|
# Development server
|
|
dev:
|
|
@./scripts/dev-server.sh
|
|
|
|
dev-kill:
|
|
@-pkill -f "marp-cli.*--server" 2>/dev/null || true
|
|
@sleep 0.5
|
|
|
|
# Build functions
|
|
define build_course
|
|
@echo "Building $(1)..."
|
|
@mkdir -p build/$(1)
|
|
@cp -r $(SLIDES_DIR)/$(1)/assets build/$(1)/ 2>/dev/null || true
|
|
@cp -r $(SLIDES_DIR)/$(1)/materials build/$(1)/ 2>/dev/null || true
|
|
@for f in $($(1)_KAPITEL); do \
|
|
if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \
|
|
echo " Building $$f..."; \
|
|
npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md -o build/$(1)/$$f.html; \
|
|
npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \
|
|
fi \
|
|
done
|
|
@./scripts/generate-index.sh $(1) build/$(1)
|
|
endef
|
|
|
|
build-b: build/.exists
|
|
$(call build_course,223015b)
|
|
|
|
build-c: build/.exists
|
|
$(call build_course,223015c)
|
|
|
|
build: build-b build-c
|
|
@echo "All courses built!"
|
|
|
|
# HTML only builds
|
|
define html_course
|
|
@echo "Building HTML for $(1)..."
|
|
@mkdir -p build/$(1)
|
|
@cp -r $(SLIDES_DIR)/$(1)/assets build/$(1)/ 2>/dev/null || true
|
|
@cp -r $(SLIDES_DIR)/$(1)/materials build/$(1)/ 2>/dev/null || true
|
|
@for f in $($(1)_KAPITEL); do \
|
|
if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \
|
|
echo " $$f.html"; \
|
|
npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md -o build/$(1)/$$f.html; \
|
|
fi \
|
|
done
|
|
@./scripts/generate-index.sh $(1) build/$(1)
|
|
endef
|
|
|
|
html-b: build/.exists
|
|
$(call html_course,223015b)
|
|
|
|
html-c: build/.exists
|
|
$(call html_course,223015c)
|
|
|
|
html: html-b html-c
|
|
|
|
# PDF only builds
|
|
define pdf_course
|
|
@echo "Building PDFs for $(1)..."
|
|
@mkdir -p build/$(1)
|
|
@for f in $($(1)_KAPITEL); do \
|
|
if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \
|
|
echo " $$f.pdf"; \
|
|
npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \
|
|
fi \
|
|
done
|
|
endef
|
|
|
|
pdf-b: build/.exists
|
|
$(call pdf_course,223015b)
|
|
|
|
pdf-c: build/.exists
|
|
$(call pdf_course,223015c)
|
|
|
|
pdf: pdf-b pdf-c
|
|
|
|
# Klausur slide extraction
|
|
klausur-b:
|
|
@./scripts/extract-klausur.sh 223015b
|
|
|
|
klausur-c:
|
|
@./scripts/extract-klausur.sh 223015c
|
|
|
|
klausur: klausur-b klausur-c
|
|
@echo "Klausurfolien slides extracted for all courses!"
|
|
|
|
# QR Code generation (uses nix-shell)
|
|
qr:
|
|
ifndef URL
|
|
@echo "Usage: make qr URL=https://example.com"
|
|
@echo " make qr URL=https://example.com OUTPUT=my-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 code for a slide deck URL
|
|
qr-slides:
|
|
ifndef COURSE
|
|
@echo "Usage: make qr-slides COURSE=223015b"
|
|
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
|
|
optimize-images:
|
|
ifndef COURSE
|
|
@echo "Usage: make optimize-images COURSE=223015b"
|
|
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 " Optimized: $$(basename $$img)"; \
|
|
done || true'
|
|
@echo "Done! Originals in assets-original/"
|
|
endif
|
|
|
|
# Root index for /hdm/
|
|
HDM_DEPLOY_PATH = /home/tengo/html/hdm
|
|
|
|
build-index: build/.exists
|
|
@echo "Building root index..."
|
|
@mkdir -p build
|
|
@./scripts/generate-root-index.sh
|
|
|
|
# Deploy
|
|
define deploy_course
|
|
@echo "Deploying $(1)..."
|
|
scp build/$(1)/*.html $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/
|
|
scp build/$(1)/*.pdf $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ 2>/dev/null || true
|
|
scp build/$(1)/*.svg $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ 2>/dev/null || true
|
|
scp -r build/$(1)/assets/ $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/
|
|
scp -r build/$(1)/materials/ $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ 2>/dev/null || true
|
|
@echo "$(1) deployed!"
|
|
endef
|
|
|
|
deploy-b: build-b
|
|
$(call deploy_course,223015b)
|
|
|
|
deploy-c: build-c
|
|
$(call deploy_course,223015c)
|
|
|
|
deploy-index: build-index
|
|
@echo "Deploying root index..."
|
|
scp build/index.html $(DEPLOY_HOST):$(HDM_DEPLOY_PATH)/
|
|
scp build/qr-root.svg $(DEPLOY_HOST):$(HDM_DEPLOY_PATH)/ 2>/dev/null || true
|
|
@echo "Root index deployed!"
|
|
|
|
deploy: build-index deploy-b deploy-c deploy-index
|
|
@echo "All courses deployed!"
|
|
|
|
# Clean
|
|
clean:
|
|
@echo "Cleaning generated files..."
|
|
rm -rf build/ .dev-index/ *.pdf *.html qr-code.png
|
|
|
|
# Install dependencies
|
|
install:
|
|
@echo "Installing dependencies..."
|
|
npm install
|