CI fuer Gitea Actions: Build und Tests auf Linux plus Waechter gegen Rueckfaelle

Die Plattformneutralitaet war nach dem WinForms-Ausbau eine Momentaufnahme: eine
einzige net10.0-windows-Zeile oder ein "using System.Drawing" genuegt, und der
Linux-Build ist kaputt, ohne dass es auf einer Windows-Maschine auffaellt - dort
baut es weiter. Genau das faengt die CI ab, und zwar auf Linux.

.gitea/workflows/ci.yml, zwei Jobs auf ubuntu-latest:

- build-test: restore, build, die 476 Tests (brauchen keine DB, laufen gegen
  EF-InMemory), Linux-Publish. Der Publish ist kein Selbstzweck - dort faellt
  auf, wenn ein Paket doch windows-only ist. Anschliessend wird geprueft, dass
  die Executable, appsettings.json, setup.json und libSkiaSharp.so wirklich im
  Ergebnis liegen.
- guard: keine windows-TFMs, kein UseWindowsForms/UseWPF, keine windows-only
  using-Direktiven, keine versionierten Secret-Dateien, keine anfaelligen Pakete.

Alle Waechter sind in beide Richtungen gegengeprueft: sie schlagen bei
simulierten Regressionen an (windows-TFM, UseWindowsForms, using System.Drawing,
getrackte packager.config.json samt dc_sub_-Token, Newtonsoft 11.0.2) und
schweigen beim Ist-Zustand. Die Namespace-Pruefung trifft bewusst nur echte
using-Direktiven: im Bestand steht an vielen Stellen erklaert, WARUM
System.Drawing nicht verwendet wird, und das darf keinen Fehlalarm ausloesen.

Der Schwachstellen-Check ist Punkt 1 der wiederkehrenden Audit-Checkliste aus
dem Sicherheitskonzept - laeuft ab jetzt bei jedem Push statt quartalsweise von
Hand. Er wuerde zum Beispiel anschlagen, wenn der Newtonsoft-Pin im Core faellt.

Bewusst kein -warnaserror: die 15 vorhandenen Warnungen muessten erst weg, sonst
ist die CI ab dem ersten Tag rot und wird ignoriert.

WICHTIG - die CI laeuft noch nicht: auf der Gitea-Instanz ist kein Actions-Runner
registriert (auf Repo-, Benutzer- und Instanzebene geprueft, ueberall 0).
has_actions ist true, es fehlt nur der Runner. Einrichtung Schritt fuer Schritt
in docs/LEITFADEN-CI.md Abschnitt 3.

.gitattributes neu: erzwingt LF fuer .yml/.sh/.service. Entwickelt wird mit
autocrlf=true auf Windows, ausgefuehrt auf Linux - ein Shell-Skript mit CRLF
scheitert dort mit irrefuehrenden Meldungen. Bisher gab es keine .gitattributes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-08-22 11:25:01 +02:00
co-authored by Claude Opus 5
parent 1fd3671b42
commit 5507db3e32
5 changed files with 321 additions and 4 deletions
+22
View File
@@ -0,0 +1,22 @@
# Zeilenenden
#
# Entwickelt wird auf Windows (core.autocrlf=true), ausgeführt wird auf Linux. Für die
# meisten Dateien ist das folgenlos - für die unten aufgeführten nicht: ein Shell-Skript
# oder eine systemd-Unit mit CRLF scheitert auf Linux mit irreführenden Meldungen
# ("command not found" für einen Befehl, der sichtbar dasteht - das \r gehört noch dazu).
# Deshalb wird für diese Dateien LF erzwungen, unabhängig von der lokalen Git-Konfiguration.
# Standard: Git entscheidet, im Repo immer LF
* text=auto
# Muss im Arbeitsverzeichnis LF bleiben - wird auf Linux ausgeführt
*.yml text eol=lf
*.yaml text eol=lf
*.sh text eol=lf
*.service text eol=lf
# Binärdateien nicht anfassen
*.png binary
*.ico binary
*.nupkg binary
*.pdf binary