#!/usr/bin/env bash # Legt den Asset-Ordner build/site/ zusammen, den wrangler.jsonc ausliefert: # site/ eigene statische Dateien (Kleid der Sammlungen, Favicons) # seite/ gebaute Startseite und Rahmen (seite/bau.mjs): index.html, # rahmen.html, en/, assets/ # build/vendor/* die drei Sammlungen aus scripts/vendor.sh # lizenzen/ LICENSES/ und vendor/QUELLEN.md (GPL/AGPL: Quellverweis # muss mit ausgeliefert werden) # _headers aus src/headers.json (scripts/headers.mjs) # Baut jedes Mal neu; build/site/ ist Wegwerf. set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" V="$ROOT/build/vendor" S="$ROOT/build/site" for s in it-tools cyberchef pdf; do [ -d "$V/$s" ] || { echo "zusammenlegen: $V/$s fehlt -- erst scripts/vendor.sh" >&2; exit 1; } done rm -rf "$S" mkdir -p "$S" # Eigene Dateien zuerst; eine Sammlung darf sie nicht ueberschreiben # (unterschiedliche Unterordner, Kollision waere ein Fehler im Aufbau). if [ -d "$ROOT/site" ]; then cp -r "$ROOT/site/." "$S/" rm -f "$S/.gitkeep" fi # Gebaute Seite an die Wurzel. Fehlt sie, bricht der Lauf ab: ohne sie # gaebe es keine Startseite, nur die Sammlungen. for f in index.html rahmen.html 404.html en assets lizenzen; do [ -e "$ROOT/seite/$f" ] || { echo "zusammenlegen: seite/$f fehlt -- erst node seite/bau.mjs" >&2; exit 1; } [ -e "$S/$f" ] && { echo "zusammenlegen: site/$f kollidiert mit seite/$f" >&2; exit 1; } cp -r "$ROOT/seite/$f" "$S/" done for s in it-tools cyberchef pdf; do [ -e "$S/$s" ] && { echo "zusammenlegen: site/$s kollidiert mit der Sammlung" >&2; exit 1; } # cp -l: Hardlinks statt Kopie, spart rund 630 MB; build/vendor wird nie # in place geaendert (vendor.sh baut per mv neu), also ungefaehrlich. cp -rl "$V/$s" "$S/$s" done mkdir -p "$S/lizenzen" cp "$ROOT"/LICENSES/* "$S/lizenzen/" cp "$ROOT/vendor/QUELLEN.md" "$ROOT/vendor/manifest.json" "$S/lizenzen/" # Quelltext des Workers, der Stylesheets in die Sammlungen haengt: Teil der # Aenderung an BentoPDF (AGPL-3.0 Abschnitt 13) und IT-Tools (GPL-3.0), also # offen ausgeliefert wie /kleid/. mkdir -p "$S/lizenzen/quelle" cp "$ROOT/src/worker.ts" "$S/lizenzen/quelle/worker.ts.txt" # .txt: .ts liefert Cloudflare als video/mp2t cp "$ROOT/src/headers.json" "$S/lizenzen/quelle/" # Steuerskripte von Bezug und Build: Teil der "Corresponding Source" # (AGPL-3.0 Abschnitt 1). .txt, damit sie als Text ausgeliefert werden. for f in vendor.sh bentopdf-build.sh zusammenlegen.sh headers.mjs; do cp "$ROOT/scripts/$f" "$S/lizenzen/quelle/$f.txt" done node "$ROOT/scripts/headers.mjs" "$S" # Groesse ueber find statt du: du zaehlt Hardlinks nur einmal. echo "zusammenlegen: $(find "$S" -type f | wc -l) Dateien, $(find "$S" -type f -printf '%s\n' | awk '{s+=$1} END {print s}') B in $S" >&2