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

+27
View File
@@ -6523,3 +6523,30 @@ button.ba-zeile:focus-visible { outline: 2px solid var(--accent); outline-offset
.ba-raute { width: 9px; height: 9px; margin-left: 2px; background: var(--meilenstein); transform: rotate(45deg); }
.ba-leer, .ba-hinweis { font-size: 12px; color: var(--text-subtle); padding: 4px 8px; }
.ba-hinweis { padding: 8px 0 0; }
/* ===========================================================================
ADMIN → UPDATE (loadAdminUpdate() in js/admin/admin.js): Statuszeile wie
bei Teams, Liste der neueren Versionen, Fortschritt eines laufenden Updates.
=========================================================================== */
#adminUpdateInhalt { display: grid; gap: 12px; }
.update-version { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.update-liste { display: grid; border: 1px solid var(--line-soft); border-radius: 8px; overflow: hidden; }
.update-eintrag { display: grid; grid-template-columns: 72px minmax(0, 1fr) auto; gap: 12px; align-items: baseline; padding: 8px 12px; font-size: 13px; }
.update-eintrag + .update-eintrag { border-top: 1px solid var(--line-soft); }
.update-eintrag .update-text { color: var(--text-muted); }
.update-eintrag .update-datum { font-family: var(--font-mono); font-size: 11px; color: var(--text-subtle); white-space: nowrap; }
.update-meldung { display: grid; gap: 4px; padding: 12px 16px; border-radius: 8px; background: var(--surface-sunk); font-size: 13px; }
.update-meldung > span { color: var(--text-muted); }
.update-meldung > button { justify-self: start; margin-top: 4px; }
.update-meldung.ist-ok { box-shadow: inset 3px 0 0 var(--green); }
.update-meldung.ist-fehler { box-shadow: inset 3px 0 0 var(--red); }
.update-meldung.ist-lauf { box-shadow: inset 3px 0 0 var(--accent); }
.update-schritte { list-style: none; margin: 4px 0; padding: 0; display: flex; gap: 16px; flex-wrap: wrap; font-size: 12px; color: var(--text-subtle); }
.update-schritte li { display: inline-flex; align-items: center; gap: 6px; }
.update-schritte li::before { content: ""; width: 8px; height: 8px; border-radius: 50%; border: 1px solid var(--line); }
.update-schritte li.ist-fertig::before { background: var(--green); border-color: var(--green); }
.update-schritte li.ist-jetzt { color: var(--text); }
.update-schritte li.ist-jetzt::before { background: var(--accent); border-color: var(--accent); }
.update-log { margin: 4px 0 0; max-height: 200px; overflow: auto; padding: 8px; border-radius: 6px; background: var(--surface);
font-family: var(--font-mono); font-size: 11px; line-height: 16px; white-space: pre-wrap; color: var(--text-muted); }
@media (max-width: 560px) { .update-eintrag { grid-template-columns: 72px minmax(0, 1fr); } .update-eintrag .update-datum { grid-column: 2; } }