The Codecov Bash uploader provides a language-agnostic alternative for uploading reports. Its usage is both simple and convenient:
bash <(curl -s https://codecov.io/bash)
The main objectives of the uploader are to:
- detect the environment
- gather reports
- upload them to Codecov
The above command silently requests the latest version of the uploader from Codecov and executes via Bash; all output is directed to
Not Required for some CI Providers
If you have a public project on TravisCI, CircleCI, AppVeyor, Azure Pipelines, or GitHub Actions an upload token is not required.
A unique upload token is required to identify which project the coverage belongs to. This token is located in the repository settings (
There are three ways to provide the upload token to the Bash uploader:
bash <(curl -s https://codecov.io/bash) -t token
export CODECOV_TOKEN="token" bash <(curl -s https://codecov.io/bash)
echo "token" > .cc_token bash <(curl -s https://codecov.io/bash) -t @.cc_token
The bash uploader detects all CI providers through environment variables. This process helps to identify the source of the build and maintain a relationship back to the source of the coverage collection.
Codecov can automatically detect coverage files in your project. A thorough filename search will grab everything that is known to be a coverage report.
Here are some options for discovering reports:
# only upload this file -f path/to/foo.bar # also search this folder that is outside the project directory -s /home/user/reports/foo/bar # ignore all files at pattern *.bar -f "!*.bar" # include all files at pattern *.foo -f "*.foo"
When the upload script is called, the general flow is as follows:
- The CI is discovered through environment variables.
- Language specific process (e.g. xcode, python).
- Reports are discovered.
- Reports are prepended with file paths and appended with file adjustments.
- Reports are uploaded to cloud storage for archiving (secret location).
- Codecov is informed of the upload, and will queue the report processing server side.
- Done (
exit 0to prevent failing the build, if there are issues. If you would like Codecov to exit with
bash <(curl -s https://codecov.io/bash) -Z.
exit 0is not foolproof. Please use this command to always exit with
bash <(curl -s https://codecov.io/bash) || echo 'Codecov failed to upload'.
If there is an issue with the upload process, it helps to run in verbose mode. Supply the
-vflag for better debugging output:
bash <(curl -s https://codecov.io/bash) -v
The bash uploader provides various arguments to work with many complex environments. Listed below are the full list of possible arguments and their usage.
Extra curl arguments to communicate with AWS.
Move discovered coverage reports to the trash
Don't upload, but dump upload file to stdout
Specify environment variables to be included with this build
Flag the upload to group coverage metrics
Target file(s) to upload
Must use single quotes.
Display this help and exit
Remove color from the output
The commit SHA of the parent for which you are uploading coverage. If not present, the parent will be determined using the API of your repository provider. When using the repository provider's API, the parent is determined via finding the closest ancestor to the commit.
Custom defined name of the upload. Visible in Codecov UI
Write upload file to path
Used when not in git/hg project to identify project root directory
Directory to search for coverage reports.
Set the private repository token
Extra curl arguments to communicate with Codecov. e.g.,
Exit with 1 if not successful. Default will Exit with 0
owner/repo slug used instead of the private repo token in Enterprise
File path to your cacert.pem file used to verify ssl with Codecov Enterprise (optional)
Set the target url for Enterprise customers
Used to override pre-existing CI environment variables
Specify the branch name
Specify the build number
Specify the commit sha
Specify the pull request number
Specify the git tag
Extra arguments to pass to gcov
Paths to include during gcov gathering
Paths to ignore during gcov gathering
Prefix filepaths to help resolve path fixing
Project root directory
gcov executable to run. Defaults to
Custom Derived Data Path for Coverage.profdata and gcov processing
Specify packages to build coverage. Uploader will only build these packages.
Updated about a month ago