foundry icon indicating copy to clipboard operation
foundry copied to clipboard

Feat: Coverage Snapshot

Open sambacha opened this issue 2 years ago • 0 comments

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.

sambacha avatar Jan 11 '23 20:01 sambacha