Metadata-Version: 2.1
Name: diff-cov-lint
Version: 0.1.1
Summary: Linting and coverage reports for diff only
Home-page: https://gitlab.com/sVerentsov/diff-cov-lint
Author: Sergey Verentsov
Author-email: verentsov@eora.ru
License: UNKNOWN
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 "."
        
        ## CI Setup
        
        This project's repo uses diff-cov-lint itself. You might want to check [.gitlab-ci.yml](https://gitlab.com/sVerentsov/diff-cov-lint/blob/master/.gitlab-ci.yml) for full configuration.
        
        The scenario is following:
         - 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 and tags or manually on any push. (code_quality_full job)
        
        Test job: 
        ```yaml
        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:
        
        ```yaml
        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:
        
        ```yaml
        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. 
        ```
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
