Add sync/publish scripts for content changes made via Claude Code
Lets content edits pushed through Git reach the live admin-content volume (and vice versa) without silently overwriting whatever was changed through the admin editor UI in the meantime. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
a920880a20
commit
f75296da44
3 changed files with 79 additions and 0 deletions
|
|
@ -240,6 +240,43 @@ cd ~/stack && docker compose build admin && docker compose up -d admin
|
||||||
`content/site.json`, `content/theme.json` und hochgeladene Bilder bleiben unangetastet
|
`content/site.json`, `content/theme.json` und hochgeladene Bilder bleiben unangetastet
|
||||||
(liegen auf eigenen Volumes, nicht im Image).
|
(liegen auf eigenen Volumes, nicht im Image).
|
||||||
|
|
||||||
|
## Content-Updates über Git/Claude Code, ohne den Editor zu überschreiben
|
||||||
|
|
||||||
|
Seit es den Editor gibt, liegt der **echte Live-Inhalt** (`content/site.json`,
|
||||||
|
`content/theme.json`) auf eigenen Volumes auf dem Server, nicht mehr im
|
||||||
|
Git-Image – ein einfaches `git pull` + `docker compose build website`
|
||||||
|
ändert an den Live-Inhalten deshalb **nichts** mehr (das Seed-Skript befüllt
|
||||||
|
die Volumes nur einmalig, wenn sie leer sind).
|
||||||
|
|
||||||
|
Damit Claude Code trotzdem Content-Änderungen pushen kann, ohne Änderungen
|
||||||
|
zu überschreiben, die zwischenzeitlich über den Editor gemacht wurden, gibt
|
||||||
|
es zwei Skripte im Repo (auf dem Server, aus `~/stack` ausführen):
|
||||||
|
|
||||||
|
1. **Vor** einer Content-Änderung durch Claude Code: aktuellen Live-Stand
|
||||||
|
nach Git holen (nur nötig, falls seit dem letzten Mal über den Editor was
|
||||||
|
geändert wurde – bei keiner Änderung passiert nichts):
|
||||||
|
```bash
|
||||||
|
cd ~/stack
|
||||||
|
~/sites/larpaso-website/sync-content-from-live.sh
|
||||||
|
```
|
||||||
|
2. Im Chat mit Claude Code die gewünschte Änderung beschreiben – Claude
|
||||||
|
Code ändert `content/site.json`/`theme.json` lokal auf Basis des gerade
|
||||||
|
synchronisierten Stands, testet den Build und pusht nach `main`.
|
||||||
|
3. **Nach** dem Push: Git-Stand auf den Server holen und live veröffentlichen
|
||||||
|
(baut über denselben Weg wie „Speichern & veröffentlichen" im Editor,
|
||||||
|
ohne den `website`- oder `admin`-Dienst neu zu bauen):
|
||||||
|
```bash
|
||||||
|
cd ~/sites/larpaso-website && git pull
|
||||||
|
cd ~/stack
|
||||||
|
./sync-content-from-live.sh # kann man sich sparen, falls Schritt 1 schon frisch war
|
||||||
|
~/sites/larpaso-website/publish-content-to-live.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Wichtig:** Das gilt nur für `content/site.json`/`theme.json` (Texte,
|
||||||
|
Bilder-Referenzen, Design-Werte). Änderungen am Code selbst (`admin/`,
|
||||||
|
`src/`) laufen weiterhin über den normalen Weg (`docker compose build
|
||||||
|
website`/`admin` + `up -d`, siehe oben).
|
||||||
|
|
||||||
## Bekannte Grenzen
|
## Bekannte Grenzen
|
||||||
|
|
||||||
- Mehrere feste Logins möglich (`ADMIN_USERNAME`/`ADMIN_PASSWORD_HASH`, `_2`, `_3`, ...),
|
- Mehrere feste Logins möglich (`ADMIN_USERNAME`/`ADMIN_PASSWORD_HASH`, `_2`, `_3`, ...),
|
||||||
|
|
|
||||||
20
publish-content-to-live.sh
Normal file
20
publish-content-to-live.sh
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Spielt content/site.json + theme.json aus dem (frisch gepullten) Git-Stand
|
||||||
|
# zurück ins Admin-Volume und stößt denselben Build/Publish an, den auch der
|
||||||
|
# "Speichern & veröffentlichen"-Knopf im Editor auslöst. Auf dem Server
|
||||||
|
# ausführen, aus ~/stack, NACHDEM in ~/sites/larpaso-website ein
|
||||||
|
# `git pull` gemacht wurde:
|
||||||
|
# ./publish-content-to-live.sh ~/sites/larpaso-website
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO="${1:-$HOME/sites/larpaso-website}"
|
||||||
|
|
||||||
|
docker compose cp "$REPO/content/site.json" admin:/app/content/site.json
|
||||||
|
docker compose cp "$REPO/content/theme.json" admin:/app/content/theme.json
|
||||||
|
|
||||||
|
docker compose exec admin node -e "
|
||||||
|
require('/app/admin/lib/build.js').runBuild().then((r) => {
|
||||||
|
console.log(r.ok ? 'Veröffentlicht.' : ('Fehler: ' + r.error));
|
||||||
|
process.exit(r.ok ? 0 : 1);
|
||||||
|
});
|
||||||
|
"
|
||||||
22
sync-content-from-live.sh
Normal file
22
sync-content-from-live.sh
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Holt den aktuellen Live-Content (vom Admin-Editor bearbeitet) aus dem
|
||||||
|
# Server-Volume zurück nach Git, bevor Claude Code eine Content-Änderung
|
||||||
|
# macht. So geht nichts verloren, was seit dem letzten Sync über den
|
||||||
|
# Editor geändert wurde. Auf dem Server ausführen, aus ~/stack:
|
||||||
|
# ./sync-content-from-live.sh ~/sites/larpaso-website
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO="${1:-$HOME/sites/larpaso-website}"
|
||||||
|
|
||||||
|
docker compose cp admin:/app/content/site.json "$REPO/content/site.json"
|
||||||
|
docker compose cp admin:/app/content/theme.json "$REPO/content/theme.json"
|
||||||
|
|
||||||
|
cd "$REPO"
|
||||||
|
if git diff --quiet -- content/site.json content/theme.json; then
|
||||||
|
echo "Keine Änderungen – Git hat bereits den aktuellen Live-Stand."
|
||||||
|
else
|
||||||
|
git add content/site.json content/theme.json
|
||||||
|
git commit -m "Sync live content from admin panel"
|
||||||
|
git push
|
||||||
|
echo "Live-Inhalte wurden nach Git übernommen und gepusht."
|
||||||
|
fi
|
||||||
Loading…
Reference in a new issue