overcover

command module
v1.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2024 License: Apache-2.0 Imports: 1 Imported by: 0

README

=========
Overcover
=========

.. image:: https://img.shields.io/github/tag/klmitch/overcover.svg
    :target: https://github.com/klmitch/overcover/tags
.. image:: https://img.shields.io/hexpm/l/plug.svg
    :target: https://github.com/klmitch/overcover/blob/master/LICENSE
.. image:: https://travis-ci.org/klmitch/overcover.svg?branch=master
    :target: https://travis-ci.org/klmitch/overcover
.. image:: https://coveralls.io/repos/github/klmitch/overcover/badge.svg?branch=master
    :target: https://coveralls.io/github/klmitch/overcover?branch=master
.. image:: https://godoc.org/github.com/klmitch/overcover?status.svg
    :target: http://godoc.org/github.com/klmitch/overcover
.. image:: https://img.shields.io/github/issues/klmitch/overcover.svg
    :target: https://github.com/klmitch/overcover/issues
.. image:: https://img.shields.io/github/issues-pr/klmitch/overcover.svg
    :target: https://github.com/klmitch/overcover/pulls
.. image:: https://goreportcard.com/badge/github.com/klmitch/overcover
    :target: https://goreportcard.com/report/github.com/klmitch/overcover

This repository contains Overcover.  Overcover is a testing tool meant
to work in conjunction with the coverage profile data generated by the
``go test`` tool with the ``-coverprofile`` option; it computes an
overall coverage of the entire source base and emits that
information.  Overcover can also optionally enforce a minimum coverage
threshold, allowing test jobs to be failed if the testing coverage has
been weakened.

Basic Usage
===========

To use Overcover, install and execute it like so::

    % overcover --coverprofile coverage.out

This will read the indicated coverage profile and emit a message
describing the overall coverage represented by the profile.  A
threshold can be enforced, which will cause Overcover to exit with a
status code of 1 if the coverage does not reach the threshold::

    % overcover --coverprofile coverage.out --threshold 75

These values can also be passed to Overcover using environment
variables named after the long option names--e.g.,
``OVERCOVER_COVERPROFILE`` specifies a value for ``--coverprofile``,
and ``OVERCOVER_THRESHOLD`` specifies a value for ``--threshold``.

The ``go test`` command does not include packages that do not contain
any test files in the output coverage profile.  To ensure that all
code is counted in the coverage determination, Overcover can be
provided the package specification in the same format taken by ``go
test``; it will count the number of statements and include that data
in its calculation.  For example::

    % overcover --coverprofile coverage.out ./...

Build arguments may be provided to influence the selection of source
packages; these are standard build arguments to the ``go`` tools, and
are specified with a ``--build-arg`` prefix; the corresponding
environment variable, ``OVERCOVER_BUILD_ARG``, should contain a
space-separated sequence of build arguments.

Finally, summary information on the coverage per package can be
emitted using ``--summary`` (``OVERCOVER_SUMMARY``), and detailed
per-file information can be emitted using ``--detailed``
(``OVERCOVER_DETAILED``); these two options may be used together, in
which case the package data will be emitted prior to the file data.
The output is sorted first to place the lowest coverage at the top,
then it is sorted lexically by package or file name.

Configuration File
==================

Overcover can also read a configuration file containing the target
threshold, which may be in any number of formats as long as the file
has a proper extension; e.g., for a YAML file, the configuration file
name should end with ".yaml" or ".yml".  The values in this file are
named the same as the command line options, and the configuration file
may be specified to Overcover using either ``OVERCOVER_CONFIG`` or the
``--config`` command line option::

    % overcover --config config.yaml

An example of that file could be as follows::

    ---
    threshold: 75

Automatically Updating the Threshold
------------------------------------

When using a configuration file with Overcover, the Overcover tool can
automatically update the threshold in the file, to help ensure that
coverage can never decrease.  This is done using the *headroom*
options, ``--min-headroom`` and ``--max-headroom``
(``OVERCOVER_MIN_HEADROOM`` and ``OVERCOVER_MAX_HEADROOM`` for
environment variables, and ``min_headroom`` and ``max_headroom`` in
the configuration files).  If the total coverage exceeds the threshold
plus the maximum headroom, then the threshold will be updated to be
the total coverage minus the minimum headroom.  An example of a
configuration file set up to use this automatic update feature would
be as follows::

    ---
    threshold: 75
    min_headroom: 1
    max_headroom: 2

To provide a concrete example of the automatic threshold update, let's
assume that we're using the above configuration file, and that the
actual coverage is 80%.  Since ``max_headroom`` is set to 2, that
means that the coverage would be greater than ``threshold +
max_headroom`` (77%), so the threshold would be updated to the
coverage minus the ``min_headroom``, or 79%, and this configuration
file would become::

    ---
    threshold: 79
    min_headroom: 1
    max_headroom: 2

(Note that the configuration file after the update likely won't look
*exactly* like this, as it is programmatically generated.)

Automatic threshold update only occurs when a configuration file is
specified using ``--config`` or the environment variable
``OVERCOVER_CONFIG``, and when ``max_headroom`` is set to a value
strictly greater than ``min_headroom``.  Defaults for all these values
are shown below.

Preventing Automatic Update
---------------------------

Sometimes it is convenient to prevent an automatic update of the
configuration file, such as during a CI run.  This can be done by
using the ``--readonly`` flag, or setting the ``OVERCOVER_READONLY``
environment variable.  (The variable need not have any particular
value; it need only appear in the environment.)  In this scenario,
Overcover will exit with a status code of 5 to indicate that the
configuration file needs to be updated with a new threshold; it will
also emit a human-readable error message to the standard error stream
indicating what the threshold should be set to.

Options/Configuration Table
===========================

+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
| Configuration | Environment Variable   | Command Line Option | Default    | Description                                                              |
+===============+========================+=====================+============+==========================================================================+
|               | OVERCOVER_COVERPROFILE | --coverprofile (-p) | *Required* | Name of the coverage profile generated by ``go test``.                   |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
| threshold     | OVERCOVER_THRESHOLD    | --threshold (-t)    | 0.0        | Minimum coverage threshold required.                                     |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
| min_headroom  | OVERCOVER_MIN_HEADROOM | --min-headroom (-m) | 0.0        | Minimum headroom.  Used to compute a new threshold.                      |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
| max_headroom  | OVERCOVER_MAX_HEADROOM | --max-headroom (-M) | 0.0        | Maximum headroom.  Used to determine when the threshold must be updated. |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
|               | OVERCOVER_CONFIG       | --config (-c)       | *None*     | Specifies the name of the configuration file to use.                     |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
|               | OVERCOVER_READONLY     | --readonly (-r)     |            | Specifies that the configuration file should not be updated.             |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
|               | OVERCOVER_BUILD_ARG    | --build-arg (-b)    | *None*     | Specifies a build argument for package selection.                        |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
|               | OVERCOVER_SUMMARY      | --summary (-s)      |            | Specifies that per-package summary information should be emitted.        |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
|               | OVERCOVER_DETAILED     | --detailed (-d)     |            | Specifies that per-file coverage information should be emitted.          |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+
|               |                        | --help (-h)         |            | Emits help text describing how to use Overcover.                         |
+---------------+------------------------+---------------------+------------+--------------------------------------------------------------------------+

Key:

* *Required* - Option must be provided.
* *None* - No default, not required.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL