Request for Comment/Hybrid extension management: Difference between revisions

From MWStake
Jump to navigation Jump to search
(remove future)
ย 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
Over the last years there have been several attempts to use the Composer "package manager" as a way to manage MediaWiki extensions. At the moment there are already a lot of extensions that support Composer as a way of installing and updating.
Over the last years there have been several attempts to use the Composer "package manager" as a way to manage MediaWiki extensions. At the moment there are already a lot of extensions that support Composer as a way of installing and updating.


The main concern about using Composer as an extension-management-tool is that Composer "is for managing libraries, not extensions".
The main concerns about using Composer as an extension-management-tool is that Composer "is for managing libraries, not extensions" and that extensions would bypass <tt>wfLoadExtension()</tt>.ย  This second part was a special concern for multiple wikis hosted from the same codebase (i.e. wikifarms).


==Proposal==
==Proposal==
Line 17: Line 17:
# The WMF should not just allow, but encourage the use of "packagist-compatible" (must have fields like <code>name</code>, <code>type</code> and <code>extra.installer-name</code>) <code>composer.json</code> files in the extension repositories. This should be the case for all actively supported branches (LTS) of the WMF owned extensions.
# The WMF should not just allow, but encourage the use of "packagist-compatible" (must have fields like <code>name</code>, <code>type</code> and <code>extra.installer-name</code>) <code>composer.json</code> files in the extension repositories. This should be the case for all actively supported branches (LTS) of the WMF owned extensions.
# MediaWiki's ExtensionRegistry must not break the wiki in case the requirements declared in <code>extension.json</code> (field <code>requires</code>) could not be met. Instead it should leave the extension disabled, log the issue and put out a proper message to the user/admin (e.g. in a section "Loaded but not enabled extensions" on "Special:Version")
# MediaWiki's ExtensionRegistry must not break the wiki in case the requirements declared in <code>extension.json</code> (field <code>requires</code>) could not be met. Instead it should leave the extension disabled, log the issue and put out a proper message to the user/admin (e.g. in a section "Loaded but not enabled extensions" on "Special:Version")
==Future==
Additionally to that the WMF could create it's own package repository (e.g. packages.mediawiki.org), where extensions would be listed. <s>In addition to the extension description pages on mediawiki.org this could be the base for an extension store.</s>


==See also==
==See also==

Latest revision as of 07:48, 3 April 2020

Over the last years there have been several attempts to use the Composer "package manager" as a way to manage MediaWiki extensions. At the moment there are already a lot of extensions that support Composer as a way of installing and updating.

The main concerns about using Composer as an extension-management-tool is that Composer "is for managing libraries, not extensions" and that extensions would bypass wfLoadExtension(). This second part was a special concern for multiple wikis hosted from the same codebase (i.e. wikifarms).

Proposal

The responsibility of "managing" extensions should be split up between Composer and MediaWiki's ExtensionRegistry. It would become a "hybrid system".

  • Composer is responsible to download and update extensions and their libraries
  • ExtensionRegistry is responsible to check for inter-extension-dependencies as well as for version contraints (e.g. to the core MediaWiki version)

This means that an incompatible version can be installed by Composer but ExtensionRegistry would not enable it.

  • composer.json => Evaluated at "installtime"
  • extension.json => Evaluated at "runtime"

The current situation can easily be improved by some minor policy and software changes:

  1. Extensions must not enable themselves automatically via installation by Composer (e.g. by autoload.files)
  2. Extensions must only declare dependencies to libraries in the composer.json. All dependencies to MediaWiki core versions and inter-extension-depenencies must be declared in the extension.json (By this, a virtual MediaWiki package is not required).
  3. The WMF should not just allow, but encourage the use of "packagist-compatible" (must have fields like name, type and extra.installer-name) composer.json files in the extension repositories. This should be the case for all actively supported branches (LTS) of the WMF owned extensions.
  4. MediaWiki's ExtensionRegistry must not break the wiki in case the requirements declared in extension.json (field requires) could not be met. Instead it should leave the extension disabled, log the issue and put out a proper message to the user/admin (e.g. in a section "Loaded but not enabled extensions" on "Special:Version")

See also