Page MenuHomePhabricator

Reconcile dependencies.yaml and phan_dependencies.yaml
Open, Needs TriagePublic

Description

Until 2019 there was a single list, and we processed it recursively. Then, in r516065 / T225112, phan dependencies were split out into a separate list that is NOT processed recursively, while the main dependency list kept being processed recursively. More recently, in T389998, the main list is being made non-recursive too. Once that's done, we could reconcile the two lists, to simplify our configuration and developer experience, and also increase consistency across the various testing tools. See T389998#10703721 and following comments for more context.

Related Objects

StatusSubtypeAssignedTask
OpenNone
Openhashar
ResolvedEsanders
Resolvedhashar
Openhashar
ResolvedBUG REPORTUmherirrender
Openhashar
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
Resolvedhashar
Openhashar
Openhashar
Resolvedhashar
ResolvedDAlangi_WMF
OpenNone
OpenNone
OpenNone
Resolvedhashar
ResolvedBUG REPORThashar
OpenNone
OpenNone
Openhashar
OpenDaimona

Event Timeline

I would argue this isn't as simple as just combining the lists. For example:

  1. Take Extension:A and Extension:B
  2. A depends on B, with associated tests and has done so for several releases
    1. This dependency is optional, and any PHPUnit/selenium tests that rely on B are skipped if B is not installed
  3. The code in A that depended on B is removed from the master branch
    1. There is no plan to reintroduce this dependency for the long-term
  4. The developers for A don't want the long running tests in B to be run on A
  5. Therefore, there is a need to remove B as a dependency of A in all branches, with the release versions having the tests skipped
    1. However, Phan tests cannot be skipped in this way without stubbing the code

In the above case:

  • Having two lists means that you can remove B as a dependency in the regular list but leave it in the Phan list
  • With just one list you would either need a way to specify what places B is used in or remove B entirely with Phan stubs to avoid it failing in the release branches

A real-world example of the above is in CheckUser, where we have removed the MediaWiki-extensions-GuidedTour related code and want to drop the dependency in CI (as that extension has some selenium tests which can run slowly). However, we need to keep the Phan dependencies so that the release branches don't have their CI blocked. We are making that change in https://gerrit.wikimedia.org/r/c/integration/config/+/1187443, so the difference in the two lists is specifically intentional.

I think that scenario is worth considering, but I don't think it would prevent this work entirely. For example, we could keep phan_dependencies but only for overrides of the main dependency lists, with most extensions (I'd hope) being able to use just one list for both, and such scenarios being a small minority.