Update über den Git-Server, Tests, Repo ohne node_modules und Sicherungen

- Admin → Update: neuere Versionen (Tags) vom Git-Server anzeigen und per
  Knopf einspielen; ausgeführt vom Dienst auf dem Rechner
  (Docker/update-einrichten.sh, Docker/update-ausfuehren.sh), nur vorwärts,
  Fehler bei ausbleibendem Neustart, abgebrochene Läufe sperren nicht
- Tests (npm test): Zusammenführen paralleler Änderungen, Rechteprüfung
  beim Speichern; SESSIONS_DIR lenkt den Datenordner für Testserver um
- node_modules, Sicherungen und Uploads aus dem Repo genommen
- cors und requireRole() entfernt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
erikandClaude Opus 5.5 committed 2026-11-10 11:10:56 +01:00
1 parent e12936444d
commit fd44db2213
2357 files changed
+588 -514948

No files matched your search

+40 -3
View File
@@ -4375,6 +4375,36 @@ kopieren, „In Outlook öffnen“ (`webcal:`-Link), Anleitung, „Neue Adresse
Microsoft-Server aus dem Internet ab — dafür muss der Server von außen
erreichbar sein. Das klassische Outlook am PC holt es im Firmennetz direkt.
## Update über den Git-Server (Admin → Update)
Eriks Wunsch: Neue Versionen vom Git-Server auf Anfrage im Admin-Bereich
sehen und per Knopf einspielen. **Eine Version ist ein Tag `vX.Y.Z`**
(annotiert, die Nachricht ist der Änderungstext) auf `main`.
- **App** (`server.js`, Abschnitt „Update über den Git-Server“, Recht
**`a.update`**): `GET /admin/update[?suchen=1]` liest
`sessions/update/installiert.json`/`status.json` und fragt nur mit
`suchen` den Git-Server (Gitea-API `UPDATE_REPO_API` aus
`docker-compose.yml`, `/tags`) nach neueren Versionen; bei einem Fehler
kommt das Ende von `update.log` mit. `POST /admin/update {version}` prüft
Muster und Existenz der Version und legt `sessions/update/auftrag.json` ab
(409, solange ein Update läuft oder der Dienst fehlt). Karte
`#adminUpdateCard`, `loadAdminUpdate()` in `js/admin/admin.js`: Suchen,
Liste neuerer Versionen, zweistufiges „Update installieren“, Fortschritt
(fragt alle 5 s, auch über den Neustart hinweg), danach „Seite neu laden“.
- **Rechner, nicht Container**: Der Container bekommt keinen Zugriff auf
Docker. `sudo bash Docker/update-einrichten.sh` (einmal, im Klon des
Repos) richtet `projektuebersicht-update.path`/`.service` ein (systemd
wartet auf `auftrag.json`), legt `sessions/update/` für uid 1000 an und
vermerkt die laufende Version (nächster Tag). `Docker/update-ausfuehren.sh`
(alles in `main()`, weil der Checkout das Skript im Lauf ersetzt): Auftrag
lesen und löschen, `git fetch --tags`, bei lokalen Code-Änderungen
(außer `sessions/`) abbrechen, `git checkout --detach <tag>`, `docker
compose build` (alte Version läuft weiter; schlägt es fehl, zurück auf den
vorigen Stand), `up -d`, auf `/health` warten, `installiert.json`
schreiben. Fortschritt in `status.json`, Protokoll in `update.log`.
- Die Datenbank sichert der Server wie bei jedem Start selbst. Das Repo auf
dem Rechner steht nach einem Update auf einem losgelösten HEAD (Tag).
## Teams: persönliche Nachricht bei neuen Aufgaben
Eriks Wunsch („nur persönlich“): Wird jemandem eine Aufgabe zugewiesen,
@@ -4979,6 +5009,13 @@ und den Verlauf-Kacheln (ohne Verfasser). Stile `.kommentar-gewerke`,
- Git repo; commits are German (e.g. "PDF Export von A4 auf A3 …"). Remote:
`http://192.168.3.187:3000/erik/projektuebersicht.git`.
- No linter, formatter, typecheck, or test suite. Manual verification only:
start server, open `http://localhost:3003`, exercises the relevant tab,
confirm SQLite changes (the DB file `sessions/projektuebersicht.db` grows).
- No linter, formatter or typecheck. **Tests:** `npm test` (`node --test
test/`, keine Abhängigkeit) — `test/zusammenfuehren.test.js` prüft
`dreiwegeZusammenfuehren()` (lädt `public/js/store.js` per `vm`),
`test/rechte.test.js` startet einen echten Server mit leerer Datenbank in
einem Wegwerf-Ordner (`SESSIONS_DIR`/`DB_PATH`, damit keine Sicherung im
echten `sessions/` landet) und prüft die Rechteprüfung beim Speichern.
Sonst manuell: start server, open `http://localhost:3003`, exercise the
relevant tab, confirm SQLite changes.
- **`SESSIONS_DIR`** (Umgebungsvariable) lenkt den Datenordner um
(Sicherungen, Uploads, Update-Auftrag) — für jeden Testserver setzen.