User:Tgr (WMF)/gadget DX

There is a somewhat overlapping set of problems that make working with "technical wiki content" (gadgets, templates and modules) a frustrating experience:
 * There is no code review process, which is a universal standard in development today.
 * There is little support for testing without actually making the change (there is some support for testing templates; the problem is particularly bad for gadgets where you have to deal with caching and whatnot).
 * There is no way to share technical resources between different wikis. This is a major problem for Wikimedia projects as well (there would be huge potential in small projects being able to free-ride on the work of large ones and focus on content creation instead of template / gadget maintenance), but even worse for other wikis which would have to mirror the exact software configuration to be able to port templates.
 * There is no continuous integration support (linting, unit tests, browser tests etc) which is again taken for granted by most developers today and a huge productivity gain.
 * There is some Javascript/Lua support in the wikitext editor but it's a very far cry from the power an actual IDE would give you.

One way to solve these problems would be to provide some kind of central gadget/template/module storage (much like Commons does for images and Wikidata for data), and implement a standard developer toolchain on top of that. The other would be to outsource development to code forges like GitHub or Wikimedia's own Gerrit/Phabricator/Jenkins complex, and add support to MediaWiki for pulling and live-testing changes from an external repository. (There is also some additional work in either case around supporting localization and live testing.) Whichever we choose, gadgets and templates serve as the backbone of most important editor workflows so tackling this problem is a must.

See also:
 * T121470 Central Global Repository for Templates, Lua modules, and Gadgets
 * T187749 Make it possible to use code from an external repository for editor-controlled Javascript/CSS