Linting and coverage reports for diff only
pip install diff-cov-lint==0.1.3
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
======================== 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)
Target branch in repo
Source branch in repo
Path to coverage report in Cobertura (pytest-cov) format, If not stated, coverage report will not be produced.
Path to pylint report. If not stated, linting report will not be produced.
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: 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.