Skip to main content

Linting and coverage reports for diff only

Project description

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. 

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

diff_cov_lint-0.1.4.tar.gz (6.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

diff_cov_lint-0.1.4-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file diff_cov_lint-0.1.4.tar.gz.

File metadata

  • Download URL: diff_cov_lint-0.1.4.tar.gz
  • Upload date:
  • Size: 6.1 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for diff_cov_lint-0.1.4.tar.gz
Algorithm Hash digest
SHA256 375413faedd13255694ecc001f8ba82396849cb7343cd99fd3105b05ec9f537b
MD5 4f4b6568cc3db77375b14c7c549b5172
BLAKE2b-256 2db3f97bdce710b1dbfab27c81356b3a9aba36803fdcfdf77d08ad404aa134ce

See more details on using hashes here.

File details

Details for the file diff_cov_lint-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: diff_cov_lint-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for diff_cov_lint-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 bb502b511f0579152671e268d53b18527e40d991a419f8494b4890e4c065616c
MD5 b3447a898a4dbaf70d7e3a4383f24d1a
BLAKE2b-256 1b12cf7b90ea34f2371d15ae80c42f96902e5272dc23771e3fef8c1a14fa34e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page