Belegen, dass Giteas paths-ignore in ci.yml wirklich greift #11
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Eine Beobachtung, kein Bauauftrag
Am 2026-08-30 hat
.gitea/workflows/ci.ymleinpaths-ignorebekommen, damit reine Inhaltsänderungen kein CI mehr auslösen —publishfasst bei jedem Ingestkb/,raw/undwork/an, und die volle Suite dafür zu fahren ist Lärm.Belegt ist das nicht. Dass Gitea die Muster genauso auswertet wie GitHub, ist eine Annahme. Sie kostet nichts, wenn sie stimmt, und sie ist mit einer einzigen Beobachtung zu prüfen — deshalb dieses Issue statt einer Zeile Code.
Der Grund für die Vorsicht: in genau dieser Sache wurde in derselben Session schon einmal falsch geschlossen. Aus zwei Wiki-Szenarien wurde abgeleitet,
actions/checkoutliefe auf einem Nicht-Node-Image; das kostete sechs fehlgeschlagene Runs (46–51).Der aktuelle Stand in
ci.ymlDrei Entscheidungen, die beim Anfassen erhalten bleiben sollten:
kb/CONTRACT.mdfehlt bewusst. Es liegt unter einem Inhaltsverzeichnis, gehört aber zum Stack (das Version-Gate zählt[^/]+/CONTRACT\.mdzu den Stack-Pfaden). Es muss sein CI behalten. Dasselbe gilt fürraw/,work/,reports/— deshalb überall*/**statt**.!**/CONTRACT.md-Negat. Ob Gitea Negationen in Filtermustern unterstützt, ist nicht belegt.pushundpull_request). GitHubs Parser lehnt Anchors ab, für Giteas ist nichts dokumentiert.Die Muster sind so gewählt, dass ein Irrtum fail-open endet: alles Unvorhergesehene löst CI aus, statt still übersprungen zu werden.
Wie der Beleg aussieht
Nichts zu bauen. Nach dem nächsten reinen Inhalts-Publish (nur
kb/,raw/,work/im Commit — der Normalfall bei einem Ingest):head_shaerscheint kein Run → Filter greift, Issue schließen.Nützlich zum Gegenprüfen: Commit
b94166b(nurTODO.md) hat berechtigt CI ausgelöst —TODO.mdsteht nicht in der Ignore-Liste. Ein Publish, derkb/log.mdmitschreibt, ist der eigentliche Testfall.Falls der Filter nicht greift
Zwei Wege, in dieser Reihenfolge:
**anders gebunden wird als bei GitHub; dann tut es eine einfachere Form wiekb/**plus separater Umgang mit den Contract-Dateien.^(tools/|types/|instructions/|AGENTS\.md$|[^/]+/CONTRACT\.md$)— und beendet den Job früh, wenn nichts davon dabei ist. Kostet einen anlaufenden Container je Publish, ist dafür unabhängig von Giteas Glob-Semantik.Akzeptanzkriterien
head_shaund Ergebnis hier notiert.ci.yml, damit die nächste Person ihn nicht erneut für eine Annahme hält.ci.ymlwird entsprechend korrigiert.Der Filter greift. Beobachtung liegt vor, nichts zu bauen.
Der Beleg
actions_run_read: list_runsüber die letzten vier Commits aufmain:6f54c31adfa220f916376kb/undraw/40adbb7f916376ist der gesuchte Testfall — ein reiner Inhalts-Publish aus einem Ingest. Er hatkb/index.md,kb/log.md,kb/provenance.md, acht Seiten unterkb/*/**und eine Datei unterraw/notes/angefasst, also ausschließlich Pfade aus der Ignore-Liste. Für seinenhead_shaerscheint kein Run.Die Stack-Commits davor und danach zeigen zum Vergleich je zwei Runs (CI plus Release, weil
VERSIONsich bewegte). Der Unterschied liegt also am Filter und nicht daran, dass zufällig gerade kein Runner lief.Gitea wertet diese Muster damit so aus wie GitHub. Die drei Entscheidungen aus dem Issue-Text bleiben unberührt:
kb/CONTRACT.mdfehlt weiterhin absichtlich in der Liste, kein!-Negat, kein YAML-Anchor.Zweites Akzeptanzkriterium
Der Befund steht jetzt im Kommentarkopf von
.gitea/workflows/ci.yml(5426a6e), damit ihn niemand erneut für eine Annahme hält:Wirkung auf #9
Die Wechselwirkung, die das Issue am Ende nennt, löst sich zugunsten von #9 auf: weil der Filter greift, läuft
lint --fail-on-errorbei einem Inhalts-Publish tatsächlich nicht mehr mit. Der nächtliche Drift-Check verliert damit keinen Teil seiner Begründung, sondern behält den wichtigsten.