Page MenuHomePhabricator

Allow control over which extra extensions are installed (Math REL1_43 jobs exceed 60min timeout)
Open, MediumPublic

Description

2025-11-26 Wikitech-l announcement


Background

Prior to 2015, we had one Jenkins job that tested most MediaWiki patches, regardless of which extension. It would install the "current" extension (based on the repo) and apply the "current" patch. If your extension had any dependencies, you needed to maintain a separate Jenkins job that would alter this.

In 2015, we remove the need for these ad-hoc jobs by providing a way to configure the main job via environment variables. This meant that all you have to do is edit a (small) YAML file that only has one clear and simple purpose: list what (if any) dependencies your extension wants to have installed. Perfect!

This happened in T96690, and https://gerrit.wikimedia.org/r/207132.

While it seems to be forgotten knowledge now, this YAML file is actually interpreted recursively.

In 2015, this recursion was harmless. In theory, this allows for a bit of de-duplication when introducing a new hard dependency. Either it made very little difference, neither a boon nor a bane. Extensions rarely have hard dependencies. And even when they do, it's generally just one or two. That was true in 2015, and that remains true a decade later in 2025.

Status quo

Through our use of Gerrit and especially Zuul, the WMF CI has consistently stayed ahead of the industry norm [1] For example:

  • Since 2013 (Gerrit): Test all patches before merging. We enforce testing of all patches before marging, i.e. master always green (mostly!). GitHub did eventually introduce "protected branches", but it remains common for projects and private companies to have a culture of active maintainers committing directly to master, "the build" runs after, and "the build" can be failing. It a patch breaks "the build" it has to be found and reverted, and meanwhile you will be working on top of code that should not have been committed in the first place.
  • Since 2013 (Zuul gate): Test at point of merging. A patch may have pass today, but between now and next week when someone reviews it, a lot can change. For example: Changes to code underneath what you are writing, a dependency in core or another extension, changes elseswhere in the same repo, new integration tests, new lint requirements, new structure tests, removing a then-unused dependency, etc. Without the Zuul gate, these would be would merge without Git-level merge conflict and break the build for the next person. The gate means humans do CodeReview+2, Zuul then kicks off another round of tests based on latest master, and only Jenkins does the actual Git merge.
  • Since 2013 (Gerrit): Stacked patches instead of feature branches, these simultaneously foster both fast-paced development (by landing patches as they come, encouraging others to merge early and often, yet without being blocked on your previous patches having landed first) and quality (by testing and reviewing each patch on its own, rather than waiting for feature branches that become too big to review, yet too costly not to merge, and impossible to revert).
  • Since 2013 (Zuul dependent pipeline): In late 2013 we enabled the dependent pipeline feature in our Zuul gate, whicih provides us with even higher guruantees of not introducing failures. In addition to covering the gap between patch upload and patch review (i.e. "Test at point of merging") this also covers race conditions between patches being reviewed at the same time. This happens every day, including Monday before branch cut, daily around UTC-midday when a majority of reviewers are active, and most importanty during backports straight to production. You really don't want to find out in production that prod+patch1 and prod+patch2 both pass but that merging both produces a failure you won't notice anywhere in CI - you'll instead encounter it cold in production after rolling it to all wikis. The dependent pipeline orders the patches rather than allowing races. To speed things up, it does test and merge things concurrently in practice, by using various algorithms and clever predictions which are then validated (or fallback to queueing). Ref T50419, T94322.
  • Since 2013 (Zuul): Bi-directional vertical integration. When testing a MediaWiki core patch, CI also installs and tests a dozen extensions that make use of core APIs. In isolation this seems unneeded given that it should be permitted for core to make a breaking change and for extensions to adapt to that change. However, given that we deploy on a daily basis, it is unacceptable to leave the code in an undeployable state. Instead, CI for extensions runs with latest master of upstream MediaWiki core (not latest stable or latest WMF), and CI for MediaWiki core integrates downstream with various extensions. This means you naturally discover if your breaking change is affecting code used in production, and thus have to accomodate that beforehand instead of afterward. This lowers the barrier of expertise needed for patch authors, and increases confidence from patch reviewerers (CI tells you everything what you need to know!) It also takes away time pressure from having to fix things between A and B. Any patch can land at any time, allowing to maximise reviewer availability.
  • Since 2015 (dependencies.yaml, now "Quibble"): Extra vertical integration, in addition to core and a given extension integrating in both directions, in 2015, the adoption of YAML-based dependency manifests in CI (T96690) resulted in large scale adoption of even more vertical integrations. It turns out teams find great value in installing additional extensions that are not hard dependencies, but provide coverage and confidence through other means. (Details below).

I'm mentioning all this because while our CI gives developers high confidence, it is not obvious per-se where that comes from. The above is meant to illustrate where this comes from, and, where it doesn't come from, so that my proposal will not come across as risking a compromise in this confidence. The above all remains unchanged.

The Good

Teams have adopted Extra vertical integration for various use cases, such as:

  • Soft dependencies on an upstream extension that you provide extra functionality for (you are downstream).

    This bi-directional integration makes breakage unlikely, by allowing patches upstream to ensure code is always deployable even for downstreams. Likewise, patches downstream make sure that they don't cause default functionality to break.
    • Cite runs with VisualEditor, not a hard dependency.
    • AbuseFilter runs with CentralAuth.
  • Downstream dependencies are extensions that you provide extra functionality to you, where you are the upstream.
    • VisualEditor runs with Cite.
    • Wikibase runs with WikibaseMediaInfo.
  • Siblings between conceptually-related extensions that have been known to carry risks or are otherwise of interest to maintainers to keep a closer eye on, reduce chances of sideways breakage.

The Bad

Somewhere along the way, I believe we have forgotten that these "extra dependencies" are interpreted in our Zuul logic as infinitely transitive and recursive.

This is the main cause for why CI jobs for the REL1_43 branch of the Math extension are now timing out after 60 minutes. Even though we haven't gained significantly more Math tests, or added any dependencies, the time has crept up from 5min, 15min, 30min, 45min and as of this month beyond 60 minutes.

Math has zero hard dependencies:

mediawiki/extensions/Math: /extension.json
	"requires": {
		"extensions": {}
	},

In Zuul config, the following extra dependencies are declared by the maintainers of Math, because we provide added functionality for VisualEditor and Wikibase, both of which are in turn also dependency-free, so this is expected to add exactly two extra extensions to our CI jobs:

integration/config: /zuul/dependencies.yaml
Math:
 - VisualEditor
 - Wikibase

In actuality, 65 extensions are installed. Here's a few of them:

  1. Math
  2. Math > VisualEditor
  3. Math > VisualEditor > Cite
  4. Math > VisualEditor > Cite > cldr
  5. Math > VisualEditor > Cite > CommunityConfiguration
  6. Math > VisualEditor > Cite > Gadgets
  7. Math > VisualEditor > Cite > ParserFunctions
  8. Math > VisualEditor > Cite > Popups
  9. Math > VisualEditor > Cite > WikiEditor
  10. Math > VisualEditor > Cite > …
  11. Math > VisualEditor > TemplateData
  12. Math > VisualEditor > FlaggedRevs
  13. Math > VisualEditor > ConfirmEdit
  14. Math > VisualEditor > DiscussionTools
  15. Math > VisualEditor > …
  16. Math > Wikibase
  17. Math > Wikibase > ArticlePlaceholder
  18. Math > Wikibase > ArticlePlaceholder > WikibaseCirrusSearch
  19. Math > Wikibase > ArticlePlaceholder > WikibaseCirrusSearch > CirrusSearch
  20. Math > Wikibase > ArticlePlaceholder > WikibaseCirrusSearch > CirrusSearch > WikibaseCirrusSearch > …
  21. Math > Wikibase > ArticlePlaceholder > WikibaseCirrusSearch > CirrusSearch > WikibaseLexeme
  22. Math > Wikibase > ArticlePlaceholder > WikibaseCirrusSearch > CirrusSearch > …
  23. Math > Wikibase > WikibaseMediaInfo
  24. Math > Wikibase > WikibaseMediaInfo > UniversalLanguageSelector >
  25. Math > Wikibase > WikibaseMediaInfo > UniversalLanguageSelector > …

This is not a dependency graph. While this started as a way to save a few keystrokes in the CI manifest for hard dependencies, the vast majority of these are now local decisions by local maintainers about extra extensions to install.

Sometimes these are soft dependencies, sometimes these are siblings, sometimes these are inverted dependencies (i.e. upstream integration). For example note how Math maintainers have an interest in VisualEditor and Wikibase, which Math consumes. VisualEditor maintainers in turn have an interest in their other consumers such as DiscussionTools. Likewise, Wikibase maintainers have an interest in consumers such as ArticlePlaceholder and WikibaseMediaInfo but neiher are relevant to Math. And it goes further with WBMI taking an interest in ULS, and so on.

For extreme cases, the PHPUnit "Standalone" group (docs: MW PHPUnit groups, MW PHPUnit tutorial) allows us to tag slow tests that may be skipped in integrated contexts from remote repositories, but that is a finegrained tool. At the top-level I think we need to
first disable this recursion and give repo owners agency over the "extra" extensions they do and don't want.

Proposal

  • Preserve the list we have today. Nothing will be removed that is listed as a dependency today.
  • Disable recursion.
  • Do a one-time scan of extension.json to declare any missing dependencies, to make sure we keep any hard dependencies that came in through recursion until now.
  • Provide a public diff, allowing maintainers to review the effective impact and to add any "extra" extensions they wish to install.

Impact: The canary for this is the Math extension , where I hope to cut the main non-parallel PHPUnit job by at least 70% from 60 minutes to 20 minutes.

Progress

https://docs.google.com/spreadsheets/d/1JA1AsCxcDN76WQOhhpxsgiQgKxJNzyjw2Rsl4xnXsyE/edit?gid=0#gid=0


Footnotes:
[1]: Industry "norms" are usually defined by big players, e.g. enterprises and other large collaborative projects. Google, Mozilla, Facebook, Apple, OpenStack. But, the Microsoft-led open source regression-to-the-mean of the 2010s have redefined the "norm" as whatever a minority of developers who speak at conferences and go viral on social media seem to "expect". And that expectation has been pushed down over two decades, down to a barely-minimum-viable experience provided by the supermarket homebrands of CI, such as Travis and GitHub. i.e. a single shell script and a text output buffer that stays for 14 days. Wow, it almost competes with 2001! (e.g. CruiseControl.) These may be good enough for startups and personal projects, and, 95% of medium-size projects can actually shoe-horn everything into this with many compormises, but it is by no means providing a high degree of quality assurance. And that's of course what CI is for. CI doesn't exist to deploy, it exists to maintain quality and stabilty, to detect failure.

Details

Related Changes in Gerrit:
SubjectRepoBranchLines +/-
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+4 -1
integration/configmaster+1 -1
mediawiki/extensions/BlueSpiceProDistributionConnectormaster+92 -17
mediawiki/extensions/BlueSpiceProDistributionConnectorREL1_43-5.2.x+92 -17
mediawiki/extensions/BlueSpiceProDistributionConnectorREL1_43+92 -17
mediawiki/extensions/BlueSpiceDistributionConnectorREL1_43+234 -95
mediawiki/extensions/BlueSpiceDistributionConnectormaster+234 -95
mediawiki/extensions/BlueSpiceDistributionConnectorREL1_43-5.2.x+234 -95
mediawiki/extensions/BlueSpiceDistributionConnectorREL1_43+10 -0
integration/configmaster+32 -32
integration/configmaster+4 -1
integration/configmaster+3 -1
integration/configmaster+1 -1
integration/configmaster+3 -1
integration/configmaster+4 -1
integration/configmaster+1 -1
integration/configmaster+2 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+4 -1
integration/configmaster+2 -1
integration/configmaster+3 -1
integration/configmaster+1 -0
integration/configmaster+2 -1
mediawiki/extensions/SocialProfileREL1_43+22 -6
mediawiki/extensions/SocialProfileREL1_44+22 -6
mediawiki/extensions/SocialProfileREL1_45+22 -6
integration/configmaster+1 -1
integration/configmaster+1 -1
mediawiki/extensions/SocialProfilemaster+22 -6
integration/configmaster+1 -1
integration/configmaster+4 -4
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
mediawiki/extensions/CheckUserREL1_45+1 -3
integration/configmaster+1 -1
mediawiki/extensions/CheckUsermaster+1 -3
mediawiki/extensions/CheckUserREL1_44+9 -4
integration/configmaster+10 -10
integration/configmaster+7 -3
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+3 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
mediawiki/extensions/IPInfoREL1_44+2 -0
integration/configmaster+1 -1
mediawiki/extensions/CentralAuthREL1_43+3 -3
mediawiki/extensions/DiscussionToolsREL1_44+5 -0
mediawiki/extensions/DiscussionToolsREL1_44+1 -0
mediawiki/extensions/ConfirmEditmaster+107 -131
integration/configmaster+1 -1
mediawiki/extensions/IPReputationREL1_45+0 -2
mediawiki/extensions/IPReputationREL1_44+0 -2
mediawiki/extensions/ConfirmEditREL1_45+370 -366
mediawiki/extensions/ConfirmEditmaster+384 -380
mediawiki/extensions/IPReputationmaster+0 -2
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+1 -1
integration/configmaster+2 -2
integration/configmaster+2 -2
integration/configmaster+12 -12
integration/configmaster+2 -2
integration/configmaster+35 -35
integration/configmaster+28 -28
mediawiki/extensions/ProofreadPageREL1_39+46 -25
integration/configmaster+41 -41
integration/configmaster+50 -51
integration/configmaster+52 -52
integration/configmaster+902 -234
integration/configmaster+1 K -713
mediawiki/extensions/TranslateREL1_45+5 -2
mediawiki/extensions/TranslateREL1_43+5 -2
mediawiki/extensions/TranslateREL1_44+5 -2
mediawiki/extensions/GrowthExperimentsmaster+7 -4
mediawiki/extensions/Translatemaster+5 -2
integration/configmaster+1 -0
integration/configmaster+1 -0
integration/configmaster+1 -0
integration/configmaster+15 -0
integration/configmaster+1 -0
mediawiki/extensions/ProofreadPageREL1_44+43 -21
mediawiki/extensions/ProofreadPageREL1_43+43 -21
integration/quibblemaster+1 -1
mediawiki/extensions/CheckUsermaster+2 -0
mediawiki/extensions/CheckUsermaster+3 -0
mediawiki/extensions/MobileFrontendREL1_44+0 -2
mediawiki/extensions/MobileFrontendREL1_43+0 -2
mediawiki/extensions/MobileFrontendREL1_39+0 -2
integration/configmaster+0 -3
mediawiki/extensions/IPInfomaster+4 -0
mediawiki/extensions/CheckUsermaster+14 -8
integration/configmaster+1 -0
mediawiki/extensions/Flowmaster+3 -0
mediawiki/extensions/MobileFrontendmaster+0 -2
mediawiki/extensions/Flowmaster+15 -4
mediawiki/extensions/FlowREL1_43+82 -64
mediawiki/extensions/FlowREL1_44+82 -64
mediawiki/extensions/Flowmaster+82 -64
mediawiki/extensions/CentralAuthREL1_44+1 -1
mediawiki/extensions/CentralAuthmaster+1 -1
mediawiki/extensions/DiscussionToolsmaster+1 -0
mediawiki/extensions/ProofreadPagemaster+43 -21
integration/configmaster+227 -0
mediawiki/extensions/AbuseFilterREL1_43+30 -5
mediawiki/extensions/AbuseFilterREL1_44+30 -5
mediawiki/extensions/AbuseFilterREL1_39+30 -5
mediawiki/extensions/CheckUserREL1_44+62 -52
mediawiki/extensions/CheckUsermaster+76 -65
mediawiki/extensions/CheckUsermaster+70 -53
mediawiki/extensions/CheckUsermaster+8 -1
mediawiki/extensions/AbuseFiltermaster+30 -5
mediawiki/extensions/CheckUsermaster+2 -8
mediawiki/extensions/CirrusSearchREL1_43+16 -5
mediawiki/extensions/CirrusSearchREL1_44+13 -2
integration/configmaster+3 -0
integration/configmaster+2 -0
integration/configmaster+2 -0
integration/configmaster+1 -0
mediawiki/extensions/CheckUserREL1_44+1 -0
mediawiki/extensions/DiscussionToolsmaster+5 -0
mediawiki/extensions/EchoREL1_43+1 -2
mediawiki/extensions/EchoREL1_44+1 -2
integration/configmaster+21 -0
mediawiki/extensions/Echomaster+1 -2
mediawiki/extensions/WikimediaMessagesmaster+9 -0
mediawiki/extensions/WikibaseLexememaster+12 -0
integration/configmaster+1 -0
mediawiki/extensions/Wikibasemaster+13 -15
mediawiki/extensions/CirrusSearchmaster+18 -2
integration/configmaster+2 -0
mediawiki/extensions/CheckUsermaster+1 -0
mediawiki/extensions/Wikibasemaster+3 -3
integration/configmaster+1 -0
mediawiki/extensions/Wikibasemaster+3 -3
mediawiki/extensions/Wikibasemaster+118 -149
integration/configmaster+24 -0
integration/configmaster+24 -28
integration/configmaster+7 -7
integration/configmaster+14 -0
integration/configmaster+9 -0
integration/configmaster+72 -72
mediawiki/extensions/Citemaster+15 -0
integration/configmaster+272 -0
mediawiki/extensions/JsonConfigmaster+8 -9
mediawiki/extensions/ConfirmEditREL1_43+46 -46
mediawiki/extensions/ConfirmEditmaster+46 -46
mediawiki/extensions/ConfirmEditREL1_44+46 -46
mediawiki/extensions/WikimediaEventsmaster+5 -0
integration/configmaster+210 -115
Show related patches Customize query in gerrit

Related Objects

StatusSubtypeAssignedTask
OpenNone
OpenNone
Openhashar
ResolvedEsanders
Resolvedhashar
Openhashar
ResolvedBUG REPORTUmherirrender
Openhashar
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
Resolvedhashar
Openhashar
Openhashar
Resolvedhashar
ResolvedDAlangi_WMF
Resolvedmszwarc
Resolvedhashar
Resolvedhashar
ResolvedAmmarpad
Resolvedhashar
OpenNone
OpenNone
OpenNone
Resolvedhashar
ResolvedBUG REPORThashar
Resolvedhashar
ResolvedNone
Resolvedhashar
ResolvedDaimona

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Change #1225482 merged by jenkins-bot:

[integration/config@master] Zuul: [CheckLists] disable recursion

https://gerrit.wikimedia.org/r/1225482

Change #1225532 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [AutoModerator] disable recursion

https://gerrit.wikimedia.org/r/1225532

Change #1225533 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [Babel] disable recursion

https://gerrit.wikimedia.org/r/1225533

Change #1225532 merged by jenkins-bot:

[integration/config@master] Zuul: [AutoModerator] disable recursion

https://gerrit.wikimedia.org/r/1225532

Change #1225533 merged by jenkins-bot:

[integration/config@master] Zuul: [Babel] disable recursion

https://gerrit.wikimedia.org/r/1225533

Change #1225590 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [ContentStabilization] disable recursion

https://gerrit.wikimedia.org/r/1225590

Change #1225591 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [ContentDroplets] disable recursion

https://gerrit.wikimedia.org/r/1225591

Change #1225592 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: disable recursion on broken repos

https://gerrit.wikimedia.org/r/1225592

Change #1225590 merged by jenkins-bot:

[integration/config@master] Zuul: [ContentStabilization] disable recursion

https://gerrit.wikimedia.org/r/1225590

Change #1225591 merged by jenkins-bot:

[integration/config@master] Zuul: [ContentDroplets] disable recursion

https://gerrit.wikimedia.org/r/1225591

Change #1225592 merged by jenkins-bot:

[integration/config@master] Zuul: disable recursion on broken repos

https://gerrit.wikimedia.org/r/1225592

Change #1225465 merged by jenkins-bot:

[mediawiki/extensions/SocialProfile@master] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1225465

Change #1226783 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [MediaUploader] disable recursion

https://gerrit.wikimedia.org/r/1226783

Change #1226783 merged by jenkins-bot:

[integration/config@master] Zuul: [MediaUploader] disable recursion

https://gerrit.wikimedia.org/r/1226783

Change #1226794 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/SocialProfile@REL1_45] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1226794

Change #1226795 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/SocialProfile@REL1_44] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1226795

Change #1226796 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/SocialProfile@REL1_43] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1226796

Change #1226799 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [CollabPads] disable recursion

https://gerrit.wikimedia.org/r/1226799

Change #1226799 merged by jenkins-bot:

[integration/config@master] Zuul: [CollabPads] disable recursion

https://gerrit.wikimedia.org/r/1226799

Change #1226821 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [WebAuthn] disable recursion

https://gerrit.wikimedia.org/r/1226821

Change #1226822 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [Wikistories] disable recursion

https://gerrit.wikimedia.org/r/1226822

Change #1226821 merged by jenkins-bot:

[integration/config@master] Zuul: [WebAuthn] disable recursion

https://gerrit.wikimedia.org/r/1226821

Change #1226850 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/skins/MinervaNeue@master] selenium: skip References tests when Cite is not loaded

https://gerrit.wikimedia.org/r/1226850

Change #1226794 merged by Lewis Cawte:

[mediawiki/extensions/SocialProfile@REL1_45] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1226794

Change #1226795 merged by Lewis Cawte:

[mediawiki/extensions/SocialProfile@REL1_44] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1226795

Change #1226796 merged by jenkins-bot:

[mediawiki/extensions/SocialProfile@REL1_43] Only load WikiEditor integration when it is loaded

https://gerrit.wikimedia.org/r/1226796

Change #1226868 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [MinervaNeue] disable recursion

https://gerrit.wikimedia.org/r/1226868

Change #1226868 merged by jenkins-bot:

[integration/config@master] Zuul: [MinervaNeue] disable recursion

https://gerrit.wikimedia.org/r/1226868

Change #1227767 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [MinervaNeue] add Echo as a dependency

https://gerrit.wikimedia.org/r/1227767

Change #1227767 merged by jenkins-bot:

[integration/config@master] Zuul: [MinervaNeue] add Echo as a dependency

https://gerrit.wikimedia.org/r/1227767

Change #1227833 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [TEI] disable recursion

https://gerrit.wikimedia.org/r/1227833

Change #1227835 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [CodeMirror] disable recursion

https://gerrit.wikimedia.org/r/1227835

Change #1227833 merged by jenkins-bot:

[integration/config@master] Zuul: [TEI] disable recursion

https://gerrit.wikimedia.org/r/1227833

Change #1227835 merged by jenkins-bot:

[integration/config@master] Zuul: [CodeMirror] disable recursion

https://gerrit.wikimedia.org/r/1227835

Change #1227866 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [Cite] disable recursion

https://gerrit.wikimedia.org/r/1227866

Change #1227866 merged by jenkins-bot:

[integration/config@master] Zuul: [Cite] disable recursion

https://gerrit.wikimedia.org/r/1227866

Change #1227878 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [skins/BlueSpiceDiscovery] disable recursion

https://gerrit.wikimedia.org/r/1227878

Change #1227878 merged by jenkins-bot:

[integration/config@master] Zuul: [skins/BlueSpiceDiscovery] disable recursion

https://gerrit.wikimedia.org/r/1227878

Change #1229528 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [WikiEditor] disable recursion

https://gerrit.wikimedia.org/r/1229528

Change #1229528 merged by jenkins-bot:

[integration/config@master] Zuul: [WikiEditor] disable recursion

https://gerrit.wikimedia.org/r/1229528

Change #1214597 abandoned by Hashar:

[integration/config@master] Zuul: disable recursion on UploadWizard

Reason:

I have disabled recursion with I6afd767916e8963d3a9bf3678621949473f34ca5

https://gerrit.wikimedia.org/r/1214597

Change #1229546 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [AbuseFilter] disable recursion

https://gerrit.wikimedia.org/r/1229546

Change #1229546 merged by jenkins-bot:

[integration/config@master] Zuul: [AbuseFilter] disable recursion

https://gerrit.wikimedia.org/r/1229546

Change #1229561 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [Flow] disable recursion

https://gerrit.wikimedia.org/r/1229561

Change #1229561 merged by jenkins-bot:

[integration/config@master] Zuul: [Flow] disable recursion

https://gerrit.wikimedia.org/r/1229561

Change #1229566 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [skins/Cosmos] disable recursion

https://gerrit.wikimedia.org/r/1229566

Change #1229567 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [skins/Refreshed] disable recursion

https://gerrit.wikimedia.org/r/1229567

Change #1229566 merged by jenkins-bot:

[integration/config@master] Zuul: [skins/Cosmos] disable recursion

https://gerrit.wikimedia.org/r/1229566

Change #1229567 merged by jenkins-bot:

[integration/config@master] Zuul: [skins/Refreshed] disable recursion

https://gerrit.wikimedia.org/r/1229567

Change #1229580 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [mediawiki/services/parsoid] disable recursion

https://gerrit.wikimedia.org/r/1229580

Change #1229580 merged by jenkins-bot:

[integration/config@master] Zuul: [mediawiki/services/parsoid] disable recursion

https://gerrit.wikimedia.org/r/1229580

Change #1226822 merged by jenkins-bot:

[integration/config@master] Zuul: [Wikistories] disable recursion

https://gerrit.wikimedia.org/r/1226822

Change #1229593 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [AdhocTranslation] disable recursion

https://gerrit.wikimedia.org/r/1229593

Change #1229594 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [CognitiveProcessDesigner] disable recursion

https://gerrit.wikimedia.org/r/1229594

Change #1229595 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [FlexiSkin] disable recursion

https://gerrit.wikimedia.org/r/1229595

Change #1229596 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [MenuEditor] disable recursion

https://gerrit.wikimedia.org/r/1229596

Change #1229602 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [UserProfile] disable recursion

https://gerrit.wikimedia.org/r/1229602

Change #1229593 merged by jenkins-bot:

[integration/config@master] Zuul: [AdhocTranslation] disable recursion

https://gerrit.wikimedia.org/r/1229593

Change #1229594 merged by jenkins-bot:

[integration/config@master] Zuul: [CognitiveProcessDesigner] disable recursion

https://gerrit.wikimedia.org/r/1229594

Change #1229595 merged by jenkins-bot:

[integration/config@master] Zuul: [FlexiSkin] disable recursion

https://gerrit.wikimedia.org/r/1229595

Change #1229596 merged by jenkins-bot:

[integration/config@master] Zuul: [MenuEditor] disable recursion

https://gerrit.wikimedia.org/r/1229596

Change #1229602 merged by jenkins-bot:

[integration/config@master] Zuul: [UserProfile] disable recursion

https://gerrit.wikimedia.org/r/1229602

Change #1233744 had a related patch set uploaded (by Jforrester; author: Jforrester):

[integration/config@master] jjb: Upgrade Quibble jobs to 1.15.0

https://gerrit.wikimedia.org/r/1233744

Change #1233744 merged by jenkins-bot:

[integration/config@master] jjb: Upgrade Quibble jobs to 1.15.0

https://gerrit.wikimedia.org/r/1233744

Change #1234422 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/BlueSpiceDistributionConnector@REL1_43] tests: skip PageHitsTest when BlueSpiceExtendedStatics is not loaded

https://gerrit.wikimedia.org/r/1234422

Change #1234422 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceDistributionConnector@REL1_43] tests: skip PageHitsTest when BlueSpiceExtendedStatics is not loaded

https://gerrit.wikimedia.org/r/1234422

Change #1235000 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/BlueSpiceDistributionConnector@REL1_43] Only register RL modules when extensions are loaded

https://gerrit.wikimedia.org/r/1235000

Change #1235040 had a related patch set uploaded (by Hashar; author: Hashar):

[mediawiki/extensions/BlueSpiceProDistributionConnector@REL1_43] Only load External Content when the extension is loaded

https://gerrit.wikimedia.org/r/1235040

Change #1235806 had a related patch set uploaded (by Hslater; author: Hashar):

[mediawiki/extensions/BlueSpiceDistributionConnector@REL1_43-5.2.x] Only register RL modules when extensions are loaded

https://gerrit.wikimedia.org/r/1235806

Change #1235806 merged by Hslater:

[mediawiki/extensions/BlueSpiceDistributionConnector@REL1_43-5.2.x] Only register RL modules when extensions are loaded

https://gerrit.wikimedia.org/r/1235806

Change #1235807 had a related patch set uploaded (by Hslater; author: Hashar):

[mediawiki/extensions/BlueSpiceDistributionConnector@master] Only register RL modules when extensions are loaded

https://gerrit.wikimedia.org/r/1235807

Change #1235807 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceDistributionConnector@master] Only register RL modules when extensions are loaded

https://gerrit.wikimedia.org/r/1235807

Change #1235000 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceDistributionConnector@REL1_43] Only register RL modules when extensions are loaded

https://gerrit.wikimedia.org/r/1235000

Change #1235040 merged by Hslater:

[mediawiki/extensions/BlueSpiceProDistributionConnector@REL1_43] Only load External Content when the extension is loaded

https://gerrit.wikimedia.org/r/1235040

Change #1235816 had a related patch set uploaded (by Hslater; author: Hashar):

[mediawiki/extensions/BlueSpiceProDistributionConnector@REL1_43-5.2.x] Only load External Content when the extension is loaded

https://gerrit.wikimedia.org/r/1235816

Change #1235816 merged by Hslater:

[mediawiki/extensions/BlueSpiceProDistributionConnector@REL1_43-5.2.x] Only load External Content when the extension is loaded

https://gerrit.wikimedia.org/r/1235816

Change #1235819 had a related patch set uploaded (by Hslater; author: Hashar):

[mediawiki/extensions/BlueSpiceProDistributionConnector@master] Only load External Content when the extension is loaded

https://gerrit.wikimedia.org/r/1235819

Change #1235819 merged by jenkins-bot:

[mediawiki/extensions/BlueSpiceProDistributionConnector@master] Only load External Content when the extension is loaded

https://gerrit.wikimedia.org/r/1235819

Change #1236268 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [BlueSpiceDistributionConnector] disable recursion

https://gerrit.wikimedia.org/r/1236268

Change #1236272 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [BlueSpiceProDistributionConnector] disable recursion

https://gerrit.wikimedia.org/r/1236272

Change #1236272 merged by jenkins-bot:

[integration/config@master] Zuul: [BlueSpiceProDistributionConnector] disable recursion

https://gerrit.wikimedia.org/r/1236272

Change #1236268 merged by jenkins-bot:

[integration/config@master] Zuul: [BlueSpiceDistributionConnector] disable recursion

https://gerrit.wikimedia.org/r/1236268

I am down to 24 extensions still requiring recursion, most of them are Wikibase related.

$ grep -B1 'recurse: true' zuul/dependencies.yaml |grep -oP '^[\w\.]+'
ArticlePlaceholder
CheckUser
EntitySchema
GrowthExperiments
Math
MathSearch
MediaSearch
MetricsPlatform
MobileFrontend
PropertySuggester
Score
TestKitchen
Wikibase
WikibaseCirrusSearch
WikibaseLexeme
WikibaseLexemeCirrusSearch
WikibaseManifest
WikibaseMediaInfo
WikibaseQualityConstraints
Wikidata.org
WikidataPageBanner
WikimediaBadges
Wikisource
WP25EasterEggs

Change #1236329 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [MobileFrontend] disable recursion

https://gerrit.wikimedia.org/r/1236329

Change #1236329 merged by jenkins-bot:

[integration/config@master] Zuul: [MobileFrontend] disable recursion

https://gerrit.wikimedia.org/r/1236329

Change #1237857 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [GrowthExperiments] disable recursion

https://gerrit.wikimedia.org/r/1237857

Change #1237859 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [CheckUser] disable recursion

https://gerrit.wikimedia.org/r/1237859

Change #1237857 merged by jenkins-bot:

[integration/config@master] Zuul: [GrowthExperiments] disable recursion

https://gerrit.wikimedia.org/r/1237857

Change #1237860 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [MetricsPlatform] disable recursion

https://gerrit.wikimedia.org/r/1237860

Change #1237861 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Zuul: [TestKitchen] disable recursion

https://gerrit.wikimedia.org/r/1237861