PuppetShop =========== This documention describes a web-based application to facilitate the sharing of Puppet recipes, with the possibility of using it to share non-Puppet code eventually. Basics ------ The primary feature is that recipe developers can register modules, and then associate branches with that module (with the default branch probably being called 'trunk'). Users of the site will be able to use the web interface to find a module and/or branch, and then use the SCM that the branch is in to retrieve the branch they want. Terminology ----------- :authoritative: The repository from which all changes descend. :branch: A single repository containing a version of the module. :module: A named chunk of functionality. Critical Features ----------------- Separation between module and branch '''''''''''''''''''''''''''''''''''' The separation between module and branch is critical, as branches will often be published by authors other than the module author. This will encourage more people to work on and publish versions of a branch. Distributed Source Control '''''''''''''''''''''''''' The branches should all be maintained in a branch of a distributed source control system, like Git_, Darcs_ or Mercurial_. This will make it easy to collaborate, as any module user can maintain a parallel branch with their own customizations and modifications. This is critical because many of these recipes will only have partial functionality for a given site, such as support for Debian but not Fedora. Self-hosted Branches '''''''''''''''''''' Each published branch must have its authoritative repository hosted by the branch author. This makes it easy for the branch maintainers to update their code, without ever interacting with our web site. The web site will regularly pull changes from the authoritative branch (probably daily), possibly with an option for the module author to trigger an update. Other Important Details ----------------------- - *Licensing*: Initially, branches will all need some sort of open source license, as they will all be free with no means to charge. Even so, modules will need to register a license at registration time, as the different open-source licenses are drastically different. - *Text Format*: Each module will have a description, written in `Restructured Text`_. It is likely that this description will be pulled from the 'trunk' branch, else it would require that the module maintainer spend unnecessary time on the web site. Ruby does not yet have an RST parser, so we will need to convert the file from RST to HTML when it changes, rather than doing it dynamically, but this should be no problem. - *Subscriptions*: Branch users need some way to specify that they're interested in specific modules or branches, so it's easy for them to visit the site to see if there are any updates. - *Naming*: I have no idea what to call the site. I've been thinking somewhere between a marketplace and a puppet shop, but that doesn't equal a name. Looking To the Future --------------------- There are many things we should at least keep in mind during the development of this web site: - *Hosted Branches*: It would be nice if we could be the authoritative source for branches, but this will require the use of a dSCM that supports a server or will require branch maintainers have SSH access. - *Non-Puppet Modules*: If we develop this site correctly, then it could reasonable be used for non-Puppet code, such as very small projects or even stand-alone scripts. - *Non-executable Content*: There is a lot of content in this space (system administration and maintenance), such as tutorials, and no good place for it. If our application made it easy to publish and udpate these documents, then it could begin to become a central meeting place for sysadmins, or generally tech stuff. - *Reputation Systems*: It would be especially great if both branch maintainers and the branches themselves could have some sort of reputation system, it would make finding good modules much easier. It would even provide a way for us to convert ownership: If a non-trunk branch has a significantly higher reputation than the trunk branch, one could reasonably change ownership. - *Commercial Content*: Many people have great content but are unwilling to give it away. If we could enable a way to charge people for access to content, taking some percentage and giving the rest to the branch (and/or module?) author, then the web site could conceivably be quite profitable. - *Corporate Islands*: Many companies have needs that closely approach the goals of this web site, but with collaboration restricted to the company's employees and partners. We could possibly provide software-as-a-service to these companies, making it easy for them to publish and share their information internally, probably making it possible for them to subscribe to external modules. .. _restructured text: http://docutils.sourceforge.net/docs/user/rst/quickref.html .. _git: http://git.or.cz/ .. _mercurial: http://www.selenic.com/mercurial/ .. _darcs: http://darcs.net/ |
