# 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' # Die gesamte Projektmappe baut auf beiden Plattformen – seit die WinForms-Shell # entfernt ist, gibt es kein Projekt mehr mit Windows-Bindung. - name: Restore run: dotnet restore IBKRTrader.slnx - name: Build run: dotnet build IBKRTrader.slnx --no-restore -c Release - name: Test run: dotnet test IBKRTrader.slnx --no-build -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