带有 Swift 包的 Codecov

nar*_*.sv 5 code-coverage github swift-package-manager codecov github-actions

介绍

我已经编写了一个Swift 包,并希望将Codecov集成为我的 CI 的一部分(使用Github Actions设置)。

这是我的.yml文件:

name: Swift  
  
on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v3
    - name: Build
      run: swift build -v
    - name: Run tests
      run: swift test -v --enable-code-coverage
    - name: Upload to Codecov
      uses: codecov/codecov-action@v3.1.0
Run Code Online (Sandbox Code Playgroud)

问题

问题是Codecov无法处理由xcodebuildswift命令生成的报告文件。是文档。

Github 操作日志


可能的解决方案

Codecov 建议使用其他第三方工具(例如Slather)将报告的文件转换为预期格式(.xml.json等),但Slather与Swift Packages不兼容(仅适用于.xcodeproj.xcworkspace项目)。


您能在这里提供帮助或建议替代方法吗?谢谢。

hec*_*ckj 1

我最近遇到了同样的事情,但注意到 JSON 代码覆盖文件已生成,上传者只是不知道它们在哪里或如何搜索它们。

您可以通过显式位置指定它们,并且会生成一个 JSON 文件。然而,CodeCov 似乎无法处理 JSON 格式,因此您需要做额外的工作来将该死的设置转换为lcov格式。

我进行此转换的节基于CodeCov 支持论坛中的一个线程- 这有点过时,但转换的要点llvm-cov就在那里。

    - name: Prepare Code Coverage
      run: xcrun llvm-cov export -format="lcov" .build/debug/AutomergeSwiftAdditionsPackageTests.xctest/Contents/MacOS/AutomergeSwiftAdditionsPackageTests  -instr-profile .build/debug/codecov/default.profdata > info.lcov

    - name: Upload coverage reports to Codecov
      uses: codecov/codecov-action@v3
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        files: info.lcov

Run Code Online (Sandbox Code Playgroud)