For Codecov to operate correctly, all file paths in the coverage report must match the git file structure. This approach is how Codecov is able to correctly map coverage information in your uploaded coverage reports to the corresponding files in your repository.
It is incredibly common, and encouraged, for users to run tests in their CI environments and then upload coverage directly to Codecov as a step in their CI process. However, this can lead to problems because the paths to files in a coverage report generated during CI will map to the CI's file system. This mapping may not necessarily map to the file structure of your project in git. When this is the case, Codecov will fail to properly process your reports. Codecov's path fixing feature was built to address this problem.
Generally, if your uploaded reports fail to process, path fixing may help. You should download the coverage report generated within your CI for a particular commit, examine the file paths located within it, and see if they map directly to your git file structure. If not, you can attempt to apply a path fix and see if this helps on subsequent commits.
For example, CircleCI, will clone your project to
home/circleci/project and run all tests relative to that directory, meaning your generated coverage report will reference a file as
/home/circleci/project/path/to/file.py. which doesn't match the path
/project/path/to/file.py in your project.
In many cases, such as with CircleCI above, Codecov has internal methods of mapping paths, so the user is never even aware that paths are being modified in order to map coverage information to their project correctly. However, it is impossible for Codecov to do this for every CI and/or build scenario engineering teams may use.
In the event that your files are failing to process, Codecov provides path fixing to allow engineering teams to manually map the file paths in their coverage reports to their project's git structure.
Teams can update a repo level codecov.yml to specify concretely:
- <files in coverage report>::<corresponding paths in git/hg project>
The path fixing options are as follows:
fixes: - "before/::after/" # move path e.g., "before/path" => "after/path" - "::after/" # move root e.g., "path/" => "after/path/" - "before/::" # reduce root e.g., "before/path/" => "path/"
Regexp and glob pattern matching are allowed in the fixes:
fixes: - "before/test-*::after/"
The pattern above will move files in the following manner.
before/tests-apples/test.js => after/test.js before/tests-oranges/test.js => after/test.js before/app-apples/app.js => before/app-apples/app.js
As a concrete use case, using the CircleCI example above, Codecov provides the following path fix automatically for CircleCI users:
fixes: - "/home/circleci/::"
Codecov performs a number of default path fixes for specific CI providers and situations where we will need to fix the path every single time. Comprehensive examples of the relevant regex below.
Rules that strip out the user specific portion of URLs:
Jenkins specific rule not assuming a user or home path root
Golang specific rule to strip out the github portion of a file path
Windows specific rule to strip paths down to their repo root
To disable Codecov's built-in path fixing, you can add the following to your codecov.yml file.
codecov: disable_default_path_fixes: true
Updated about 1 year ago