Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6632ad5a80 | ||
|
|
ac343e9347 |
+13
-1
@@ -162,7 +162,11 @@ typecheck:
|
|||||||
# Farbcodes muessen raus: nx faerbt auch in der Pipe, und dann steht zwischen "error"
|
# Farbcodes muessen raus: nx faerbt auch in der Pipe, und dann steht zwischen "error"
|
||||||
# und "TS" eine Escape-Sequenz - ein grep auf "error TS" liefe ins Leere und das Tor
|
# und "TS" eine Escape-Sequenz - ein grep auf "error TS" liefe ins Leere und das Tor
|
||||||
# waere immer gruen, ohne je zu pruefen.
|
# waere immer gruen, ohne je zu pruefen.
|
||||||
- pnpm --dir apps/web lint:types 2>&1 | sed -r 's/\x1b\[[0-9;]*[mK]//g' | tee tsc.log || true
|
# Ganzer Baum, nicht nur apps/web: Bis 2026-08-20 brach `pnpm -r lint:types` an
|
||||||
|
# apps/desktop/electron-builder.ts ab (config.dmg moeglicherweise undefined) und
|
||||||
|
# erreichte apps/web nie - deshalb war der Job anfangs eng gefasst. Der Fehler ist
|
||||||
|
# behoben, damit deckt das Tor auch die Desktop-Pakete ab.
|
||||||
|
- pnpm -r --workspace-concurrency=1 lint:types 2>&1 | sed -r 's/\x1b\[[0-9;]*[mK]//g' | tee tsc.log || true
|
||||||
- |
|
- |
|
||||||
if grep -E "error TS[0-9]+" tsc.log | grep -v node_modules; then
|
if grep -E "error TS[0-9]+" tsc.log | grep -v node_modules; then
|
||||||
echo "FEHLER: Typfehler im eigenen Code (siehe oben)."
|
echo "FEHLER: Typfehler im eigenen Code (siehe oben)."
|
||||||
@@ -254,6 +258,10 @@ desktop_linux:
|
|||||||
image: registry.git.lab/axion1337.chat/threadnet-web/desktop-build:bullseye
|
image: registry.git.lab/axion1337.chat/threadnet-web/desktop-build:bullseye
|
||||||
needs:
|
needs:
|
||||||
- job: web
|
- job: web
|
||||||
|
# Seit 2026-08-20 prueft typecheck den ganzen Baum, also auch apps/desktop -
|
||||||
|
# dann darf auch kein Desktop-Paket ohne bestandene Pruefung entstehen.
|
||||||
|
- job: typecheck
|
||||||
|
artifacts: false
|
||||||
artifacts: true
|
artifacts: true
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_TAG =~ /^v/
|
- if: $CI_COMMIT_TAG =~ /^v/
|
||||||
@@ -295,6 +303,10 @@ desktop_windows:
|
|||||||
- windows
|
- windows
|
||||||
needs:
|
needs:
|
||||||
- job: web
|
- job: web
|
||||||
|
# Seit 2026-08-20 prueft typecheck den ganzen Baum, also auch apps/desktop -
|
||||||
|
# dann darf auch kein Desktop-Paket ohne bestandene Pruefung entstehen.
|
||||||
|
- job: typecheck
|
||||||
|
artifacts: false
|
||||||
artifacts: true
|
artifacts: true
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_TAG =~ /^v/
|
- if: $CI_COMMIT_TAG =~ /^v/
|
||||||
|
|||||||
@@ -234,7 +234,12 @@ if (variant["mac.icon"]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (variant["dmg.badgeIcon"]) {
|
if (variant["dmg.badgeIcon"]) {
|
||||||
config.dmg.badgeIcon = variant["dmg.badgeIcon"];
|
// `!`, weil Upstreams Configuration-Interface oben zwar linux/win/mac/deb
|
||||||
|
// verpflichtend macht, dmg aber nicht - der Wert steht literal in config.
|
||||||
|
// Dort eine Zeile zu ergaenzen waere die schoenere Loesung und genau die
|
||||||
|
// Aenderung an Upstreams Block, die der Kommentar oben vermeiden will.
|
||||||
|
// Dasselbe Idiom nutzt die Datei weiter unten fuer win.signtoolOptions.
|
||||||
|
config.dmg!.badgeIcon = variant["dmg.badgeIcon"];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -55,6 +55,11 @@ Beide behoben.
|
|||||||
|
|
||||||
## 4. Merge-Reibung: was ein Upstream-Update wirklich kostet
|
## 4. Merge-Reibung: was ein Upstream-Update wirklich kostet
|
||||||
|
|
||||||
|
> ⚠️ **Historisch seit 2026-08-19.** Dieser Abschnitt beschreibt den Zustand *ohne*
|
||||||
|
> gemeinsamen Vorfahren. Der ist behoben — siehe „Upstream-Update seit dem Anschluss"
|
||||||
|
> weiter unten. Der Abschnitt bleibt stehen, weil er die Messungen enthält, auf denen
|
||||||
|
> die Entscheidung beruht (management ADR-0022).
|
||||||
|
|
||||||
*Arbeitspaket 3 aus ThreadNet-Web#7. Gemessen am 2026-08-06, nicht geschätzt.*
|
*Arbeitspaket 3 aus ThreadNet-Web#7. Gemessen am 2026-08-06, nicht geschätzt.*
|
||||||
|
|
||||||
### Die unangenehme Grundlage zuerst
|
### Die unangenehme Grundlage zuerst
|
||||||
@@ -214,3 +219,65 @@ git diff v1.12.17 v1.12.26 -- <datei> # was Upstream seither geaendert ha
|
|||||||
|
|
||||||
⚠️ Ein flacher Fetch liefert **keine Historie**: `git merge-base`, `git log` über
|
⚠️ Ein flacher Fetch liefert **keine Historie**: `git merge-base`, `git log` über
|
||||||
Upstream und ein Graft-Versuch brauchen `git fetch upstream` ohne `--depth`.
|
Upstream und ein Graft-Versuch brauchen `git fetch upstream` ohne `--depth`.
|
||||||
|
|
||||||
|
## Upstream-Update seit dem Anschluss (seit 2026-08-19)
|
||||||
|
|
||||||
|
**Der Fork hängt wieder an der Upstream-Historie.** Am 2026-08-19 wurde `v1.12.26` mit
|
||||||
|
einem echten Merge-Commit hereingeholt (`88c4e15`, beide Eltern: unser bisheriger
|
||||||
|
`main` `fa5dcc5` und `c43ef70b` = `v1.12.26`). Entscheidung und Messungen stehen in
|
||||||
|
management ADR-0022 und #0099.
|
||||||
|
|
||||||
|
Ein Update ist damit ein **gewöhnlicher Merge** — kein Auftragen von Patches mehr:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git fetch upstream # ohne --depth, sonst fehlt die Historie
|
||||||
|
git merge v1.12.27 # oder der gewuenschte Tag
|
||||||
|
```
|
||||||
|
|
||||||
|
### Worauf beim Auflösen zu achten ist
|
||||||
|
|
||||||
|
Der Merge meldet jetzt, wenn Upstream eine Datei verschiebt, die wir angefasst haben —
|
||||||
|
das war der Zweck der Übung, und es hat beim ersten Mal funktioniert (die Umbenennung
|
||||||
|
`RoomListItemAccessibilityWrapper` → `RoomListItemWrapper` kam als Konflikt).
|
||||||
|
|
||||||
|
⚠️ **Was er NICHT meldet, ist der umgekehrte Fall:** Beide Seiten überleben die
|
||||||
|
Auflösung, und nur eine ergibt noch Sinn. Genau das brach `v0.6.0-rc.2` in Produktion —
|
||||||
|
in `RoomListItemViewModel.ts` blieb eine `getValue`-Zeile auf den von Upstream
|
||||||
|
entfernten Labs-Schalter `feature_room_list_sections` stehen, direkt über der neuen
|
||||||
|
Zeile mit `RoomList.showSections`. Niemand las sie, sie warf trotzdem — bei jedem
|
||||||
|
Raumlisteneintrag.
|
||||||
|
|
||||||
|
Nach dem Auflösen deshalb auf **überlebende** Reste prüfen, nicht nur auf verlorene
|
||||||
|
Zeilen. Der billigste Hebel ist `pnpm -r lint:types`; er fand beide Reste sofort. Wo
|
||||||
|
Zeichenketten statt Typen im Spiel sind — Einstellungsschlüssel, Feature-Namen,
|
||||||
|
Übersetzungs-IDs — reicht das nicht, dort braucht es einen Abgleich gegen die
|
||||||
|
jeweilige Registry.
|
||||||
|
|
||||||
|
### Das Tor in der CI
|
||||||
|
|
||||||
|
`typecheck` in `.gitlab-ci.yml` prüft `pnpm -r lint:types` über den ganzen Baum;
|
||||||
|
`docker_web`, `desktop_linux` und `desktop_windows` führen ihn als `needs`. **Kein
|
||||||
|
Artefakt entsteht ohne bestandene Typprüfung.**
|
||||||
|
|
||||||
|
Maßstab ist „kein Fehler außerhalb von `node_modules`", nicht „`tsc` sauber": Upstream
|
||||||
|
v1.12.26 ist selbst nicht typrein — `matrix-js-sdk@42.2.0` wirft drei Fehler in der
|
||||||
|
eigenen Quelle (`skipLibCheck` deckt nur `.d.ts` ab), nachgeprüft in einem sauberen
|
||||||
|
v1.12.26-Checkout. Fällt das bei einem Upstream-Wechsel weg, verschärft sich der Job
|
||||||
|
von allein.
|
||||||
|
|
||||||
|
Der Job existiert, weil `web` **nur baut**: webpack entfernt Typen, ohne sie zu prüfen,
|
||||||
|
und ein unbekannter Einstellungsschlüssel ist zur Bauzeit bloß ein String. `tsc` meldete
|
||||||
|
den rc.2-Fehler die ganze Zeit — gefragt hatte ihn niemand.
|
||||||
|
|
||||||
|
### Fallstricke, die beim ersten Mal Zeit gekostet haben
|
||||||
|
|
||||||
|
- **`--depth=1` geholte Tags** tragen eine `.git/shallow`-Grenze. Jeder Merge-Versuch
|
||||||
|
scheitert dann mit „refusing to merge unrelated histories", was wie ein
|
||||||
|
Grundproblem aussieht und keines ist. `git fetch --unshallow upstream` löst es.
|
||||||
|
- **`.npmrc` muss im Docker-Build-Kontext liegen**, sonst löst pnpm `@sorb/*` gegen
|
||||||
|
npmjs auf. Unter pnpm 10 fiel das nicht auf, weil `--frozen-lockfile` die gepinnte
|
||||||
|
Tarball-URL nahm; pnpm 11 prüft mit `minimumReleaseAgeStrict` jeden Eintrag und löst
|
||||||
|
wieder auf (management #0055).
|
||||||
|
- **Der Gitea-Spiegel** trägt nach dem Merge 70.000 fremde Commits. Der Erstschub
|
||||||
|
scheitert, wenn das Ziel-Repo nicht sauber gepackt ist — erst dessen Zustand messen
|
||||||
|
(`count-objects -vH`, freier Platz), dann übertragen (#0099).
|
||||||
|
|||||||
Reference in New Issue
Block a user