Linting and coverage reports for diff only
pip install diff-cov-lint==0.1.2
Linting and coverage reports for git diff only.
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 "."
This project's repo uses diff-cov-lint itself. You might want to check .gitlab-ci.yml for full configuration.
The scenario is following:
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.