diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index da4a78eae..55aff0b80 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -477,3 +477,28 @@ macOS x86 host: - export CAIRO_TEST_IGNORE_quartz_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-quartz-rgb24.txt) - export CAIRO_TEST_TARGET=quartz - (cd build/test && srcdir=../../test ./cairo-test-suite) + +coverage: + stage: 'analysis' + extends: + - '.fdo.distribution-image@fedora' + needs: + - job: 'fedora image' + artifacts: false + script: + - source ./.gitlab-ci/env.sh + - bash -x ./.gitlab-ci/build-with-coverage.sh + - bash -x ./.gitlab-ci/gen-coverage.sh + coverage: '/Coverage: \d+\.\d+/' + artifacts: + name: "cairo-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" + expire_in: 2 days + when: always + reports: + coverage_report: + coverage_format: cobertura + path: public/coverage.xml + paths: + - "_build/meson-logs" + - public + diff --git a/.gitlab-ci/build-with-coverage.sh b/.gitlab-ci/build-with-coverage.sh new file mode 100644 index 000000000..ed867986d --- /dev/null +++ b/.gitlab-ci/build-with-coverage.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +set -eux -o pipefail + +export CFLAGS="-coverage -ftest-coverage -fprofile-arcs" + +export CAIRO_TEST_IGNORE_image_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-image-argb32.txt) +export CAIRO_TEST_IGNORE_image_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-image-rgb24.txt) +export CAIRO_TEST_IGNORE_image16_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-image16-rgb24.txt) +export CAIRO_TEST_TARGET=image,image16 + +meson setup --buildtype=debug _build . +meson compile -C _build + +export srcdir=../../test +cd _build/test +xvfb-run ./cairo-test-suite diff --git a/.gitlab-ci/gen-coverage.sh b/.gitlab-ci/gen-coverage.sh new file mode 100644 index 000000000..cfc78e240 --- /dev/null +++ b/.gitlab-ci/gen-coverage.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +set -eux -o pipefail + +mkdir -p public +grcov _build --source-dir ./ --prefix-dir ../ --output-type cobertura --branch --ignore-not-existing -o public/coverage.xml +grcov _build --source-dir ./ --prefix-dir ../ --output-type html --branch --ignore-not-existing -o public/coverage + +# Print "Coverage: 42.42" so .gitlab-ci.yml will pick it up with a regex +# +# We scrape this from the HTML report, not the JSON summary, because coverage.json +# uses no decimal places, just something like "42%". + +grep -Eo 'abbr title.* %' public/coverage/index.html | head -n 1 | grep -Eo '[0-9.]+ %' | grep -Eo '[0-9.]+' | awk '{ print "Coverage:", $1 }'