Skip to main content

Diff cov lint

Linting and coverage reports for git diff only.

Usage:

diff-cov-lint master new_branch --cov_report=coverage.xml --lint_report=pylint_output.txt

Example output (the command above was run in tests/repo folder):

======================== DIFF COVERAGE ========================
FILE                                    COVERED STMTS   PERCENT
src/add.py                                    5     8     62.5%
src/modify.py                                 1     2     50.0%
===============================================================
TOTAL DIFF COV                                6    10     60.0%

========================== DIFF LINT ==========================
src/add.py:10:0 E0602: Undefined variable 'this_line_makes_no_sense' (undefined-variable)

Arguments:

POSITIONAL ARGUMENTS
TARGET_REF Target branch in repo
SOURCE_REF Source branch in repo

FLAGS
--cov_report=COV_REPORT
Path to coverage report in Cobertura (pytest-cov) format, If not stated, coverage report will not be produced.
--lint_report=LINT_REPORT
Path to pylint report. If not stated, linting report will not be produced.
--repo_path=REPO_PATH
Path to repo folder, defaults to "." --show_missing Flag to show missing lines, defaults to false

CI Setup

This project's repo uses diff-cov-lint itself. You might want to check .gitlab-ci.yml for full configuration.

Simple scenario

Calculate diff coverage and produce diff pylint reports for merge requests

code_quality_diff: 
    stage: code_quality_diff
    script:
        - pytest --cov=your_source_folder --cov-report xml tests # run pytest and produce xml report
        - git fetch -a # fetch all branches to calculate diff
        - pip install diff-cov-lint # install diff-cov-lint
        - pylint --exit-zero diff_cov_lint > pylint_output.txt # get pylint report. --exit-zero needed for job not to fail if pylint give score less than 10.
        - diff-cov-lint origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME --cov_report coverage.xml --lint_report pylint_output.txt # run diff-cov-lint on diff between target branch and source branch.
    only:
        - merge_requests # required to know target branch and source branch

More complicated scenario

  • Run tests on each push (test job)
  • Calculate diff coverage and produce diff pylint reports for merge requests (code_quality_diff job)
  • Get coverage and pylint report on full code on master or manually on any push. (code_quality_full job)

Test job:

test: 
    stage: test
    script: 
        - pytest --cov=your_source_folder --cov-report xml tests # run pytest and produce xml report
    artifacts:
        paths: 
            - coverage.xml # save xml report to use it in further jobs
    only:
        - tags  # tags and branches are default values of "only", so preserve them
        - branches
        - merge_requests # add merge_requests since code_quality_diff job will use artifacts of this job

Diff code quality job:

code_quality_diff: 
    stage: code_quality_diff
    script:
        - git fetch -a # fetch all branches to calculate diff
        - pip install diff-cov-lint # install diff-cov-lint
        - pylint --exit-zero diff_cov_lint > pylint_output.txt # get pylint report. --exit-zero needed for job not to fail if pylint give score less than 10.
        - diff-cov-lint origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME --cov_report coverage.xml --lint_report pylint_output.txt # run diff-cov-lint on diff between target branch and source branch. coverage.xml is used from the artifact.
    only:
        - merge_requests

Full code quality job:

code_quality_full:
    stage:
        code_quality_full
    script:
        - pytest --cov=your_source_folder tests # simply run pytest with coverage and pylint as usual
        - pylint --exit-zero diff_cov_lint
    rules:
        - if: '$CI_COMMIT_REF_NAME == "master"'
        - if: $CI_MERGE_REQUEST_ID
          when: never #otherwise this job will stuck for merge requests
        - when: manual # use manual to make this job optional for all other pipelines. 

Release files for diff-cov-lint 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for diff-cov-lint 0.1.2
File Size Uploaded
diff_cov_lint-0.1.2.tar.gz 6.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for diff-cov-lint 0.1.2
File Interpreter ABI Platform
diff_cov_lint-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size:14.4 kB

Release files / diff_cov_lint-0.1.2.tar.gz

Download URL diff_cov_lint-0.1.2.tar.gz
Size 6.0 kB
Tags Source
SHA-256 checksum
How to use checksums
49a3ddd072c8b3eb3479fe374b78f6d557d50c3f60f6ba99071f98a713cc784c
BLAKE2b-256 checksum
How to use checksums
87ae0a2681bfd4e7f72267ce269f10b2d946b6d32b669ae2f6881b83a845b742
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.6

Release files / diff_cov_lint-0.1.2-py3-none-any.whl

Download URL diff_cov_lint-0.1.2-py3-none-any.whl
Size 8.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5639d09524b4e15a8ab2801ce581695202547f8829eb8d1e8171d52b20b6f401
BLAKE2b-256 checksum
How to use checksums
81bd3b24da7845c3fca9bbaa5e57fb76637bdf6c2f617fe0042ccd3122dedd5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.6

Release history Release notifications | RSS feed

0.1.4

2 release files

0.1.3

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.0.5

2 release files

0.0.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page