Standalone Project Generator für W1 System Anwendungen.
Detaillierte Architekturdokumentation: doc/skeleton-project-generator.md
Push- und Deploy-Nutzung: doc/workspace-push-usage.md
# Aus dem Parent-Verzeichnis (wo w1-system-core-sceleton liegt)
node w1-app-creator/create-project.mjs
# Mit Optionen
node w1-app-creator/create-project.mjs --clone-deps --clone-org werk1- Node.js >= 20
- Ohne
--clone-deps:w1-system-core-sceletonundw1-system-core-v2im Parent oder über--skeleton/--core-v2angeben - Mit
--clone-deps: Alles wird automatisch in den Workspace geklont
core-v2wird nur bei Vollprojekt benötigt – nicht bei--skeleton-only. Das Skeleton selbst referenziert keinecore-v2-Dateien.
Alle Optionen sind optional – ohne Angabe werden sie interaktiv abgefragt. CLI-Argumente überschreiben die interaktiven Defaults.
| Option | Beschreibung |
|---|---|
--dry-run |
Nur simulieren, keine Dateien schreiben |
--force |
Zielverzeichnis ohne Rückfrage überschreiben |
--clone-deps |
@werk1-Pakete von GitHub klonen (interaktiv abgefragt wenn nicht gesetzt) |
--clone-git-host <host> |
Git-Host (interaktiv, Default: github.com, z.B. werk1.github.com) |
--clone-branch <branch> |
Branch für Klone (interaktiv, Default: main) |
--clone-org <org> |
GitHub-Organisation (interaktiv, Default: aus Projekt-Setup) |
--skeleton <path> |
Pfad zu w1-system-core-sceleton (überspringt Auto-Detection) |
--core-v2 <path> |
Pfad zu w1-system-core-v2 (überspringt Auto-Detection) |
Mit --clone-deps wird automatisch ein isoliertes Workspace erstellt, das alles enthält – auch sceleton und core-v2:
workspace-<projektname>/
├── <projektname>/ ← generierte App
├── w1-system-core-sceleton/ ← geklont (immer)
├── w1-system-core-v2/ ← geklont (nur bei Vollprojekt)
├── w1-system-carouselblock/ ← geklont
├── w1-system-videoblock/ ← geklont
└── ...
Wichtig:
- Im Workspace-Modus wird
sceletonimmer ins Workspace geklont.core-v2wird nur bei Vollprojekt geklont –--skeleton-onlybenötigt es nicht. - Bestehende Repos werden mit
git pullaktualisiert. - @werk1-Pakete werden in definierter Reihenfolge gebaut (Basis → Blöcke → Media → IDML/Article).
- Einzelne Build-Fehler stoppen nicht den gesamten Prozess – fehlgeschlagene Pakete werden geloggt.
w1-app-creator/
├── create-project.mjs # Einstiegspunkt
├── package.json # Tool-Metadaten
├── lib/ # Generator-Logik
│ ├── prompt.mjs # Interaktive Abfragen
│ ├── resolve-deps.mjs # Modul-Katalog
│ ├── copy-skeleton.mjs # Skeleton kopieren
│ ├── copy-modules.mjs # Modul-Dateien kopieren
│ ├── render-templates.mjs # Templates rendern
│ ├── clone-deps.mjs # @werk1 Pakete klonen
│ └── post-gen.mjs # Post-Generation Hooks
├── templates/ # Alle Template-Dateien (*.tpl.mjs)
├── autodeploy-multi/ # Build- und Deploy-Scripts (werden bei jedem Push aktualisiert)
│ ├── build_and_deploy_multi-repo.sh
│ ├── multi_repo_build.sh
│ ├── Dockerfile_Multi
│ └── Dockerfile_Multi_Autodeploy_Builder
└── doc/ # Dokumentation
- Verwendet
w1-system-core-sceletonfür Skeleton-Quellen und Templates - Verwendet
w1-system-core-v2für optionale Modul-Dateien - Beide werden automatisch geklont wenn nicht vorhanden
Der Creator rendert u.a. folgende Dateien ins Zielprojekt:
README.md– projektspezifisches README mit allen relevanten Scripts (dev,build,update, Push, Autodeploy), Docker-Compose-Workflow (dev:docker*) und Beschreibung desautodeploy/multi/-Stacks. Mode-abhaengig (Workspace vs. klassisch).W1_GENERATION_REPORT.md– Abschlussbericht ueber aktivierte Module, kopierte Dateien und erzeugte Templates.scripts/push.sh/push.bat/push.ps1– klassischer Push auf den Build-Server.scripts/workspace-push-node.mjs– Node-basierter Push fuer den Workspace-Modus (erstellt Git-Bundles aller@werk1-Pakete).scripts/workspace-update.mjs– aktualisiert im Workspace-Modus alle viafile:-Deps eingebundenen@werk1-Pakete pergit pullund baut nur Pakete neu, derenHEADsich geaendert hat (siehenpm run update).scripts/docker-dev-app.sh/scripts/run-docker-dev.mjs– lokaler Dev-Stack viadocker-compose.dev.yml(npm run dev:dockeretc.).autodeploy/multi/*– Build- und Deploy-Scripts (werden bei jedem Push mitsynchronisiert).create-nfs-volume.sh– nur beiarticleblock/articleblock-fullmit aktivierter NFS-Option.
MAIN_PROJECT_NAMEin.env.autodeploy= Projektname aus dem CreatorSSH_PRIVATE_KEYwird nur im klassischen Modus benötigt (GitHub-Clone auf Build-Server); im Workspace-Modus entfällt er- Passwort-Auth über
SSH_ASKPASS– keinsshpasserforderlich - Autodeploy-Scripts (
build_and_deploy_multi-repo.sh,multi_repo_build.sh, Dockerfiles) werden bei jedem Push auf den Build-Server aktualisiert - Bundle-Modus: Wenn
BUILD_SSH_DIR/bundles/Bundles enthält, klont der Build-Server daraus – kein GitHub-Zugriff nötig - Deploy-Server-Check via SSH-Hop durch Build-Server – nur Warnung bei fehlendem Verzeichnis, kein Abbruch
- Beim Generieren eines Projekts mit
articleblockoderarticleblock-fullfragt der Creator "NFS hinzufügen?" (Default: ja) - Bei aktiver NFS-Option setzt der Generator:
NFS_SERVER_ADDR=192.168.1.115(Default) in.env.exampleund.env.autodeploy- Generiert
create-nfs-volume.shim Projekt-Root (idempotent – legt das Docker-Volumenfs_data_idmlnur an, wenn es noch nicht existiert) - Bindet in
docker-compose.ymldas externe Volumenfs_data_idmlals/dataein
- Alle Push-Skripte (
push.sh,push.ps1,push.bat,workspace-push-node.mjs) kopierencreate-nfs-volume.shzusätzlich zu den Autodeploy-Dateien auf den Build-Server build_and_deploy_multi-repo.shüberträgtcreate-nfs-volume.shauf den Deploy-Server und führt es vordocker compose upin einem Subshell ((cd … && ./create-nfs-volume.sh)) aus- SSH zum Deploy-Server läuft key-only (
BatchMode=yes)