On 2015-02-14 11:30 PM, James HK wrote:
Hi,
Extensions/plugins are not libraries. Frankly I want to give whoever built the addition to Composer that allows packages to install as WordPress plugins and MediaWiki extensions a good kick.
Thanks for your elaborated inside but somehow this doesn't tell the whole story.
Take for example our extension (SMW but others are welcome as well) which depends on libraries and other extensions as well. I don't think it is practical nor good practice to have a user to write down each dependency and start kicking the git downland for each of them just to figure out at some point that s(he) missed something or caught the wrong hash tag and suddenly finds him/herself in a dependency nightmare.
Knowing that I can specify what version works with which library and have tool that lets me forget about any of the dependency is what I want, I don't need a WMF special tool that may or may not work in future.
I don't want a tool that increase technical debt on my end and using Composer (which is supported by more developers than WMF can hire) creates a certain confidence that the tool does what it is claimed for namely a tool to resolve dependencies.
Having Composer resolving dependencies and at the same to put it into the right place (thanks for the `mediawiki-extension` type) together with a PSR-4 autoloader is the icing on the cake to make our extension deployable.
If your extension does not depend on anything then this is good but not all extension are going for the golden goal of putting code in one line (or for that matter in one include folder).
Some extensions try to isolate code by its responsibility and do make an effort to separate those into different components, arguing that only MW can strive towards "Librarization" is a bit short-sighted.
Cheers
git vs. composer is a false dichotomy.
I don't believe that using git and ExtensionDistributor tarballs forever is the correct way forward. But I also do not believe shoving all our extensions into composer is the correct way to fix that either.
Composer doesn't fix all the issues and doesn't expose data needed to build a proper system. And it creates release restrictions (do real releases [maintain an explicit version, follow semver] and tag them), which not every extension needs and many authors don't want to deal with, which precludes its use as the primary extension installation system.
---- We need a proper interface and system for Extension management (and by extension, configuration management).
Some notes: - It needs to support the requirements of everything from Semantic MediaWiki to a lowly extension like Poem. - The interface must not be English only, extension names/descriptions for uninstalled extensions should be translated for every extension that will be translated on Special:Version when the extension is installed. - Extensions should be categorized in the same way they are on Special:Version. - A search interface is necessary for installing new extensions. - It should automatically install composer libraries (even if the extension itself isn't published) automatically. Whether this is done by integration of composer/composer or packaging libraries automatically on the origin side. - It should understand when it needs to take installation steps like upgrading the database. ----
It would also be short sited to believe that a system built as a simple wrapper around composer could solve all the version related issues we have. Besides dep-hell, extensions also have incompatibilities with MediaWiki releases themselves.
If I install mediawiki/semantic-media-wiki@2.0.1 today with composer, it will not tell me if it supports MediaWiki 1.16 nor will it tell me if it supports MediaWiki 1.26.
Practically no extension author bothers testing on each release how far back their extension works. Or bother making a note of that which composer or another program could read. And it's impossible for them to know at the time of publishing a release if a new release of MediaWiki will work with their extension or not.
The improving extension management RFC is a step forward in one part of this (a proper way to declare compatibility).
However a proper system would also involve running tests for extensions and accepting reports of success or failure with a version of an extension from users.
All 3 sources of data would be exposed in the same API a MediaWiki install's extension management page uses to search and query data about extensions.
~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://danielfriesen.name/]