@@ -207,6 +207,11 @@ jobs:
207207
208208 - name : Install Rust
209209 uses : dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8
210+ with :
211+ components : llvm-tools-preview
212+
213+ - name : Install cargo-llvm-cov
214+ run : cargo install cargo-llvm-cov
210215
211216 - name : Cache Cargo dependencies
212217 uses : actions/cache@v4
@@ -220,7 +225,45 @@ jobs:
220225 ${{ runner.os }}-cargo-swift-
221226
222227 - name : Build Rust, Generate Swift Bindings, and Verify swift build
223- run : ./scripts/build_swift_bindings.sh --test
228+ run : ./scripts/build_swift_bindings.sh --coverage --test
229+
230+ - name : Export coverage to lcov
231+ run : |
232+ PROFDATA_VAR=$(cargo +stable llvm-cov show-env | grep LLVM_PROFDATA) || true
233+ PROFDATA_TOOL=$(echo "$PROFDATA_VAR" | cut -d= -f2- | tr -d '"' | tr -d "'" | xargs)
234+ if [ -z "$PROFDATA_TOOL" ] || [ ! -x "$PROFDATA_TOOL" ]; then
235+ export PATH="$(rustc --print=target-libdir)/../bin:$PATH"
236+ PROFDATA_TOOL=$(which llvm-profdata)
237+ fi
238+ if ls target/llvm-cov-target/*.profraw 2>/dev/null; then
239+ "$PROFDATA_TOOL" merge -sparse target/llvm-cov-target/*.profraw \
240+ -o target/llvm-cov-target/swift-cov.profdata
241+ llvm-cov export -format=lcov \
242+ --instr-profile target/llvm-cov-target/swift-cov.profdata \
243+ -object target/debug/libflowsdk_ffi.dylib \
244+ > lcov-swift.info
245+ else
246+ echo "No profraw files found; skipping lcov export."
247+ fi
248+
249+ - name : Upload coverage artifacts
250+ uses : actions/upload-artifact@v4
251+ if : always()
252+ with :
253+ name : swift-coverage-data
254+ path : |
255+ lcov-swift.info
256+ target/llvm-cov-target/swift-cov.profdata
257+ target/llvm-cov-target/*.profraw
258+ retention-days : 7
259+
260+ - name : Upload coverage to Codecov
261+ uses : codecov/codecov-action@v4
262+ with :
263+ files : lcov-swift.info
264+ fail_ci_if_error : false
265+ token : ${{ secrets.CODECOV_TOKEN }}
266+ verbose : true
224267
225268 coverage :
226269 name : Code Coverage
0 commit comments