roave / backward-compatibility-check
Tool to compare two revisions of a public API to check for BC breaks
Installs: 2 869 086
Dependents: 49
Suggesters: 0
Security: 0
Stars: 587
Watchers: 9
Forks: 61
Open Issues: 38
pkg:composer/roave/backward-compatibility-check
Requires
- php: ~8.3.0 || ~8.4.0
- ext-dom: *
- ext-json: *
- ext-libxml: *
- ext-simplexml: *
- azjezz/psl: ^4.0.1
- composer/composer: ^2.8.12
- nikic/php-parser: ^5.6.1
- nikolaposa/version: ^4.2.1
- ocramius/package-versions: ^2.10.0
- roave/better-reflection: ^6.65.0
- symfony/console: ^7.3.4
Requires (Dev)
- doctrine/coding-standard: ^14.0.0
- justinrainbow/json-schema: ^6.6.0
- php-standard-library/psalm-plugin: ^2.3.0
- phpunit/phpunit: ^12.4.1
- psalm/plugin-phpunit: ^0.19.5
- roave/infection-static-analysis-plugin: ^1.39.0
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^4.0.0
- vimeo/psalm: ^6.13.1
Conflicts
- marc-mabe/php-enum: <4.7.2
- revolt/event-loop: <0.2.5
- symfony/process: <5.3.7
- 8.16.x-dev
- 8.15.x-dev
- 8.15.0
- 8.14.x-dev
- 8.14.0
- 8.13.x-dev
- 8.13.0
- 8.12.x-dev
- 8.12.0
- 8.11.x-dev
- 8.11.0
- 8.10.x-dev
- 8.10.0
- 8.9.x-dev
- 8.9.0
- 8.8.x-dev
- 8.8.0
- 8.7.x-dev
- 8.7.0
- 8.6.x-dev
- 8.6.0
- 8.5.x-dev
- 8.5.0
- 8.4.x-dev
- 8.4.0
- 8.3.x-dev
- 8.3.0
- 8.2.x-dev
- 8.2.1
- 8.2.0
- 8.1.x-dev
- 8.1.0
- 8.0.x-dev
- 8.0.0
- 7.5.x-dev
- 7.4.x-dev
- 7.4.0
- 7.3.x-dev
- 7.3.0
- 7.2.x-dev
- 7.2.0
- 7.1.x-dev
- 7.1.0
- 7.0.x-dev
- 7.0.0
- 6.5.x-dev
- 6.4.x-dev
- 6.4.0
- 6.3.x-dev
- 6.3.0
- 6.2.x-dev
- 6.2.0
- 6.1.x-dev
- 6.1.1
- 6.1.0
- 6.0.x-dev
- 6.0.1
- 6.0.0
- 5.0.x-dev
- 5.0.0
- 4.4.0
- 4.3.0
- 4.2.1
- 4.2.0
- 4.1.0
- 4.0.0
- 3.0.0
- 2.1.0
- 2.0.0
- 1.1.1
- 1.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-renovate/lock-file-maintenance
- dev-feature/php-8.5-support
- dev-phar-release-script
This package is auto-updated.
Last update: 2025-10-25 05:43:13 UTC
README
A tool that can be used to verify BC breaks between two versions of a PHP library.
Pre-requisites/assumptions
- Your project uses
git - Your project uses
composer.jsonto define its dependencies - All source paths are covered by an
"autoload"section incomposer.json - Changes need to be committed to
gitto be covered. You can implement your own logic to extract sources and dependencies from a project though.
Installation
composer require --dev roave/backward-compatibility-check
Install with Docker
You can also use Docker to run roave-backward-compatibility-check:
docker run --rm -v `pwd`:/app nyholm/roave-bc-check
Usage
Adding to a continuous integration pipeline
The typical intended usage is to just add roave-backward-compatibility-check
to your CI build:
vendor/bin/roave-backward-compatibility-check
This will automatically detect the last minor version tagged, and
compare the API against the current HEAD. If any BC breaks are found,
the tool returns a non-zero status, which on most CI systems will cause
the build to fail.
NOTE: detecting the base version only works if you have git tags in
the SemVer-compliant x.y.z format, such as 1.2.3.
NOTE: since this tool relies on tags, you need to make sure tags are fetched
as part of your CI pipeline. For example in a GitHub action, note the use of
fetch-depth: 0:
jobs: roave-backwards-compatibility-check: name: Roave Backwards Compatibility Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: "Install PHP" uses: shivammathur/setup-php@v2 with: php-version: "8.0" - name: "Install dependencies" run: "composer install" - name: "Check for BC breaks" run: "vendor/bin/roave-backward-compatibility-check"
Nyholm Github Action
Tobias Nyholm also offers a simple GitHub action that you can use in your Github pipeline. We recommend this for most cases as it is simple to set up:
.github/workflows/main.yml:
on: [push] name: Test jobs: roave-backwards-compatibility-check: name: Roave Backwards Compatibility Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - name: "Check for BC breaks" uses: docker://nyholm/roave-bc-check-ga
Running manually
To generate additional documentation for changelogs:
vendor/bin/roave-backward-compatibility-check --format=markdown > results.md
GitHub Actions
When running in GitHub Actions, it is endorsed to use the --format=github-actions output format:
vendor/bin/roave-backward-compatibility-check --format=github-actions
Documentation
If you need further guidance:
vendor/bin/roave-backward-compatibility-check --help
Configuration
The file .roave-backward-compatibility-check.xml is read from the current working directory (when it exists) and sets configuration for the command.
It's expected to be an XML file that follows our schema:
Example:
<?xml version="1.0" encoding="UTF-8" ?> <roave-bc-check xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/roave/backward-compatibility-check/resources/schema.xsd"> <baseline> <ignored-regex>#\[BC\] CHANGED: The parameter \$a of of TestArtifact\\TheClass\#method\(\)#</ignored-regex> <ignored-regex>#\[BC\] CHANGED: The parameter \$b of of TestArtifact\\TheClass\#method2\(\)#</ignored-regex> </baseline> </roave-bc-check>