SYMFONY_DEPRECATIONS_HELPER='max[total]=20' ./bin/phpunit. Twenty is the number of deprecation warnings we had on the day we started counting. The rule is that it only goes down.
Symfony 4.2 came out yesterday, on the six month schedule. With this cadence deprecation warnings stop being an event and become weather. Every minor release brings a new batch, teams train themselves not to see them, and that is a mistake, because a deprecation is the next major upgrade delivered early, in small pieces, with instructions.
The phpunit-bridge already prints the report after the test run. The trick is to turn the number into a hard limit instead of a report nobody scrolls to. A pull request that adds deprecated calls fails CI, same as a broken test. Once a sprint someone spends an hour and lowers the limit. No heroics, no dedicated upgrade week, just a limit that moves one way.
The bridge splits the count into self, direct and indirect, and this split is who owns what. Self means our code calls deprecated APIs, we fix it now. Direct means a vendor package does, we check for a release or file an issue. Indirect means dependencies talking to each other, mostly wait. Without the split people argue about warnings they cannot fix. With it every warning has an owner or an excuse.
The goal is zero before the next major. Then the upgrade to 5.0, whenever it comes, is a composer.json edit and a green build. I have done the other kind of major upgrade, the archaeology kind, and I still have the branch. It was never merged.