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")