From 6cefa98a04df541ee42e5c01c80c6177a9849f19 Mon Sep 17 00:00:00 2001 From: Aman Agrawal Date: Thu, 14 May 2020 11:32:01 +0530 Subject: [PATCH] ci: Don't remove .coverage file & set empty suffix. Fixes #14962 * codecov needs `.coverage` file in the pwd to upload coverage results. * concurrency='multiprocessing' forces `.coverage` file to have a data_suffix, we explicity set it to "" for the file to have no suffix. Filed issue as https://github.com/nedbat/coveragepy/issues/989 --- .circleci/config.yml | 4 ++++ tools/ci/backend | 2 +- tools/test-backend | 13 +++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3b9e2ff7b678a6..92c1d93c281ed5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -95,6 +95,10 @@ aliases: run: name: upload coverage report command: | + # codecov requires `.coverage` file to be stored in pwd for + # uploading coverage results. + mv /home/zulip/var/.coverage /home/zulip/.coverage + . /srv/zulip-py3-venv/bin/activate # codecov version is fixed here, since future versions of it # use "find" for locating files which is buggy on some platforms. diff --git a/tools/ci/backend b/tools/ci/backend index 6122cf53b38ce0..3f6278ae2a71b5 100755 --- a/tools/ci/backend +++ b/tools/ci/backend @@ -12,7 +12,7 @@ set -x # docker setup means the auto-detection logic sees the ~36 processes # the Docker host has, not the ~2 processes of resources we're # allocated. -./tools/test-backend --coverage --include-webhooks --parallel=6 +./tools/test-backend --coverage --include-webhooks --no-cov-cleanup --parallel=6 # We run mypy after the backend tests so we get output from the # backend tests, which tend to uncover more serious problems, first. diff --git a/tools/test-backend b/tools/test-backend index 9a92d38c21c558..09426b69e88d89 100755 --- a/tools/test-backend +++ b/tools/test-backend @@ -216,6 +216,10 @@ def main() -> None: parser.add_argument('--verbose-coverage', dest='verbose_coverage', action="store_true", default=False, help='Enable verbose print of coverage report.') + parser.add_argument('--no-cov-cleanup', dest='no_cov_cleanup', + action='store_true', + default=False, + help="Do not clean generated coverage files.") parser.add_argument('--parallel', dest='processes', type=int, @@ -354,10 +358,12 @@ def main() -> None: assert_provisioning_status_ok(options.force) if options.coverage: - import atexit import coverage - cov = coverage.Coverage(config_file="tools/coveragerc", concurrency='multiprocessing') - atexit.register(lambda: cov.erase()) # Ensure the data file gets cleaned up at the end. + cov = coverage.Coverage(data_suffix="", config_file="tools/coveragerc", concurrency='multiprocessing') + # Do not clean .coverage file in CircleCi job so that coverage data can be uploaded. + if not options.no_cov_cleanup: + import atexit + atexit.register(lambda: cov.erase()) # Ensure the data file gets cleaned up at the end. cov.start() if options.profile: import cProfile @@ -407,7 +413,6 @@ def main() -> None: cov.stop() cov.save() cov.combine() - cov.data_suffix = False # Disable suffix so that filename is .coverage cov.save() if options.verbose_coverage: print("Printing coverage data")