ceremonyclient/pebble/scripts/code-coverage-publish.sh
Cassandra Heart 2e2a1e4789
v1.2.0 (#31)
2024-01-03 01:31:42 -06:00

48 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# This script runs genhtml (part of lcov) on lcov artifacts generated by the
# code-coverage.sh script and uploads the result to a GCS bucket.
BUCKET="${BUCKET:-crl-codecover-public}"
set -euxo pipefail
publish() {
PROFILE="$1"
TITLE="$2"
if [ ! -f "$PROFILE" ]; then
echo "$PROFILE does not exist"
exit 1
fi
DIR="$(date -r "$PROFILE" -u '+%Y-%m-%d %H:%MZ') $(git rev-parse --short=8 HEAD) - $TITLE"
mkdir -p "artifacts/$DIR"
# The filename shows up on the generated page, let's make it useful.
cp "$PROFILE" "artifacts/$DIR.lcov"
genhtml "artifacts/$DIR.lcov" -o "artifacts/$DIR"
gsutil -m cp -Z -r "artifacts/$DIR" "gs://$BUCKET/pebble/$DIR"
}
publish "artifacts/profile-tests.lcov" "tests only"
publish "artifacts/profile-meta.lcov" "meta test only"
publish "artifacts/profile-tests-and-meta.lcov" "tests + meta"
# Regenerate index.html.
echo '<title>Pebble coverage</title><body><h2>Pebble coverage runs:</h2><ul>' > artifacts/index.html
gsutil ls "gs://$BUCKET/pebble" |
sed "s#gs://$BUCKET/pebble/##" |
sed 's#/$##' |
grep -v index.html |
sort -r |
while read -r d; do
echo "<li><a href=\"$d/index.html\">$d</a>" >> artifacts/index.html
done
echo '</ul></body>' >> artifacts/index.html
gsutil cp artifacts/index.html "gs://$BUCKET/pebble/index.html"
gsutil setmeta -h "Cache-Control: public, max-age=300, no-transform" "gs://$BUCKET/pebble/index.html"