feat(p3-342): FluxEngine schreibt einen echten SCP-Behaelter - und dr… #896
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ============================================================================ | |
| # UnifiedFloppyTool - Code Coverage | |
| # | |
| # Builds with gcov instrumentation, runs tests, uploads to Codecov. | |
| # | |
| # Fixes applied: | |
| # FAILURE-007: removed --target all | |
| # ============================================================================ | |
| name: Code Coverage | |
| on: | |
| push: | |
| branches: [main, develop] | |
| pull_request: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| env: | |
| QT_VERSION: '6.10.1' | |
| jobs: | |
| coverage: | |
| # MF-432: without this GitHub's default is 360 min. On 2026-08-19 | |
| # five Linux jobs hung in the Qt/apt download and would have burned | |
| # six hours each. A hang now dies here instead. | |
| timeout-minutes: 60 | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: ${{ env.QT_VERSION }} | |
| host: linux | |
| target: desktop | |
| modules: 'qtserialport' | |
| cache: true | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update -q | |
| sudo apt-get install -y libusb-1.0-0-dev libgl1-mesa-dev lcov gcovr | |
| - name: Build with coverage (CMake) | |
| # FIX-007: no --target all | |
| run: | | |
| cmake -B build \ | |
| -DCMAKE_BUILD_TYPE=Debug \ | |
| -DUFT_BUILD_TESTS=ON \ | |
| -DCMAKE_C_FLAGS="--coverage -fprofile-arcs -ftest-coverage" \ | |
| -DCMAKE_CXX_FLAGS="--coverage -fprofile-arcs -ftest-coverage" \ | |
| -DCMAKE_EXE_LINKER_FLAGS="--coverage" | |
| cmake --build build --parallel $(nproc) 2>&1 || true | |
| # GUI may fail (FloppyOtdrWidget.h) — tests are what matters for coverage | |
| - name: Run tests | |
| run: | | |
| cd build | |
| # Only run tests that actually compiled (self-contained + core-linked) | |
| # MF-517: hier stand eine Liste von NEUN Testnamen. Die | |
| # Coverage-Zahl, die dieser Auftrag erzeugt und als Badge | |
| # veroeffentlicht, beschrieb damit 9 von 241 Tests — sie sagte | |
| # etwas ueber den Baum, was sie nicht messen konnte. | |
| # | |
| # Jetzt laeuft die ganze Suite. `|| true` bleibt: dieser Auftrag | |
| # misst, er bewacht nicht (das tut ci.yml, seit CI-1 scharf). | |
| ctest --output-on-failure --timeout 300 || true | |
| - name: Generate coverage report | |
| run: | | |
| lcov \ | |
| --capture \ | |
| --directory build \ | |
| --output-file coverage.info \ | |
| --rc lcov_branch_coverage=1 || true | |
| lcov \ | |
| --remove coverage.info '/usr/*' '*/tests/*' '*/Qt/*' \ | |
| --output-file coverage.info || true | |
| lcov --list coverage.info || echo "No coverage data collected" | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v7 | |
| with: | |
| files: coverage.info | |
| # MF-731: wir uebergeben oben einen fertigen lcov-Bericht. | |
| # Ohne diese Zeile durchsucht der Uploader trotzdem den ganzen | |
| # Bauverzeichnisbaum und ruft gcov ueber JEDE gefundene .gcno — | |
| # gemessen im Lauf 33415744177: **16 311** Zeilen der Form | |
| # | |
| # warning - <Zeit> -- .../uft_imd_parser_v2.c.gcno | |
| # | |
| # Die sind keine Warnungen ueber die Dateien. Die Kopfzeile | |
| # lautet „Running gcov on the following list of files:" — der | |
| # Uploader gibt seine Arbeitsliste auf Log-Stufe `warning` | |
| # aus. Es ist doppelte Arbeit (lcov hat den Bericht schon) und | |
| # es macht das Log unlesbar: ein echter Coverage-Fehler geht | |
| # zwischen 16 000 Zeilen Rauschen unter. | |
| # | |
| # Belegt: codecov/codecov-action `action.yml` — | |
| # „disable_search: Disable search for coverage files. This is | |
| # helpful when specifying what files you want to upload with | |
| # the files option." | |
| disable_search: true | |
| # | |
| # MF-732, BERICHTIGUNG EINER MESSUNG: `disable_search` allein | |
| # hat NICHTS bewirkt. Gemessen, Lauf 33415744177 gegen | |
| # 33418494322: **16 311 Zeilen vorher, 16 311 nachher.** Die | |
| # Option kam an (`./codecov ... --disable-search --file | |
| # coverage.info --gcov-executable gcov`), sie schaltet aber | |
| # nur die Suche nach BERICHTSDATEIEN ab — der gcov-Durchlauf | |
| # ist ein eigener Schritt. | |
| # | |
| # Genau deshalb stand im vorigen Kommentar, das sei zu MESSEN | |
| # und nicht anzunehmen. Die Annahme war falsch. | |
| # | |
| # Der richtige Schalter steht in `action.yml`, nicht im | |
| # README (das ihn nicht nennt — die erste Recherche stuetzte | |
| # sich darauf und kam zu „einen An/Aus-Schalter gibt es | |
| # nicht"): | |
| # | |
| # plugins: "Comma-separated list of plugins to run. | |
| # Specify `noop` to turn off all plugins" | |
| # | |
| # Der gcov-Durchlauf IST ein Plugin. `noop` ist zulaessig, | |
| # weil wir oben einen fertigen lcov-Bericht uebergeben — es | |
| # gibt nichts zu sammeln. | |
| plugins: noop | |
| fail_ci_if_error: false | |
| env: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} |