Skip to content

Commit

Permalink
coverage: add coverage CI action
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperAuguste committed Jul 21, 2023
1 parent 57b4a1a commit 52bb259
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 0 deletions.
41 changes: 41 additions & 0 deletions .github/workflows/kcov-json-to-summary.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# script for us in kcov.yml action

SUMMARY=$(cat zig-out/kcov/kcov-merged/coverage.json)

PERCENT_COVERED=$(echo $SUMMARY | jq .percent_covered -cr)
COVERED_LINES=$(echo $SUMMARY | jq .covered_lines -cr)
TOTAL_LINES=$(echo $SUMMARY | jq .total_lines -cr)

echo -e "## Code Coverage Report\n"
echo -e "### $PERCENT_COVERED% covered ($COVERED_LINES / $TOTAL_LINES lines)\n"

echo -e "<details open><summary>Per-file coverage details</summary><br>\n"

FILES=$(echo $SUMMARY | jq '.files | sort_by(.percent_covered | tonumber) | .[]' -cr)

echo "| File | Coverage | |"
echo "| ---- | -------- | - |"

for FILE in $FILES; do
FILENAME="$(echo $FILE | jq '.file' -cr)"
FILENAME=${FILENAME#*zls/}
FILE_PERCENT_COVERED=$(echo $FILE | jq '.percent_covered' -cr)
FILE_COVERED_LINES=$(echo $FILE | jq '.covered_lines' -cr)
FILE_TOTAL_LINES=$(echo $FILE | jq '.total_lines' -cr)

FILE_STATUS=$(
if [ $(echo $FILE_PERCENT_COVERED'<25' | bc -l) -eq 1 ];
then
echo ""
elif [ $(echo $FILE_PERCENT_COVERED'<75' | bc -l) -eq 1 ];
then
echo "⚠️"
else
echo ""
fi
)

echo "| \`$FILENAME\` | $FILE_PERCENT_COVERED% ($FILE_COVERED_LINES / $FILE_TOTAL_LINES lines) | $FILE_STATUS |"
done

echo "</details>"
69 changes: 69 additions & 0 deletions .github/workflows/kcov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Code Coverage

on:
pull_request:
types: [opened, synchronize]

permissions:
pull-requests: write

jobs:
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: true

- uses: goto-bus-stop/setup-zig@v2
with:
version: master

- run: zig version
- run: zig env

- name: Build
run: zig build

# - name: Build kcov
# run: |
# sudo apt-get update
# sudo apt-get install binutils-dev libssl-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev
# git clone https://github.com/SimonKagstrom/kcov
# cd kcov
# mkdir build
# cd build
# sudo cmake ..
# sudo make
# sudo make install

- name: Install kcov
run: |
sudo apt-get update
sudo apt-get kcov
- name: Run Tests with kcov
id: kcov
run: |
mkdir -p zig-out/kcov
zig build test -Dgenerate_coverage
readlink -f zig-out/kcov/test
ls zig-out/kcov/kcov-merged
.github/workflows/kcov-json-to-summary.sh > zig-out/summary.md
cat zig-out/summary.md > $GITHUB_STEP_SUMMARY
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "report<<$EOF" >> "$GITHUB_OUTPUT"
cat zig-out/summary.md >> "$GITHUB_OUTPUT"
echo "$EOF" >> "$GITHUB_OUTPUT"
- name: Publish coverage status
uses: thollander/actions-comment-pull-request@v2
with:
message: |
${{ steps.kcov.outputs.report }}
comment_tag: coverage

0 comments on commit 52bb259

Please sign in to comment.