A Plugin Directory for Wikka
There are many great plugins contributed by Wikka users. Since our goal is to keep Wikka's core as small as possible, while allowing extensibility, a user-maintained plugin directory (with code and instructions on how to install specific extensions) would be the most natural solution. As part of our effort to make the development and maintenance of plugins easier, we would like to create a dedicated plugin directory in the Wikka SVN repository.
Contributors will be able to upload and maintain plugins, link them from development pages, keep track of changes and allow easy diff'ing/merging for users.
The first step: choosing a good directory layout
We have now the possibility to create SVN user accounts restricted to specific nodes of the repository. This means that any contributor willing to upload plugins, patches and modifications will be able to do this without messing up the core development line or other users' contributions.Depending on how contributors will post their plugins, different approaches are possible:
1.User folders with plugin subfolders
(each user will be able to create subfolders for each plugin/hack)wikka/plugins .............../DarTar ....................../skineditor ....................../useradmin
2. Simple plugin folders
(a flat organization fo plugins, to make browsing easier)wikka/plugins .............../skineditor .............../useradmin
A few things to keep in mind before choosing the best layout:
- a user will only be given privs to a specific node and will have automatically access to all the subnodes;
- some plugins might require changes spanning more Wikka folders (e.g. an action + a css addition);
- different users might want to contribute to the development of a plugin;
- the SVN directory layout need not match the actual (browsable) directory, which could be maintained separately in a wiki page with descriptions, news, author credits etc.
Given the above constraints, which directory layout would be the most appropriate?
The following steps
Once an agreement on the previous point is reached, the following steps are required to set up the plugin directory- complete the API documentation of the Wikka engine and publish it; - ideally, the documentation will be self-generated from phpdoc headers
- complete (and enforce) the Wikka coding guidelines;
- post instructions for prospective contributors on how to apply for a SVN login;
- create the plugins directory;
- start hacking ;)
Comments ?
Feedback welcomeCategoryDevelopmentDiscussion
CategoryUserContributions
CategoryAdmin
What would even be more useful is the ability to link directly from a WikiLink to the node in question.
It does not make logical sense to allow different users access to a single user node, or allow access to a user node for a different user instead of the original one. With an organization based on plugins though, this logical difficulty simply disappears.
So I definitely have an objection at least to option #2 being dropped!
It's basically an extension of #2 (first level nodes are plugin folders), within which the trunk/branches/tags division is reproduced. This allows the development and tracking of a plugin as an independent package.
The main advantage of this layout, on top of what Marjolein suggested for #2, is that it allows for easy maintenance of different versions for compatibility reasons (e.g. a plugin branch for Wikka 1.1.6.1, 1.1.6.2, 1.1.7, etc. ) or just different versions for different target users or applications.
The only disadvantage with #2 pointed out by Brian sounds easily manageable, whereas the disadvantage for #1 noted by Marjolein is more difficult to deal with.
To get a taste of how this would work, take a look at: http://dev.wp-plugins.org/wiki/RepositorySetup
Very nice - that makes perfect logical sense!
http://docs.moodle.org/en/Developer_documentation#Documentation_for_contributed_code
So there's really no need to throw out #1 or #2. Keep things organized by contributors; give individual access to the contributor's own tree. Create a separate repository that allows contributors to register their plugins when they feel a plugin is ready to be released. That way, contributors can plan on "releases" to their plugins (all of this is assuming contributors are given SVN or CVS access, whatever Wikka is using).
1. the idea of offering SVN access for plugin development is not meant to provide users just with server resources for hacking and testing code, but to create a (possibly) self-maintaining infrastructure for plugin development and release. This requires that versioning and identification of components be clearly understandable to the end user willing to install a specific plugin as well as to other developers willing to contribute to the same plugin. An informal 'user folder' to 'self-publish' modules -- something like the current code contribution pages on this server -- is really a different thing, and certainly not an optimal solution for plugin development: code contributions are very often unstructured, they lack versioning information, and allow very limited contributions by multiple developers, which leads me to the second point;
2. the very idea of a *SVN* repository for plugins - as opposed to simple server space - is to promote collective development and allow users to track updates of single components and diff them with previous versions. What you are suggesting is that we should keep all the development in a user-folder and basically offer the possibility to publish plugins ("tag" them in a directory) as soon as it's ready to be released. This is really different from what I have in mind: I would like to see plugin development both *structured* (so users can install and test specific revisions without needing to ask instructions to the maintainer) and *exposed* (so developers can keep an eye on a plugin and join in and contribute code).
To sum up, I think your idea of "self-published" modules is not so different from what Wikka contributors are *already* doing (using their own servers as informal code repositories) - which allows only limited interaction between developers and makes plugin installation extremely chaotic for the end user.
My 2 cents.
"There are many small hacks I do that really don't warrant "plugin" status, yet I would like to make available to the Wikka community."
Allow me to clarify: All plugins start out as hacks. Some hacks, while useful, may never achieve the status of a plugin. Let's say that I know user X writes some useful hacks. Right now, I must rely on User X to continue to update her pages, without benefit of source code history. Or, if I knew she had an SVN directory under contrib/UserX/ (or whatever), I could simply download all of her latest code, including source history, and possibly find some other quality gems as well.
I think the point here is that not all hacks are destined to become plugins, but are still useful for those who want to take advantage of them. Hacks seem better suited to be categorized under the user who wrote them, rather than scattered randomly throughout SVN.
I think categorizing plugins via #2 is fine. One would expect multiple developers to continue to enhance existing plugins. Hacks, while just as useful, probably won't garner the same level of developer support, and there are only a handful of developers who are responsible for multiple hacks. So instead of littering the SVN landscape with small single-use hacks, pull them all together under user branches. Those who want a specific hack will know where to go to find it, and might find some other useful stuff as well.
wikka
....../plugins
.............../Plugin1 (author: UserX)
.............../Plugin2
....../contrib
.............../UserX
................../foobar_hack
................../toasty_morsel_hack
................../../../plugins/Plugin1 (link)
So perhaps:
wikka
.../plugins
....../ExamplePlugin
.../hacks
....../ExampleHack
?
I think this is a good start for the plugins, though.
Prolific Wikka hackers who don't want to use that facility are always free to self-publish their hacks of course, or simply use the Wikka site to publish and promote dicussion about them.
The plugins should be one directory deep
/plugins
................../plugin1_name_version
................./plugin2_name_version
Versions should be at the end of all plugins AND should be of the same branch number that wikka is...that way, you'll know that your plugin is compatible with the wikka version you're using. If authors/contributors all number the stuff they do with no point or direction, you'll end up with a mixed up bunch of plugins (similar to those at e107coders.org, the plugin site for e107 CMS...my old cup of tea when I first started out...they were a mess until they organized things). Anyway, if you don't implement a numbering system you'll be lost.
For example, I make devnetplugin and release it. I'd version it 1.1.6.2.1 or something similar...maybe 1.1.6a or something like that. This would keep people who don't use SVN from installing plugins that aren't compatible with their installs.
thanks for your feedback, and apologies for the late reply.
KISS is an option only when you can easily overhaul a system. The reason of this long discussion on the layout of a plugin directory is that we want it to be scalable from the beginning. In this way, once we opt for a specific solution, we won't need to manually rewrite everything at the first problem we experience.
WRT directory structure and naming convention.
Version numbering will apply to stable plugin packages, following the same conventions adopted in Wikka (package name + plugin version number). I don't see the utility of specifying "plugin" in the name. As soon as a plugin is stable and ready to be released, it will be tagged using its own versioning number. I'm in favour of instructing contributors (who will commit plugins through SVN) to correctly distinguish between unstable versions and production versions, so I maintain a distinction between, say: /plugins/beautifier/trunk (the unstable development code) and /plugins/beautifier/tags/1.0 (a stable release, that users can safely install). Consider the advantage of this distinction once we'll have an interface allowing users to download and install plugins and to decide whether to include unstable packages or not.
WRT version numbering.
I'd personally prefer avoiding a reference to Wikka version number for the plugin version numbering for the following reasons reasons:
1. A plugin might still be valid across several Wikka updates, in which case using your convention for version numbering might be misleading.
2. Using a dedicated version number for each plugin makes it easier to track the history and updates of that specific plugin (including automatic version checking similar to PHP's version_compare() that we might implement in the future).
3. There will be anyway a user-friendly interface to the directory (e.g. a wiki page per plugin) and compatibility with Wikka versions will be available in this interface. If we use phpdoc tags, compatibility will be easily self-documented using @since (or another custom tag). The user interface to the plugin could read the compatibility information and automatically categorise plugins as a function of the Wikka engine they have been tested with.
I know all this might sound overkill at the moment, but I'm convinced it will be useful as soon as the number of plugins grows. The WP plugin directory is the best demonstration that a layout like the one described in http://wikkawiki.org/PluginDirectory?show_comments=1&showall=1#comment_4547 can do the job.
at the moment our priority is to release 1.1.7, which should be out within the next two weeks. Soon after that I think we'll get back to site-related issues:
- documentation server (on its way: it should be up as soon as we have fixed some minor issues with our hoster);
- plugin directory;
- support forum;
thanks for bumping this anyway - I just wanted to let you know that we haven't forgot this idea.
This will endure that if developer A develops a plug-in called "webget" (just an example) and developer B does the same (but with a different feature set) - these can happily co-exists without having different names.