Page MenuHomePhabricator

Have all Wikimedia production extensions and skins in the CI gate
Open, Needs TriagePublic

Description

(See https://www.mediawiki.org/wiki/Continuous_integration/Tutorials/Adding_your_extension_to_the_shared_gate_job for context.)

This is not committed work

Already in gate

  • mediawiki/core
  • mediawiki/vendor
  • mediawiki/extensions/AbuseFilter
  • mediawiki/extensions/AntiSpoof
  • mediawiki/extensions/Babel
  • mediawiki/extensions/BetaFeatures
  • mediawiki/extensions/CheckUser
  • mediawiki/extensions/CirrusSearch
  • mediawiki/extensions/cldr
  • mediawiki/extensions/ContentTranslation
  • mediawiki/extensions/Disambiguator
  • mediawiki/extensions/Echo
  • mediawiki/extensions/Elastica
  • mediawiki/extensions/EventLogging
  • mediawiki/extensions/EventStreamConfig
  • mediawiki/extensions/FileImporter
  • mediawiki/extensions/Flow
  • mediawiki/extensions/GeoData
  • mediawiki/extensions/GlobalCssJs
  • mediawiki/extensions/GlobalPreferences
  • mediawiki/extensions/Graph
  • mediawiki/extensions/GrowthExperiments
  • mediawiki/extensions/GuidedTour
  • mediawiki/extensions/JsonConfig
  • mediawiki/extensions/Kartographer
  • mediawiki/extensions/MobileApp
  • mediawiki/extensions/MobileFrontend
  • mediawiki/extensions/NavigationTiming
  • mediawiki/extensions/PageImages
  • mediawiki/extensions/PageTriage
  • mediawiki/extensions/PageViewInfo
  • mediawiki/extensions/SandboxLink
  • mediawiki/extensions/SiteMatrix
  • mediawiki/extensions/TemplateData
  • mediawiki/extensions/Thanks
  • mediawiki/extensions/TimedMediaHandler
  • mediawiki/extensions/Translate
  • mediawiki/extensions/TwoColConflict
  • mediawiki/extensions/UniversalLanguageSelector
  • mediawiki/extensions/VisualEditor
  • mediawiki/extensions/Wikibase
  • mediawiki/extensions/WikibaseCirrusSearch
  • mediawiki/extensions/WikiLove
  • mediawiki/extensions/WikibaseMediaInfo
  • mediawiki/extensions/WikimediaMessages
  • mediawiki/skins/MinervaNeue
  • mediawiki/skins/Vector

In production but not in gate

  • mediawiki/extensions/3D
  • mediawiki/extensions/AdvancedSearch
  • mediawiki/extensions/ApiFeatureUsage
  • mediawiki/extensions/ArticleCreationWorkflow
  • mediawiki/extensions/ArticlePlaceholder
  • mediawiki/extensions/BounceHandler
  • mediawiki/extensions/Calendar
  • mediawiki/extensions/Campaigns
  • mediawiki/extensions/Capiunto
  • mediawiki/extensions/CategoryTree
  • mediawiki/extensions/CentralAuth
  • mediawiki/extensions/CentralNotice
  • mediawiki/extensions/CharInsert
  • mediawiki/extensions/Cite
  • mediawiki/extensions/CiteThisPage
  • mediawiki/extensions/Citoid
  • mediawiki/extensions/CodeEditor
  • mediawiki/extensions/CodeMirror
  • mediawiki/extensions/Cognate
  • mediawiki/extensions/CollaborationKit
  • mediawiki/extensions/Collection
  • mediawiki/extensions/CommonsMetadata
  • mediawiki/extensions/ConfirmEdit
  • mediawiki/extensions/CongressLookup
  • mediawiki/extensions/ContactPage
  • mediawiki/extensions/ContributionTracking
  • mediawiki/extensions/CreditsSource
  • mediawiki/extensions/Dashiki
  • mediawiki/extensions/DiscussionTools
  • mediawiki/extensions/DismissableSiteNotice
  • mediawiki/extensions/DonationInterface
  • mediawiki/extensions/ElectronPdfService
  • mediawiki/extensions/EntitySchema
  • mediawiki/extensions/EventBus
  • mediawiki/extensions/ExtensionDistributor
  • mediawiki/extensions/ExternalGuidance
  • mediawiki/extensions/FeaturedFeeds
  • mediawiki/extensions/FileExporter
  • mediawiki/extensions/FlaggedRevs
  • mediawiki/extensions/FundraiserLandingPage
  • mediawiki/extensions/FundraisingTranslateWorkflow
  • mediawiki/extensions/Gadgets
  • mediawiki/extensions/GeoCrumbs
  • mediawiki/extensions/GlobalBlocking
  • mediawiki/extensions/GlobalUsage
  • mediawiki/extensions/GlobalUserPage
  • mediawiki/extensions/GoogleNewsSitemap
  • mediawiki/extensions/ImageMap
  • mediawiki/extensions/InputBox
  • mediawiki/extensions/Insider
  • mediawiki/extensions/intersection
  • mediawiki/extensions/Interwiki
  • mediawiki/extensions/InterwikiSorting
  • mediawiki/extensions/Josa
  • mediawiki/extensions/LabeledSectionTransclusion
  • mediawiki/extensions/LandingCheck
  • mediawiki/extensions/LdapAuthentication
  • mediawiki/extensions/Linter
  • mediawiki/extensions/LiquidThreads
  • mediawiki/extensions/LoginNotify
  • mediawiki/extensions/MapSources
  • mediawiki/extensions/MassMessage
  • mediawiki/extensions/Math
  • mediawiki/extensions/MultimediaViewer
  • mediawiki/extensions/Newsletter
  • mediawiki/extensions/NewUserMessage
  • mediawiki/extensions/Nuke
  • mediawiki/extensions/OATHAuth
  • mediawiki/extensions/OAuth
  • mediawiki/extensions/OpenStackManager
  • mediawiki/extensions/ORES
  • mediawiki/extensions/PageAssessments
  • mediawiki/extensions/PagedTiffHandler
  • mediawiki/extensions/ParserFunctions
  • mediawiki/extensions/PdfHandler
  • mediawiki/extensions/Poem
  • mediawiki/extensions/Popups
  • mediawiki/extensions/ProofreadPage
  • mediawiki/extensions/PropertySuggester
  • mediawiki/extensions/QuickSurveys
  • mediawiki/extensions/Quiz
  • mediawiki/extensions/ReadingLists
  • mediawiki/extensions/RelatedArticles
  • mediawiki/extensions/RevisionSlider
  • mediawiki/extensions/RSS
  • mediawiki/extensions/Score
  • mediawiki/extensions/Scribunto
  • mediawiki/extensions/SearchExtraNS
  • mediawiki/extensions/SecureLinkFixer
  • mediawiki/extensions/SecurePoll
  • mediawiki/extensions/ShortUrl
  • mediawiki/extensions/SpamBlacklist
  • mediawiki/extensions/SubPageList3
  • mediawiki/extensions/SubpageSortkey
  • mediawiki/extensions/SyntaxHighlight_GeSHi
  • mediawiki/extensions/TemplateSandbox
  • mediawiki/extensions/TemplateStyles
  • mediawiki/extensions/TemplateWizard
  • mediawiki/extensions/TextExtracts
  • mediawiki/extensions/TheWikipediaLibrary
  • mediawiki/extensions/timeline
  • mediawiki/extensions/TitleBlacklist
  • mediawiki/extensions/TocTree
  • mediawiki/extensions/TorBlock
  • mediawiki/extensions/TranslationNotifications
  • mediawiki/extensions/TrustedXFF
  • mediawiki/extensions/UploadsLink
  • mediawiki/extensions/UploadWizard
  • mediawiki/extensions/UrlShortener
  • mediawiki/extensions/WebAuthn
  • mediawiki/extensions/WikibaseLexeme
  • mediawiki/extensions/WikibaseLexemeCirrusSearch
  • mediawiki/extensions/WikibaseQualityConstraints
  • mediawiki/extensions/Wikidata.org
  • mediawiki/extensions/WikidataPageBanner
  • mediawiki/extensions/WikiEditor
  • mediawiki/extensions/wikihiero
  • mediawiki/extensions/WikimediaBadges
  • mediawiki/extensions/WikimediaEditorTasks
  • mediawiki/extensions/WikimediaEvents
  • mediawiki/extensions/WikimediaIncubator
  • mediawiki/extensions/WikimediaMaintenance
  • mediawiki/extensions/Wikisource
  • mediawiki/extensions/XAnalytics
  • mediawiki/skins/CologneBlue
  • mediawiki/skins/Modern
  • mediawiki/skins/MonoBook
  • mediawiki/skins/Nostalgia
  • mediawiki/skins/Timeless

In Fundraising production only and not in gate

  • mediawiki/extensions/FundraisingEmailUnsubscribe

Related Objects

StatusSubtypeAssignedTask
OpenNone
ResolvedAddshore
OpenNone
ResolvedPRODUCTION ERRORReedy
DuplicateNone
ResolvedJdforrester-WMF
ResolvedJdforrester-WMF
ResolvedNone
Resolvedhoo
Resolved chasemp
Resolvedhashar
DeclinedNone
StalledFeatureNone
OpenNone
ResolvedUmherirrender
OpenNone
ResolvedJdforrester-WMF
ResolvedJdforrester-WMF
OpenNone
Resolvedkostajh
Resolvedtaavi
StalledNone
Resolvedaude
DeclinedNone
OpenNone
OpenJdforrester-WMF
ResolvedJdforrester-WMF

Event Timeline

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

Change 587848 had a related patch set uploaded (by Jforrester; owner: Jforrester):
[integration/config@master] layout: Add Kartographer to the gate

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

Change 587848 merged by jenkins-bot:
[integration/config@master] layout: Add Kartographer to the gate

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

Change 587858 had a related patch set uploaded (by Jforrester; owner: Jforrester):
[integration/config@master] layout: Add WikimediaMessages to the gate

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

Change 587858 merged by jenkins-bot:
[integration/config@master] layout: Add WikimediaMessages to the gate

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

Change 596707 had a related patch set uploaded (by Jforrester; owner: Jforrester):
[integration/config@master] gate: Add BetaFeatures

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

Change 596707 merged by jenkins-bot:
[integration/config@master] gate: Add BetaFeatures

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

Mentioned in SAL (#wikimedia-releng) [2020-05-15T17:48:07Z] <James_F> Zuul: Add BetaFeatures to the gate T249674

Change 655097 had a related patch set uploaded (by Jforrester; owner: C. Scott Ananian):
[integration/config@master] Zuul: Add Disambiguator to the MediaWiki gated extension set

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

Change 655097 merged by jenkins-bot:

[integration/config@master] Zuul: Add Disambiguator to the MediaWiki gated extension set

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

Mentioned in SAL (#wikimedia-releng) [2021-05-11T23:32:01Z] <James_F> Zuul: Add Disambiguator to the MediaWiki gated extension set T237538 T249674

Change 687769 had a related patch set uploaded (by Jforrester; author: Kosta Harlan):

[integration/config@master] Zuul: Add GrowthExperiments to the MediaWiki gated extension set

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

Change 687769 merged by jenkins-bot:

[integration/config@master] Zuul: Add GrowthExperiments to the MediaWiki gated extension set

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

Mentioned in SAL (#wikimedia-releng) [2021-05-12T16:00:48Z] <James_F> Zuul: Add GrowthExperiments to the MediaWiki gated extension set T247507 T249674

Change 687769 merged by jenkins-bot:

[integration/config@master] Zuul: Add GrowthExperiments to the MediaWiki gated extension set

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

It looks like there's a problem because SuggestedEditsTest.php assumes that PageViewInfo extension is present, but it's not in the gate. See e.g. https://integration.wikimedia.org/ci/job/wmf-quibble-vendor-mysql-php72-docker/63679/console with stacktrace:

11:47:54 1) GrowthExperiments\Tests\HomepageModules\SuggestedEditsTest::testNoTopicFiltersWhenTopicMatchingDisabled
11:47:54 Error: Call to undefined method Mock_PageViewService_963a7339::supports()
11:47:54 
11:47:54 /workspace/src/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php:701
11:47:54 /workspace/src/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php:418
11:47:54 /workspace/src/extensions/GrowthExperiments/includes/HomepageModules/BaseModule.php:156
11:47:54 /workspace/src/extensions/GrowthExperiments/includes/HomepageModules/BaseModule.php:137
11:47:54 /workspace/src/extensions/GrowthExperiments/includes/HomepageModules/SuggestedEdits.php:264
11:47:54 /workspace/src/extensions/GrowthExperiments/includes/HomepageModules/BaseModule.php:97
11:47:54 /workspace/src/extensions/GrowthExperiments/tests/phpunit/unit/HomepageModules/SuggestedEditsTest.php:42
11:47:54 /workspace/src/tests/phpunit/MediaWikiUnitTestCase.php:108

PageImages is also not in gate but GrowthExperiments has that defined as a dependency in integration/config.
cc @DLynch

Change 690004 had a related patch set uploaded (by Kosta Harlan; author: Kosta Harlan):

[integration/config@master] Zuul: Add PageViewInfo to gated extensions

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

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

[integration/config@master] Zuul: Add PageImages to the MediaWiki gated extension set

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

Change 690004 abandoned by Kosta Harlan:

[integration/config@master] Zuul: Add PageViewInfo to gated extensions

Reason:

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

Change 690004 restored by Jforrester:

[integration/config@master] Zuul: Add PageViewInfo to gated extensions

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

Change 690028 merged by jenkins-bot:

[integration/config@master] Zuul: Add PageImages to the MediaWiki gated extension set

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

Change 690004 merged by jenkins-bot:

[integration/config@master] Zuul: Add PageViewInfo and Graph to gated extensions

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

Mentioned in SAL (#wikimedia-releng) [2021-05-12T19:32:06Z] <James_F> Zuul: Add PageImages, PageViewInfo, and Graph to MediaWiki gated extension set T249674

Change 939290 had a related patch set uploaded (by Majavah; author: Majavah):

[integration/config@master] zuul: [mediawiki/extensions/WikiLove] Add to gate

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

Change 939290 merged by jenkins-bot:

[integration/config@master] zuul: [mediawiki/extensions/WikiLove] Add to gate

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

TLDR: I am inclined to not pursue this idea and decline this task. Cross extensions tests can be covered by injecting each others as dependencies in CI which saves us from having to add more tests to the shared gate. Ultimately I think concept should probably disappear.

History

I have introduced Zuul as the CI test runner because it makes it possible to ensure that repositories do not break others. We had an RFC about it a decade ago T1350 and the first implementation is at https://gerrit.wikimedia.org/r/c/integration/config/+/180494 and only included a small subset of extensions:

Echo
JsonConfig
Mantle
MobileApp
MobileFrontend
VisualEditor
WikiGrok
ZeroBanner
ZeroPortal

More extensions have then been added to it over a decade and the aul was to eventually have all the Wikimedia deployed extensions participating in that shared job and thus ensure neither core or any extension will break another one.

Problems

That approaches was rather naive and has several issues:

  • Wikis have different set of extensions as configured in operations/mediawiki-config and we do not take that in account
  • Some extensions in the gate depends on extension which are not in it. A change can then enter one of its dependency which ends up breaking the gate for everyone. I had a dashboard to detect those and complement the list, but we had other priorities/reorgs etc
  • Our testsuite / Quibble runs every single test it discovers. A decade ago it was good enough to blindly run a few hundred lightweight tests, nowadays we have:
    • an order of magnitude more tests (Wikibase has lot of tests for example)
    • some suites are quite heavy (Selenium tests).
  • We do not even cover some critical parts of the infra such as CentralAuth T333541
  • For sometime now, we have refrained from adding more extensions because that adds to the CI running time for each of the repositories participating (which includes a Selenium job taking more than 20 minutes).

Testing cross extensions coupling

T403560 is a request to add ReadingList to the gate and it has some good discussions on that topic. It discusses to have ReadingList tests running when changes are made to MinervaNeue and Vector. The easy path is to add ReadingList to the gate which would cause its CI to be slower due to all tests running and its test to run for every other extensions. Instead I have proposed to have ReadingList tested with both skins:

ReadingLists:
 - MinervaNeue
 - Vector

And add the reverse dependency as well:

MinervaNeue:
 - ReadingLists

Vector:
 - ReadingLists

Ensuring changes to dependencies do not break dependent repositories is the unaddressed T318107.

Then the task for ReadingList was due to a breaking change in mediawiki/core and that would not have caught it. Can we ensure changes to MediaWiki core do not break extensions? Yes surely, but we do not have a good/quick/speedy solution for that.

Conclusion

I would like to decline this task and not pursue it further. Blindly running every tests from all repositories does not scale at all and we will need a finer approach. We can devise a smarter system though (manually tagging tests or maybe automatically detecting which tests are affected across repositories depending on the repository being tested). There are some solution which I believe would be easier once we have upgraded Zuul (Continuous-Integration-Infrastructure (Zuul upgrade) ).

Clement_Goubert subscribed.

Cleanup, this is not MW-on-K8s related.