orbeji / phpunit-pr-coverage-check
Check the code coverage of a PR using the clover report of phpunit
Installs: 3 601
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.3
- composer-runtime-api: ^2.2
- ext-json: *
- ext-simplexml: *
- mashape/unirest-php: ^3.0.4
- ptlis/diff-parser: ^1.1.0
- symfony/console: ^5.4.46
- symfony/polyfill-php83: ^1.31
- symfony/polyfill-uuid: ^1.31.0
Requires (Dev)
- nyholm/symfony-bundle-test: ^3.0
- phpstan/phpstan: ^1.12.10
- phpunit/phpunit: ^10.5
- roave/security-advisories: dev-latest
- rregeer/phpunit-coverage-check: ^0.3.1
- squizlabs/php_codesniffer: ^3.10.3
- symfony/framework-bundle: ^5.4.45
- symfony/var-dumper: ^5.4.46
- webmozart/assert: ^1.11.0
This package is auto-updated.
Last update: 2024-11-12 20:28:47 UTC
README
Phpunit PR Coverage Check
About The Project
Inspired by https://github.com/richardregeer/phpunit-coverage-check
This project is a console command that filters the coverage report of your Phpunit tests to only take into account the modifications of a PullRequest, so you can be sure that the PR has enough tests.
Getting Started
Installation
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Open a command console, enter your project directory and execute:
$ composer require --dev orbeji/phpunit-pr-coverage-check
Usage
There are two ways of using this command:
- Passing a diff file
- Passing git repo information
With the first option you need to generate the appropiate diff file to pass to the command.
The diff file must only contain the modified files/lines of the pr. To do that you can call
git diff DESTINATION_BRANCH...PR_BRANCH > diff.txt
with
Bitbucket and
GitHub
you have environment variables to know
the current and destination branches.
Diff file example: Bitbucket
vendor/bin/phpunit --configuration phpunit.xml.dist --testsuite pipelines --coverage-clover 'clover.xml' git diff origin/${BITBUCKET_PR_DESTINATION_BRANCH}...origin/${BITBUCKET_BRANCH} > diff.txt vendor/bin/pr-coverage-check check clover.xml 100 --diff=diff.txt --report=ansi
GitHub
vendor/bin/phpunit --coverage-clover clover.xml git diff ${GITHUB_BASE_REF}...${GITHUB_REF_NAME} > diff.txt vendor/bin/pr-coverage-check check clover.xml 100 --diff=diff.txt
Git repo information
vendor/bin/pr-coverage-check check clover.xml 100 --pullrequest-id=1 --provider=Github --workspace=orbeji --repository=test --api_token=API_TOKEN
The API token must have permissions to the PullRequest scope.
For GitHub in the workspace option put the owner of the repo.
In any case if the coverage is not met the command will return the covered percentage
Coverage 40%
Reports
When executing the command line you can pass the option --report
to generate a table with the uncovered lines of the PR
This option accepts 3 values:
- ansi: Coverage table in console output
- comment: Coverage table in PR comment
- report: Bitbucket report
Examples:
ansi:
root@bbfb2d246e64:/app# bin/pr-coverage-check check tests/clover.xml 90 --diff=tests/diff.txt --report=ansi
Coverage: 40%
--------------- ------------
File Uncovered Lines
--------------- ------------
src/Dummy.php 19, 20, 26
--------------- ------------
CI Integration
Bitbucket Pipelines
pipelines: pull-requests: feature/*: - step: name: phpunit coverage check image: name: orbeji/base:7.2-xdebug-cli script: - composer install - vendor/bin/phpunit --configuration phpunit.xml.dist --testsuite pipelines --coverage-clover 'clover.xml' - git diff origin/${BITBUCKET_PR_DESTINATION_BRANCH}...origin/${BITBUCKET_BRANCH} > diff.txt - vendor/bin/pr-coverage-check check clover.xml 100 --diff=diff.txt --report=ansi caches: - composer
GitHub Actions
name: PHPUnit and Coverage Check on: [pull_request] jobs: test: runs-on: ubuntu-22.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: '7.2' - name: Install dependencies run: composer install - name: Run PHPUnit with coverage run: vendor/bin/phpunit --configuration phpunit.xml.dist --testsuite pipelines --coverage-clover 'clover.xml' - name: Git diff run: git fetch && git diff origin/${GITHUB_BASE_REF}...origin/${GITHUB_HEAD_REF} > diff.txt - name: PR Coverage Check run: vendor/bin/pr-coverage-check check clover.xml 100 --diff=diff.txt --report=ansi
Roadmap
- Add Bitbucket report example screenshot
- Add examples of CI for Bitbucket and GitHub
See the open issues for a full list of proposed features (and known issues).
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate and that all the GitHub Actions are passing.
License
Distributed under the MIT License.
Contact
Project Link: https://github.com/orbeji/phpunit-pr-coverage-check