chore(repo): Umzug nach Gitea — GitHub bleibt Klon, main von Hand gespiegelt (D95)
Deploy to GitHub Pages / build (push) Canceled after 0s
Deploy to GitHub Pages / deploy (push) Canceled after 0s

Zuhause ist künftig git.javagil.de/mi/werkbaum (origin); GitHub bleibt unter
dem Remote `github` ein Klon, den scripts/push-github.sh mit `main` versorgt —
nur vorwärts, nie erzwungen.

Der Klon bleibt aus zwei gemessenen Gründen: Gitea sendet auf raw-Dateien kein
Access-Control-Allow-Origin (nachgemessen an mi/werkdock), die
?sourceUrl=-Beispiellinks der READMEs müssen also auf raw.githubusercontent.com
zeigen; und der Pages-Workflow lässt sich nicht mitnehmen.

Footer, llms.txt und llms.md zeigen jetzt auf Gitea (Repo-Seite ohne Anmeldung
lesbar, HTTP 200 geprüft); beide COMMIT_URL-Stellen (deploy-prod.sh und der
Pages-Workflow) ziehen mit. deploy-prod.sh prüft origin und github getrennt und
erinnert an das Spiegeln, statt selbst zu pushen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-09-03 17:26:15 +02:00
co-authored by Claude Opus 5
parent 736e9c1d88
commit 29a217f892
12 changed files with 236 additions and 23 deletions
+5
View File
@@ -17,6 +17,11 @@ the git history of `docs/examples/werkbaum.werkbaum`. A day can therefore carry
a link without having a note (someone forgot to write one) — but never the
reverse.
## 2026-09-03
- The project moved to its own Gitea at git.javagil.de — the footer's repository and version links point there now, and GitHub stays a clone carrying the very same commits
- Every push is built by Werkator, the project's own CI, alongside the GitHub Pages build: backend and frontend as two named builds
## 2026-09-02
- Running the installed app and a browser tab side by side works now: text, names and earlier states live under their own storage key per document and deleting leaves a tombstone, so windows stop deleting each other's work
+55
View File
@@ -9089,3 +9089,58 @@ die Browser-Fläche war verborgen, getippt wurde per `value` + `input`
D91-Nachtrag 9), und der Live-Feed ruht im dauerhaft verborgenen
Automatisierungs-Tab (D76-Nachtrag 1) — dass B A's Zeile sieht, ist deshalb
über die Antwort auf den eigenen PATCH gemessen, nicht über den Feed.
## D95 — Das Repo zieht nach Gitea; GitHub bleibt ein Klon, von Hand gespiegelt (2026-09-03)
Werkbaum lag auf GitHub. Seit Werkator (die eigene CI, https://werkator.javagil.de)
die Builds fährt und `werkdock` bereits auf `git.javagil.de` liegt, gehört auch
Werkbaum dorthin: **`origin` ist jetzt `mi/werkbaum` auf Gitea**, GitHub bleibt
als **Klon** unter dem Remote `github` stehen.
**Der Klon ist kein Andenken, sondern zwei gemessene Zwänge:**
- **CORS.** Die Beispiel-Links beider READMEs laden ihre Pläne per
`?sourceUrl=` (D23) — und das geht nur, wenn die Quelle
`Access-Control-Allow-Origin` sendet. Nachgemessen an
`https://git.javagil.de/mi/werkdock/raw/branch/main/README.md` (mit
`Origin:`-Header): HTTP 200, `Access-Control-Expose-Headers`, aber **kein
`Access-Control-Allow-Origin`**. Ein Beispiel-Link auf Gitea liefe also
genau in den Fehler, den D23 als häufigsten benennt. `raw.githubusercontent.com`
sendet ihn (D24) — die Beispiel-Links bleiben deshalb dort.
- **GitHub Pages.** Die „latest build“-Instanz (D16) ist ein
Actions-Workflow und lässt sich nicht mitnehmen. Sie bleibt, und sie baut,
sobald `main` auf dem Klon ankommt.
**Gespiegelt wird von Hand, und nur `main`** (`scripts/push-github.sh`).
Feature-Branches und Tags bleiben in Gitea; was auf GitHub steht, ist der
veröffentlichte Stand. Erwogen und verworfen: **ein `origin` mit zwei
Push-URLs** (spiegelt bei jedem Push, auch bei Zwischenständen, und ein
Fehler an einer der beiden Seiten bricht den Push) und der **Voll-Mirror**
(`--mirror` löscht auf GitHub Branches, die in Gitea verschwunden sind — bei
einem öffentlichen Klon die unhöflichste Variante).
**Der Deploy spiegelt nicht, er erinnert.** `scripts/deploy-prod.sh` prüft
jetzt zweierlei getrennt: ob HEAD auf **origin (Gitea)** liegt — daran hängt
der Footer-Versionslink — und ob er auf **github** liegt; fehlt das zweite,
nennt es den Skript-Namen. Ausdrücklich so entschieden (Multiple-Choice): Ein
Deploy, der nebenbei woanders hin pusht, tut mehr, als sein Name sagt.
**Nie erzwungen.** Liegt `github/main` nicht in der Historie von `main`,
bricht das Spiegel-Script ab und zeigt `git log main..github/main`. Ein
Force-Push auf einen Klon, den andere geklont haben, ist eine bewusste
Handlung und keine Zeile in einem Hilfsskript.
**Die Links im Produkt zeigen auf Gitea** — Footer-Repo-Link und
Footer-Versionslink (`…/commit/<sha>`, D16), `llms.txt` und `llms.md` (D43).
Voraussetzung geprüft: Die Gitea-Instanz liefert Repo-Seite und API **ohne
Anmeldung** (HTTP 200). Die SHAs sind auf beiden Seiten dieselben, der Link
bleibt also auch für jemanden auflösbar, der vom Klon kommt. Beide
`COMMIT_URL`-Stellen ziehen mit — `deploy-prod.sh` **und** der
Pages-Workflow; das ist dieselbe Doppelpflege, die D16 schon für die
`sed`-Regeln benannt hat.
**Werkator:** Die `gitea:`-Sektion der `.werkator.yml` nennt jetzt
`git.javagil.de` / `mi` / `werkbaum` statt der GitHub-Platzhalter, und der
beobachtete Klon `~/werkbaum` auf mih09 bekommt Gitea als `origin` — sonst
sähe der Watcher neue Commits erst nach dem Spiegeln. **Status-Checks werden
weiterhin nicht gepostet**, solange auf der Instanz kein Gitea-Token liegt;
die Sektion ist bis dahin eine Beschriftung.
+13
View File
@@ -124,6 +124,8 @@
- [^] #bld.backend.proxy: Apache passes /api/ on, in .htaccess (XS) %% measured: the P flag is allowed
- [^] #bld.backend.remote: One command for everything on the server (S) %% remote <target> <action>
- [^] #bld.backend.backup: Save the database, and prove it can be read back (XS)
- [x] #bld.werkator: Also built by Werkator, the project's own CI (S) %% .werkator.yml, backend + frontend
- [x] #bld.gitea: The repository lives on Gitea, GitHub stays a clone (S)
- [-] #bld.ghpages: Deploy through a gh-pages branch (S) %% GitHub Actions instead
- [-] #bld.gfonts: Fonts from Google (XS) %% self-hosted, no third-party request
- [ ] #be: Backend (XL)
@@ -853,6 +855,17 @@
taken while the service runs can be torn. Stop, fetch, start again — and read
the archive back before trusting it.
#bld.werkator
Werkator, the project's own declarative CI, builds every push from a
committed .werkator.yml — backend and frontend as two named builds. It builds
and tests only; deploying stays with the scripts.
#bld.gitea
The repository moved to Gitea; GitHub stays a clone that carries the
published main. The clone is not sentiment: the Pages instance hangs off it,
and so do the example links, which need a raw endpoint that sends CORS
headers.
#bld.ghpages
Rejected: the official Actions route needs no extra branch and no deploy
key.