codecov/project status measures overall project coverage and compares it against the base of the pull request or parent commit.
coverage status project default # basic targetauto thresholdnull baseauto # advanced branchesnull if_no_uploadserror if_not_foundsuccess if_ci_failederror only_pullsfalse flagsnull pathsnull
auto | number
Choose a minimum coverage ratio that the commit must meet to be considered a
autowill use the coverage from the base commit (pull request base or parent commit) coverage to compare against.
numberyou can specify a target of an exact coverage number such as
string, int, or floataccepted).
Allow the coverage to drop by
X%, and posting a
enum(auto, pr, parent)
Designate the target to compare against.
autowill use the pull request base if the commit is on a pull request. If not, the parent commit will be used.
prwill only use the pull request base. Commits not on a pull request will not receive this status.
parentwill always use the parent commit to compare against.
Below, is an example of using multiple project statuses that measure different aspects of your project.
coverage status project defaultfalse # disable the default status that measures entire project tests# declare a new status context "tests" target100% # we always want 100% coverage here paths"tests/" # only include coverage in "tests/" folder app# declare a new status context "app" paths"!tests/" # remove all files in "tests/"
Now you will see two unique status contexts from Codecov:
You may have a code base that has multiple application components that you would like to monitor independently. Codecov provides a very simple way create statuses for each component.
coverage status project users paths tests/users app/components/user* products paths tests/products app/components/product*
As illustrated above, you can set project statuses filtering out specific components of the application, and get 3 unique statuses monitoring each component.
codecov/patch status only measures lines adjusted in the pull request or single commit, if the commit is not in a pull request. This status provides an indication on how well the pull request is tested.
coverage status patch default # basic targetauto thresholdnull baseauto # advanced branchesnull if_no_uploadserror if_not_foundsuccess if_ci_failederror only_pullsfalse flagsnull pathsnull
To illustrate the usage of the patch status, let's go through this exercise.
def divide(x, y): + if y <= 0: + raise ValueError("y must be greater than 0") return x * y
codecov/patch status of this commit would be
0% covered because no tests are created for this method. Even though the project coverage is 72% (the entire code base not shown), this patch status will only measure lines added.
To make another commit on this pull request, adding tests, proceed as follows.
+ def test_divide_by_1(self): + assert divide(10, 1) == 10
Running the tests will result in a patch coverage of
50% covered because we have not yet tested the behavior of dividing by zero. Let's add another test.
def test_divide_by_1(self): assert divide(10, 1) == 10 + def test_divide_by_zero(self): + with self.assertRaises(ValueError) + divide(1, 0) +
Now Codecov will report a
codecov/patch status of
100% covered for this pull request. This indicates that the pull request adjusted code is properly executed by tests.
You may choose to disable the default statuses Codecov posts by using the following yaml configuration.
coverage status projectoff patchoff
Codecov will detect changes in coverage that are NOT included in the commit/pull diff, and report these changes as a commit status.
Let's take this example to illustrate what an Unexpected Coverage Changes would look like.
First commit. 100% coverage.
As shown above, we have 100% coverage. Now let's make a change to this code base.
Second commit's diff.
Our CI will run and result in the following:
Second commit's coverage.
Lines 1 and 2 are considered "changes" in Codecov. This status would detect these changes and report them to the commit status.
Work in progress. Pardon the mess. 🐌