diff --git a/.github/workflows/swift-tests.yml b/.github/workflows/swift-tests.yml index 846b16f7..c9265e89 100644 --- a/.github/workflows/swift-tests.yml +++ b/.github/workflows/swift-tests.yml @@ -39,7 +39,23 @@ jobs: ${{ runner.os }}-${{ matrix.name }}- - name: Run Tests - run: swift test --parallel --quiet --package-path ${{ matrix.path }} + run: swift test --parallel --quiet --enable-code-coverage --package-path ${{ matrix.path }} + + # Informational only: surfaces per-file and total line coverage in the + # job log so coverage trends are visible on every PR. No thresholds — + # this must never be the reason a build goes red. + - name: Coverage summary + run: | + BIN_PATH=$(swift build --show-bin-path --package-path ${{ matrix.path }}) + PROF="$BIN_PATH/codecov/default.profdata" + XCTEST=$(find "$BIN_PATH" -maxdepth 1 -name '*.xctest' | head -1) + BINARY="$XCTEST/Contents/MacOS/$(basename "$XCTEST" .xctest)" + if [ -f "$PROF" ] && [ -f "$BINARY" ]; then + xcrun llvm-cov report "$BINARY" -instr-profile "$PROF" \ + -ignore-filename-regex='(Tests|\.build|checkouts|Mocks|_PreviewHelpers)' || true + else + echo "No coverage data found; skipping summary." + fi # SPM tests above only compile the macOS slice; this job covers the # iOS-conditional code paths (UIKit, CoreBluetooth restoration, etc.).