L4: Modul-Fenster auf Avalonia - Funktionsgleichheit mit der WinForms-Shell
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>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user