From 7112df9f6d4c514c2e5064edf2b5572d36295d17 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Sun, 26 Sep 2021 13:16:05 +0800 Subject: [PATCH] [runner] Support phpunit coverage generation using pcov This commit adds support for coverage generation in phpunit tests using the `pcov` php module, which is now installed on all of our current images. Generation is generated and saved to clover4j and crap4j file formats, which have minimal file size implications. It was found during testing that the phpunit formats were simply too large, as were all other alternatives, with the cobertura output reaching 7-8Gb. This change is controlled by the COVERAGE environment option. When set to the value "pcov", coverage will be generated using pcov. --- runner/master/run.sh | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/runner/master/run.sh b/runner/master/run.sh index 86994cb..c65ff97 100755 --- a/runner/master/run.sh +++ b/runner/master/run.sh @@ -69,6 +69,9 @@ fi export PHP_VERSION="${PHP_VERSION:-7.1}" export PHP_SERVER_DOCKER="${PHP_SERVER_DOCKER:-moodlehq/moodle-php-apache:${PHP_VERSION}}" +# Get the git commit. +export GIT_COMMIT="$( cd "${CODEDIR}" && git rev-parse HEAD )" + # Which Moodle version (XY) is being used. export MOODLE_VERSION=$(grep "\$branch" "${CODEDIR}"/version.php | sed "s/';.*//" | sed "s/^\$.*'//") # Which Mobile app version is used: latest (stable), next (master), x.y.z. @@ -100,6 +103,7 @@ export TESTSUITE="${TESTSUITE:-}" export RUNCOUNT="${RUNCOUNT:-1}" export BEHAT_TIMING_FILENAME="${BEHAT_TIMING_FILENAME:-}" export BEHAT_INCREASE_TIMEOUT="${BEHAT_INCREASE_TIMEOUT:-}" +export COVERAGE="${COVERAGE-}" # Remove some stuff that, simply, cannot be there based on $TESTTORUN if [ "${TESTTORUN}" == "phpunit" ] @@ -192,6 +196,7 @@ echo "DISABLE_MARIONETTE" >> "${ENVIROPATH}" echo "============================================================================" echo "= Job summary <<<" echo "============================================================================" +echo "== GIT_COMMIT: ${GIT_COMMIT}" echo "== Workspace: ${WORKSPACE}" echo "== Build Id: ${BUILD_ID}" echo "== Output directory: ${OUTPUTDIR}" @@ -211,6 +216,7 @@ echo "== BEHAT_NUM_RERUNS: ${BEHAT_NUM_RERUNS}" echo "== BEHAT_INCREASE_TIMEOUT: ${BEHAT_INCREASE_TIMEOUT}" echo "== BEHAT_SUITE: ${BEHAT_SUITE}" echo "== TAGS: ${TAGS}" +echo "== COVERAGE: ${COVERAGE}" echo "== NAME: ${NAME}" echo "== MOBILE_APP_PORT: ${MOBILE_APP_PORT}" echo "== MOBILE_VERSION: ${MOBILE_VERSION}" @@ -1011,7 +1017,19 @@ else PHPUNIT_SUITE="" fi - CMD="php vendor/bin/phpunit" + if [ $COVERAGE = "pcov" ] + then + COVERAGEDIR="/shared/coverage" + COVERAGEDIRHASH="/shared/coverage_public/${GIT_COMMIT}" + CMD="php -dpcov.enabled=1 -dpcov.initial.files=1024 -dmemory_limit=4096M vendor/bin/phpunit" + CMD="${CMD} --coverage-clover ${COVERAGEDIR}/clover.xml" + CMD="${CMD} --coverage-crap4j ${COVERAGEDIR}/crap4j.xml" + + docker exec -t "${WEBSERVER}" mkdir -p "${COVERAGEDIR}" "${COVERAGEDIRHASH}" + else + CMD="php vendor/bin/phpunit" + fi + CMD="${CMD} --disallow-test-output" if [ "$MOODLE_VERSION" -gt "31" ] then @@ -1028,6 +1046,7 @@ else EXITCODE=0 while [[ ${ITER} -lt ${RUNCOUNT} ]] do + echo "${CMD}" docker exec -t "${WEBSERVER}" ${CMD} EXITCODE=$(($EXITCODE + $?)) ITER=$(($ITER+1))