Die drei Modul-Fenster sind portiert; die Avalonia-Shell zeigt jetzt
dieselben sieben Ansichten wie die WinForms-Shell.
- CongressTradingWindow: Kennzahlen als Kacheln, manueller Scrape-Ausloeser,
offene Positionen des Moduls.
- SupervisorWindow: Analyse mit Live-Anzeige der Tool-Aufrufe, Dossier-
Browser mit Splitter, Berichte, Hinweise. Der Hinweistext nennt jetzt die
Betriebszeitzone, weil die Tagesbericht-Stunde in ihr gilt und nicht in
der Zeitzone des Rechners.
- AccountingWindow: gemeinsame Filterleiste, Uebersicht/BWA, Ledger, Steuer
(Platzhalter), Export und Abruf/Status.
Ersetzte WinForms-Bausteine:
- SaveFileDialog -> IStorageProvider.SaveFilePickerAsync (asynchron, anderer
Zuschnitt). Betrifft die drei Exporte des Accounting-Moduls.
- MessageBox bei Fehlern -> Statuszeile im Fenster. Ein modaler Dialog fuer
einen fehlgeschlagenen Ladevorgang war ohnehin zu laut.
- Anonyme Typen an DataGridView.DataSource -> benannte Records. Kompilierte
Bindings pruefen die Spalten dadurch beim Kompilieren; ein Tippfehler in
einer Spaltendefinition (Binding="{Binding Profile}}") ist beim Build
aufgefallen statt im Betrieb.
Accounting-Betraege werden beim Laden gegen InvariantCulture formatiert, das
Delta eines Ingest-Laufs ist nullable behandelt (ohne Saldo-Anker gibt es
keins) - vorher waere dort eine NullReferenceException moeglich gewesen.
CI-Matrix (Gitea Actions, Actions-kompatibel): ubuntu-latest und
windows-latest. Sie ist der Waechter gegen Rueckfaelle - ein neues
DateTime.Now, ein ToString ohne Formatanbieter oder eine WinForms-Referenz
im Core faellt auf dem Entwicklungsrechner nicht auf, hier schon. Der
Linux-Lauf baut bewusst NICHT die ganze Mappe, weil IBKRTrader.App
(net10.0-windows) dort nicht baubar ist; die Aufzaehlung entfaellt, sobald
die WinForms-Shell aus dem Build genommen wird.
Der Smoke-UI-Lauf ist Teil der CI - mit Avalonia braucht er kein
Anzeigegeraet mehr (SetupWithoutStarting). Mit WinForms war das auf einem
Build-Server nicht moeglich.
Verifiziert: Build 0 Fehler/0 Warnungen, 193 Tests gruen, Smoke-UI
konstruiert alle 7 Ansichten + Launcher + Dialog, publish -r linux-x64
liefert 32 MB mit ELF-Launcher. Die WinForms-Shell ist unveraendert
lauffaehig.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
74 lines
2.9 KiB
YAML
74 lines
2.9 KiB
YAML
# Build- und Testlauf auf beiden Zielplattformen.
|
||
#
|
||
# Zweck: Die Portierung ist nur so lange etwas wert, wie sie nicht wieder zurückschleicht. Ein
|
||
# neues DateTime.Now, ein ToString("N2") ohne Formatanbieter oder eine WinForms-Referenz im Core
|
||
# fallen auf dem Windows-Entwicklungsrechner nicht auf – hier schon.
|
||
#
|
||
# Gitea Actions ist Actions-kompatibel; unter GitHub läuft dieselbe Datei als .github/workflows/.
|
||
|
||
name: Build & Test
|
||
|
||
on:
|
||
push:
|
||
branches: [main, 'feat/**']
|
||
pull_request:
|
||
branches: [main]
|
||
|
||
jobs:
|
||
build:
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
os: [ubuntu-latest, windows-latest]
|
||
|
||
runs-on: ${{ matrix.os }}
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- uses: actions/setup-dotnet@v4
|
||
with:
|
||
dotnet-version: '10.0.x'
|
||
|
||
# Windows: die gesamte Projektmappe, inklusive der alten WinForms-Shell.
|
||
- name: Build (Windows, gesamte Mappe)
|
||
if: matrix.os == 'windows-latest'
|
||
run: |
|
||
dotnet build IBKRTrader.slnx -c Release
|
||
dotnet test IBKRTrader.slnx --no-build -c Release --logger "trx;LogFileName=test-results.trx"
|
||
|
||
# Linux: alles AUSSER IBKRTrader.App (WinForms, net10.0-windows) – das lässt sich hier
|
||
# naturgemäß nicht bauen. Diese Aufzählung entfällt, sobald die WinForms-Shell aus dem
|
||
# Build genommen wird; dann baut auch hier wieder die ganze Mappe.
|
||
- name: Build (Linux, plattformneutrale Projekte)
|
||
if: matrix.os == 'ubuntu-latest'
|
||
run: |
|
||
dotnet build src/IBKRTrader.App.Avalonia -c Release
|
||
dotnet build src/IBKRTrader.Daemon -c Release
|
||
dotnet test tests/IBKRTrader.Tests -c Release --logger "trx;LogFileName=test-results.trx"
|
||
|
||
# Die Konstruktionsprüfung der Oberfläche braucht mit Avalonia KEIN Anzeigegerät mehr
|
||
# (SetupWithoutStarting). Mit WinForms war das auf einem Build-Server nicht möglich.
|
||
- name: Smoke-UI (Fenster-Konstruktion)
|
||
run: dotnet run --project src/IBKRTrader.App.Avalonia --no-build -c Release -- --smoke-ui
|
||
|
||
# Trockenlauf des kopflosen Dienstes: Host bauen, Startprüfungen fahren, nichts starten.
|
||
- name: Daemon-Prüflauf
|
||
run: dotnet run --project src/IBKRTrader.Daemon --no-build -c Release -- --check
|
||
|
||
# Der eigentliche Portierungs-Wächter: läuft nur unter Linux und schlägt fehl, sobald ein
|
||
# Projekt wieder eine Windows-Abhängigkeit hereinzieht.
|
||
- name: Linux-Publish (Daemon + Oberfläche)
|
||
if: matrix.os == 'ubuntu-latest'
|
||
run: |
|
||
dotnet publish src/IBKRTrader.Daemon -c Release -r linux-x64 --self-contained false -o out/daemon
|
||
dotnet publish src/IBKRTrader.App.Avalonia -c Release -r linux-x64 --self-contained false -o out/gui
|
||
|
||
- name: Testergebnisse sichern
|
||
if: always()
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: test-results-${{ matrix.os }}
|
||
path: '**/test-results.trx'
|
||
if-no-files-found: ignore
|