Given the history of my ShipIt projects producing interesting technical demos that don’t amount to anything, this time I decided to work on something that was _useful_, and that had a chance of being shipped in a reasonable time-frame.
A month or two ago, in response to the fact that a lot of people use Confluence to create documentation, and are asking for particularly un-wiki-like features like workflow and approval, I wrote up “a more collaboration-friendly spec for a Document Staging plugin”: This plugin would allow people to collaborate on documentation in one space and then publish it to another space when it was ready.
(If you set up permissions so people who can write in the staging space can’t write to the public space, hey presto, you’ve got an ad hoc publishing workflow)

Features I got done for ShipIt:
* A visual indicator on each page of whether the page is current, needs publishing, or can not be published because some other page in the destination space is ‘in the way’.
* One-click publishing to copy the page, its labels and attachments into the destination space
* The ability to label pages (with configurable labels) so they won’t be able to be published
* The ability to ‘flag’ pages that you think are ready for publishing (once again, with configurable labels which are removed from the page on publishing)
* A page that shows you all the pages that have been edited but not published, and gives you the option to publish them in bulk.
* Intelligent (but reasonably inefficient) handling pages that are deleted in the staging space
Stuff I faked:
* If you delete the destination space, the plugin gets confused
* Parent/child relationships are only preserved if you publish the parent first
* Content permissions are entirely ignored
* The configuration screen is just a placeholder (web-form CRUD is _boring_)
* “some other random stuff”:
Partly because of the new restriction that post-ShipIt presentations had to fit in three minutes, but mostly because I was listening to the Propellerheads on the way home on Thursday night, I decided to give my demo in the form of a video. Turn the volume up and enjoy:

Obviously this is just a proof of concept. The code isn’t tested or complete, some bits were completely faked up for the demo, and some bits only work if you click the buttons in exactly the right order. I’m hoping to get more time to polish the plugin later, we’ll see.
(Meanwhile, the code is up on “our public SVN repository”:, under Atlassian’s “standard Apache-style open source license”:

ShipIt V: Staging Plugin