foundry
foundry copied to clipboard
Feat: Coverage Snapshot
Component
Forge
Describe the feature you would like
Coverage Snapshot
i.e. gas-snapshot
but for coverage
.
Snapshot
This script records line and function coverage in the format:
lineCoverage result 66.7 %
functionCoverage result 50.0 %
Coverage Script
#!/usr/bin/env bash
set -euo pipefail
mkdir -p "$PWD"/.coverage/
coverageSnapshotPhase()
{
mkdir -p "$PWD"/.coverage/
genhtml lcov.info -o --branch-coverage "$PWD"/.coverage > log
# genhtml lcov.info $lcovExtraTraceFiles -o $out/.coverage > log
lineCoverage="$(sed 's/.*lines\.*: \([0-9\.]\+\)%.*/\1/; t ; d' log)"
functionCoverage="$(sed 's/.*functions\.*: \([0-9\.]\+\)%.*/\1/; t ; d' log)"
if [ -z "$lineCoverage" -o -z "$functionCoverage" ]; then
echo "⛔︎ Failed to get coverage statistics"
exit 1
fi
echo "lineCoverage result $lineCoverage %" >> "$PWD"/.coverage/snapshot
echo "functionCoverage result $functionCoverage %" >> "$PWD"/.coverage/snapshot
touch "$PWD"/.coverage/CI_TIMESTAMP
date +"%Y%m%d%H%M%S" >> "$PWD"/.coverage/CI_TIMESTAMP
}
coverageSnapshotPhase
echo "Snapshot recorded"
FOUND_WARNINGS=$(grep "\d+ result" -Po .coverage/snapshot | sed 's/ result//g')
if (( $(echo "$FOUND_WARNINGS <= 50" | bc -l) )) ; then
COLOR=red
elif (( $(echo "$FOUND_WARNINGS > 60" | bc -l) )); then
COLOR=green
else
COLOR=orange
fi
echo "$FOUND_WARNINGS"
rm log
sleep 1
exit 0
This does not follow the gas snapshot
format which tbh I dislike as it is difficult to regex against.
Additional context
Note: I flatten the contract to run coverage reporting against, ergo this script works for that context.