Skip to content

feat(p3-204): myz80 und qrst schreiben bis in die Datei - sieben von … #895

feat(p3-204): myz80 und qrst schreiben bis in die Datei - sieben von …

feat(p3-204): myz80 und qrst schreiben bis in die Datei - sieben von … #895

Workflow file for this run

# ============================================================================
# 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 }}