= Packaging Service =
The packaging service would aid developers in creating the packaging for their project, such that they could get it in to a PPA for distribution to users.
'''Contact:''' JamesWestby <
>
'''On Launchpad:''' Nothing yet
'''As a ''' software developer<
>
'''I want ''' package my software<
>
'''so that ''' Ubuntu users can more easily install it<
>
This is not about getting the package in to Ubuntu, or even generating packaging that would be suitable for that. It is about going from the unpackaged code to a package in a PPA.
''Link this from [[LEP]]''
== Rationale ==
Launchpad is a great codehosting platform and provides PPAs, which are a great way to distribute software. Recipes have bought these two domains closer together, allowing PPA packages to be built from branches by Launchpad. However that still relies on someone creating the packaging files for the project. This step is seen as a significant hurdle to many developers, and is currently often handled by people familiar with packaging, requiring co-ordination.
Making is easy for project authors to create the packaging and get their project in a PPA will mean that it is easier for them to distribute it to Ubuntu users, and take care of one step in the process of getting the project in to the software center.
== Stakeholders ==
* JamesWestby
* AllisonRandall - Ubuntu Technical Architect, interested in easing the process of packaging software. Last spoke 2011/01/13.
== Constraints and Requirements ==
=== Must ===
* Allow developers to create packaging for their code without having to write the files themselves
* Allow developers to go from an unpackaged branch to a PPA
=== Nice to have ===
* Project PPAs so that it is clear to users when the process has been completed, or at least links to PPAs that contain packages of the project.
=== Must not ===
* Ask developers about intricacies of the packaging process that they do not understand.
=== Out of scope ===
* Producing a working package for 100% of projects registered on Launchpad.
== Workflows ==
=== Project owner packaging their project ===
The owner of an unpackaged project goes to the project page on Launchpad. The panel which shows links to Ubuntu packages cannot show such a link, so it offers to create the link. There is an option to specify that the project is not packaged. If there are no recipes for any branches of the project (trunk of the project?), and the trunk (no branches?) does not contain any packaging files, then there is an additional link alongside this option with the text "(package this project)" (text?)
{{attachment:package-this-link.png}}
(Should this be the owner, or anyone, or anyone that owns a branch in the project?)
If the trunk contains packaging files, but there are no recipes (and no packages in PPAs?) then there should be a link to create a recipe and trigger it to build in to a PPA(?).
=== Branch owner packaging a branch ===
Any branch that does not have any packaging files and has no associated recipe can also have a link on it to package it.
(Should there be a link for recipes and a link for packaging, or one link with a later choice between simply creating a recipe using another packaging branch and creating the packaging files?)
TODO: mockup
=== Creating the packaging ===
When the user triggers the start of the process they enter a series of pages that lead them through this process.
Firstly they are presented a page that explains the process, tells them that all changes are reversible, explains that the process will take some time, and asks them if they would like to proceed.
{{attachment:confirmation-scren.png}}
(This should be more fun. It should also tell them more about what to expect. Perhaps even making it more like a tour would be good)
If the user cancels they are returned to the previous page.
If they choose to continue then they are shown a page with a progress bar that updates as parts of the process complete. (Should this start to show artefacts that are being produced, e.g. embedding an MP showing the packaging that is added?)
If the process is completely successful then they are redirected to the PPA that the package was built in, with the package highlighted. (should they go to a page specific to this process so that they can deal with the other artefacts too?) Wherever they end up there should be instructions for them to try out their package (or that they can pass on to others to try.)
If there is an error at any stage of the process then they will be shown a page that details the error and instructs the user how to make changes and restart the process. The user is able to restart the process from the appropriate point from the page itself as well. (This will be tricky to make as useful as we would want.)
(What names do we want to give the created branch, PPA, etc?)
== Success ==
=== How will we know when we are done? ===
* A new project is able to go from code hosted on LP to a package in a PPA without leaving the website (assuming the code is automatically packageable, builds etc.)
=== How will we measure how well we have done? ===
* Increase in the number of LP projects with packages in PPAs.
* Increase in the number of packages in PPAs.
* Increase in the number of recipes.
* Increase in the number of of applications submitted to Ubuntu's Application Review Board.
== Thoughts? ==
''Put everything else here. Better out than in.''
This doesn't yet say anything about how all this will be achieved.