Page MenuHomePhabricator

Automatically export and publish a list of WMF deployed code repositories in Bitergia's JSON format
Open, In Progress, LowPublic

Description

WMF is interested in having panels/dashboards displaying data only for a subset of code repositories, namely those ones deployed on the WMF servers.
This subset list should be defined in an external source to reduce maintenance costs (do not manually update yet another list).

The long-term goal is to add a "default" view filter to display data only for WMF-deployed repositories in panels/dashboards on https://wikimedia.biterg.io.
Bitergia can add metadata for repositories, to use that later with a filter.

Per the discussion at FOSDEM 2025 between Santiago, Luis and @Aklapper:
Could WMF's CI/CD create another file which follows Bitergia's schema (and then potentially commit that into Bitergia's repository)?
Bitergia's schema is still the same format as the (nowadays unused and outdated) file https://gitlab.com/Bitergia/c/Wikimedia/sources/blob/master/projects.json .

Details

Related Changes in GitLab:
TitleReferenceAuthorSource BranchDest Branch
add labels to projects instead of building separate arrayrepos/releng/bitergia-sources-updater!1brennenwork/add_labelmain
Customize query in GitLab

Event Timeline

Aklapper triaged this task as Low priority.

Currently our release tools has a dump-bundle.py script that allows us to dump the list of repos we branch each week:

(.venv)$ ./dump-bundle.py --core --bundle wmf_branch --link --raw
https://gerrit.wikimedia.org/r/mediawiki/extensions/3D
https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter
https://gerrit.wikimedia.org/r/mediawiki/extensions/ActiveAbstract
https://gerrit.wikimedia.org/r/mediawiki/extensions/AdvancedSearch
https://gerrit.wikimedia.org/r/mediawiki/extensions/AntiSpoof
https://gerrit.wikimedia.org/r/mediawiki/extensions/ApiFeatureUsage
https://gerrit.wikimedia.org/r/mediawiki/extensions/ArticleCreationWorkflow
https://gerrit.wikimedia.org/r/mediawiki/extensions/ArticlePlaceholder
https://gerrit.wikimedia.org/r/mediawiki/extensions/AutoModerator
https://gerrit.wikimedia.org/r/mediawiki/extensions/Babel
https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
https://gerrit.wikimedia.org/r/mediawiki/extensions/BounceHandler
https://gerrit.wikimedia.org/r/mediawiki/extensions/Calendar
https://gerrit.wikimedia.org/r/mediawiki/extensions/Campaigns
https://gerrit.wikimedia.org/r/mediawiki/extensions/CampaignEvents
https://gerrit.wikimedia.org/r/mediawiki/extensions/Capiunto
https://gerrit.wikimedia.org/r/mediawiki/extensions/CategoryTree
https://gerrit.wikimedia.org/r/mediawiki/extensions/CentralAuth
https://gerrit.wikimedia.org/r/mediawiki/extensions/CentralNotice
https://gerrit.wikimedia.org/r/mediawiki/extensions/CharInsert
https://gerrit.wikimedia.org/r/mediawiki/extensions/Chart
https://gerrit.wikimedia.org/r/mediawiki/extensions/CheckUser
https://gerrit.wikimedia.org/r/mediawiki/extensions/ChessBrowser
https://gerrit.wikimedia.org/r/mediawiki/extensions/CirrusSearch
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
https://gerrit.wikimedia.org/r/mediawiki/extensions/CiteThisPage
https://gerrit.wikimedia.org/r/mediawiki/extensions/Citoid
https://gerrit.wikimedia.org/r/mediawiki/extensions/cldr
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeEditor
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeMirror
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cognate
https://gerrit.wikimedia.org/r/mediawiki/extensions/CommunityConfiguration
https://gerrit.wikimedia.org/r/mediawiki/extensions/CommunityRequests
https://gerrit.wikimedia.org/r/mediawiki/extensions/Collection
https://gerrit.wikimedia.org/r/mediawiki/extensions/CommonsMetadata
https://gerrit.wikimedia.org/r/mediawiki/extensions/ConfirmEdit
https://gerrit.wikimedia.org/r/mediawiki/extensions/ContactPage
https://gerrit.wikimedia.org/r/mediawiki/extensions/ContentTranslation
https://gerrit.wikimedia.org/r/mediawiki/extensions/CreditsSource
https://gerrit.wikimedia.org/r/mediawiki/extensions/Dashiki
https://gerrit.wikimedia.org/r/mediawiki/extensions/Disambiguator
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
https://gerrit.wikimedia.org/r/mediawiki/extensions/DismissableSiteNotice
https://gerrit.wikimedia.org/r/mediawiki/extensions/DonationInterface
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
https://gerrit.wikimedia.org/r/mediawiki/extensions/Elastica
https://gerrit.wikimedia.org/r/mediawiki/extensions/ElectronPdfService
https://gerrit.wikimedia.org/r/mediawiki/extensions/EntitySchema
https://gerrit.wikimedia.org/r/mediawiki/extensions/EventBus
https://gerrit.wikimedia.org/r/mediawiki/extensions/EventLogging
https://gerrit.wikimedia.org/r/mediawiki/extensions/EventStreamConfig
https://gerrit.wikimedia.org/r/mediawiki/extensions/ExtensionDistributor
https://gerrit.wikimedia.org/r/mediawiki/extensions/ExternalGuidance
https://gerrit.wikimedia.org/r/mediawiki/extensions/FeaturedFeeds
https://gerrit.wikimedia.org/r/mediawiki/extensions/FileExporter
https://gerrit.wikimedia.org/r/mediawiki/extensions/FileImporter
https://gerrit.wikimedia.org/r/mediawiki/extensions/FlaggedRevs
https://gerrit.wikimedia.org/r/mediawiki/extensions/Flow
https://gerrit.wikimedia.org/r/mediawiki/extensions/FundraiserLandingPage
https://gerrit.wikimedia.org/r/mediawiki/extensions/FundraisingTranslateWorkflow
https://gerrit.wikimedia.org/r/mediawiki/extensions/Gadgets
https://gerrit.wikimedia.org/r/mediawiki/extensions/GeoCrumbs
https://gerrit.wikimedia.org/r/mediawiki/extensions/GeoData
https://gerrit.wikimedia.org/r/mediawiki/extensions/GlobalBlocking
https://gerrit.wikimedia.org/r/mediawiki/extensions/GlobalCssJs
https://gerrit.wikimedia.org/r/mediawiki/extensions/GlobalPreferences
https://gerrit.wikimedia.org/r/mediawiki/extensions/GlobalUsage
https://gerrit.wikimedia.org/r/mediawiki/extensions/GlobalUserPage
https://gerrit.wikimedia.org/r/mediawiki/extensions/GlobalWatchlist
https://gerrit.wikimedia.org/r/mediawiki/extensions/GoogleNewsSitemap
https://gerrit.wikimedia.org/r/mediawiki/extensions/Graph
https://gerrit.wikimedia.org/r/mediawiki/extensions/GrowthExperiments
https://gerrit.wikimedia.org/r/mediawiki/extensions/GuidedTour
https://gerrit.wikimedia.org/r/mediawiki/extensions/ImageMap
https://gerrit.wikimedia.org/r/mediawiki/extensions/ImageSuggestions
https://gerrit.wikimedia.org/r/mediawiki/extensions/InputBox
https://gerrit.wikimedia.org/r/mediawiki/extensions/Insider
https://gerrit.wikimedia.org/r/mediawiki/extensions/intersection
https://gerrit.wikimedia.org/r/mediawiki/extensions/Interwiki
https://gerrit.wikimedia.org/r/mediawiki/extensions/InterwikiSorting
https://gerrit.wikimedia.org/r/mediawiki/extensions/IPInfo
https://gerrit.wikimedia.org/r/mediawiki/extensions/IPReputation
https://gerrit.wikimedia.org/r/mediawiki/extensions/Josa
https://gerrit.wikimedia.org/r/mediawiki/extensions/JsonConfig
https://gerrit.wikimedia.org/r/mediawiki/extensions/Kartographer
https://gerrit.wikimedia.org/r/mediawiki/extensions/LabeledSectionTransclusion
https://gerrit.wikimedia.org/r/mediawiki/extensions/LandingCheck
https://gerrit.wikimedia.org/r/mediawiki/extensions/Linter
https://gerrit.wikimedia.org/r/mediawiki/extensions/LiquidThreads
https://gerrit.wikimedia.org/r/mediawiki/extensions/LoginNotify
https://gerrit.wikimedia.org/r/mediawiki/extensions/MapSources
https://gerrit.wikimedia.org/r/mediawiki/extensions/MassMessage
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
https://gerrit.wikimedia.org/r/mediawiki/extensions/MediaModeration
https://gerrit.wikimedia.org/r/mediawiki/extensions/MediaSearch
https://gerrit.wikimedia.org/r/mediawiki/extensions/MetricsPlatform
https://gerrit.wikimedia.org/r/mediawiki/extensions/MobileApp
https://gerrit.wikimedia.org/r/mediawiki/extensions/MobileFrontend
https://gerrit.wikimedia.org/r/mediawiki/extensions/MultimediaViewer
https://gerrit.wikimedia.org/r/mediawiki/extensions/NavigationTiming
https://gerrit.wikimedia.org/r/mediawiki/extensions/NearbyPages
https://gerrit.wikimedia.org/r/mediawiki/extensions/NetworkSession
https://gerrit.wikimedia.org/r/mediawiki/extensions/Newsletter
https://gerrit.wikimedia.org/r/mediawiki/extensions/NewUserMessage
https://gerrit.wikimedia.org/r/mediawiki/extensions/Nuke
https://gerrit.wikimedia.org/r/mediawiki/extensions/OATHAuth
https://gerrit.wikimedia.org/r/mediawiki/extensions/OAuth
https://gerrit.wikimedia.org/r/mediawiki/extensions/OAuthRateLimiter
https://gerrit.wikimedia.org/r/mediawiki/extensions/ORES
https://gerrit.wikimedia.org/r/mediawiki/extensions/PageAssessments
https://gerrit.wikimedia.org/r/mediawiki/extensions/PagedTiffHandler
https://gerrit.wikimedia.org/r/mediawiki/extensions/PageImages
https://gerrit.wikimedia.org/r/mediawiki/extensions/PageNotice
https://gerrit.wikimedia.org/r/mediawiki/extensions/PageTriage
https://gerrit.wikimedia.org/r/mediawiki/extensions/PageViewInfo
https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserFunctions
https://gerrit.wikimedia.org/r/mediawiki/extensions/ParserMigration
https://gerrit.wikimedia.org/r/mediawiki/extensions/PdfHandler
https://gerrit.wikimedia.org/r/mediawiki/extensions/Phonos
https://gerrit.wikimedia.org/r/mediawiki/extensions/Poem
https://gerrit.wikimedia.org/r/mediawiki/extensions/Popups
https://gerrit.wikimedia.org/r/mediawiki/extensions/ProofreadPage
https://gerrit.wikimedia.org/r/mediawiki/extensions/PropertySuggester
https://gerrit.wikimedia.org/r/mediawiki/extensions/QuickSurveys
https://gerrit.wikimedia.org/r/mediawiki/extensions/Quiz
https://gerrit.wikimedia.org/r/mediawiki/extensions/ReadingLists
https://gerrit.wikimedia.org/r/mediawiki/extensions/RealMe
https://gerrit.wikimedia.org/r/mediawiki/extensions/RelatedArticles
https://gerrit.wikimedia.org/r/mediawiki/extensions/ReportIncident
https://gerrit.wikimedia.org/r/mediawiki/extensions/RevisionSlider
https://gerrit.wikimedia.org/r/mediawiki/extensions/RSS
https://gerrit.wikimedia.org/r/mediawiki/extensions/SandboxLink
https://gerrit.wikimedia.org/r/mediawiki/extensions/Score
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
https://gerrit.wikimedia.org/r/mediawiki/extensions/SearchExtraNS
https://gerrit.wikimedia.org/r/mediawiki/extensions/SearchVue
https://gerrit.wikimedia.org/r/mediawiki/extensions/SecureLinkFixer
https://gerrit.wikimedia.org/r/mediawiki/extensions/SecurePoll
https://gerrit.wikimedia.org/r/mediawiki/extensions/ShortUrl
https://gerrit.wikimedia.org/r/mediawiki/extensions/SimilarEditors
https://gerrit.wikimedia.org/r/mediawiki/extensions/SiteMatrix
https://gerrit.wikimedia.org/r/mediawiki/extensions/SpamBlacklist
https://gerrit.wikimedia.org/r/mediawiki/extensions/StopForumSpam
https://gerrit.wikimedia.org/r/mediawiki/extensions/SubPageList3
https://gerrit.wikimedia.org/r/mediawiki/extensions/SubpageSortkey
https://gerrit.wikimedia.org/r/mediawiki/extensions/SyntaxHighlight_GeSHi
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateData
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateSandbox
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateStyles
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateWizard
https://gerrit.wikimedia.org/r/mediawiki/extensions/TextExtracts
https://gerrit.wikimedia.org/r/mediawiki/extensions/Thanks
https://gerrit.wikimedia.org/r/mediawiki/extensions/TheWikipediaLibrary
https://gerrit.wikimedia.org/r/mediawiki/extensions/TimedMediaHandler
https://gerrit.wikimedia.org/r/mediawiki/extensions/timeline
https://gerrit.wikimedia.org/r/mediawiki/extensions/TitleBlacklist
https://gerrit.wikimedia.org/r/mediawiki/extensions/TocTree
https://gerrit.wikimedia.org/r/mediawiki/extensions/TorBlock
https://gerrit.wikimedia.org/r/mediawiki/extensions/Translate
https://gerrit.wikimedia.org/r/mediawiki/extensions/TranslationNotifications
https://gerrit.wikimedia.org/r/mediawiki/extensions/TrustedXFF
https://gerrit.wikimedia.org/r/mediawiki/extensions/TwoColConflict
https://gerrit.wikimedia.org/r/mediawiki/extensions/UniversalLanguageSelector
https://gerrit.wikimedia.org/r/mediawiki/extensions/UploadsLink
https://gerrit.wikimedia.org/r/mediawiki/extensions/UploadWizard
https://gerrit.wikimedia.org/r/mediawiki/extensions/UrlShortener
https://gerrit.wikimedia.org/r/mediawiki/extensions/VueTest
https://gerrit.wikimedia.org/r/mediawiki/extensions/VipsScaler
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
https://gerrit.wikimedia.org/r/mediawiki/extensions/WebAuthn
https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikibase
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseCirrusSearch
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseLexeme
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseLexemeCirrusSearch
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseMediaInfo
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQualityConstraints
https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikidata.org
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikidataPageBanner
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiEditor
https://gerrit.wikimedia.org/r/mediawiki/extensions/wikihiero
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiLambda
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikiLove
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaApiPortalOAuth
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaBadges
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaCampaignEvents
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaEditorTasks
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaEvents
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaIncubator
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaMaintenance
https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaMessages
https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikisource
https://gerrit.wikimedia.org/r/mediawiki/extensions/Wikistories
https://gerrit.wikimedia.org/r/mediawiki/extensions/XAnalytics
https://gerrit.wikimedia.org/r/mediawiki/skins/CologneBlue
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
https://gerrit.wikimedia.org/r/mediawiki/skins/Modern
https://gerrit.wikimedia.org/r/mediawiki/skins/MonoBook
https://gerrit.wikimedia.org/r/mediawiki/skins/Nostalgia
https://gerrit.wikimedia.org/r/mediawiki/skins/Timeless
https://gerrit.wikimedia.org/r/mediawiki/skins/Vector
https://gerrit.wikimedia.org/r/mediawiki/skins/WikimediaApiPortal
https://gerrit.wikimedia.org/r/mediawiki/vendor
https://gerrit.wikimedia.org/r/VisualEditor/VisualEditor
https://gerrit.wikimedia.org/r/mediawiki/core

We could probably get this dumping json into a format from pretty much anywhere without any real dependencies. Asked Bitergia how they'd like to coordinate this: https://support.bitergia.com/support/tickets/1499

brennen changed the task status from Open to In Progress.Apr 17 2025, 10:50 PM

Rough solution starting from @thcipriani's initial sketch:

https://gitlab.wikimedia.org/repos/releng/bitergia-sources-updater

Sample merge request:

https://gitlab.com/Bitergia/c/Wikimedia/sources/-/merge_requests/25/diffs

TODO:

  • handle the case where there's already an existing MR (update it?)
  • tidy up scripts a bit
  • expand README
  • schedule nightly

After talking to Bitergia folks, we'll need to make some tweaks.

copy/paste from upstream:

After internal consideration and discussion, we could make the configuration file (the list of repositories) public, so you can create merge requests.

So, for the updates, you'd need to
generate the updated list of WMF deployed repos,
clone/pull the BAP configuration file from https://gitlab.com/bitergium/...,
​update the BAP configuration file,
commit your changes,
push it to an update branch.
There are several ways to label the repositories, as explained in the online documentation:

A) You could separate the WMF deployed repos from the "WikiMedia" project in a new project (say; "Wikimedia self-deployed") and in the dashboard you would be able to filter this new project.
The downside to this approach is that we would need to stop the automatic tracking of new and removed repositories for gerrit.wikimedia.org (gerrit-replica.wikimedia.org), because it would keep these repos duplicated within the "WikiMedia" project, and BAP doesn't work well with duplicated repos. The repository lists for both "WikiMedia" and"Wikimedia self-deployed" projects would become static and you'd need to maintain them (via merge requests).

B) The other option is to apply a label to each WMF deployed repo. Then, in the dashboard you would be able to filter by (repo) label.
But for this to work we need to develop our automatic synchronization to support repo labels.

Please confirm publishing the configuration repository and let us know what you think of the alternatives.

We're going with option B (after my bad reading of option A). They have developed the needed automatic synchronization to support repo labels. Later conversation copy-paste:

Are labels ready to use?

Yes.

Can we move our merge request pipeline over to labels?

...
You can now rebase and move your merge request pipeline over to labels.
RepOSSync is set to work on it too.
Our internal repo is now a mirror.

Also, @brennen I'll file a support ticket to get you access to the support ticket :)

@Aklapper Wanna have a quick chat about this as part of T409903? Cheers

Not sure where to request or mention this, but, the "Production repos" preset on the Bitergia dashboard about Gerrit, is missing mediawiki/php/* repos and mediawiki/libs/* repos.

From https://codesearch.wmcloud.org/deployed/?action=repos:

  • mediawiki/php/excimer
  • mediawiki/php/luasandbox
  • mediawiki/php/wikidiff2
  • mediawiki/php/wmerrors

This is safe to generate from a glob or Gerrit API, rather than a manual list, because these repos only exist for first-party extensions developed for production.

From https://codesearch.wmcloud.org/libraries/?action=repos

There's a longer list here, including things for tools or otherwise not (or no longer) in production. We may want to instead start from mediawiki/vendor:/composer.json, and map the wikimedia/* entries there to a Gerrit repo, like so:

(This would be shorter if T323787 was implemented.)

This isn't pretty, but perhaps good enough for a semi-automatic thing we sync periodically.