Packaging/SourceBuilds/GettingStarted

Not logged in - Log In / Register

Revision 8 as of 2010-10-04 08:38:08

Clear message

lp-diamond-16.png Source package recipes in Launchpad

Home

Getting Started

Knowledge Base

List of Daily Builds

Overview

Here's the quick run-down of what you need to do, to set up your daily builds.

Prerequisites

Code in Launchpad

Launchpad's Daily Builds only works on code that exists in Launchpad. Either you make use of Launchpad Code yourself (easier), or you set up Launchpad to import code from somewhere else.

Packaging

Somebody needs to have packaged your software before. If your software for example is in Ubuntu or Debian, you are sorted out. If there's another branch in Launchpad, that contains packaging for your software, you are sorted out. With the "recipe" (more on the topic below), you can sort-of-merge the packaging into your daily branch.

If there is no existing packaging for Debian or Ubuntu, you might want to have a look at http://wiki.ubuntu.com/PackagingGuide/PackagingOverview to get your initial packaging set up.

Make sure that the build process in your packaging can deal with what's in your branch. For example, if you work on a C project with autotools, you might have to run autoreconf -i at some stage during the build to make sure that all the auto-generated files (which are not in version control) are present.

Recipe

A "recipe" is a description of the steps bzr-builder should take to construct a package from the various bzr branches. Its format specifies

In this first step, just write it in a text editor. Later on, you'll test it locally, then enable it in Launchpad.

Writing a basic recipe

With daily build recipes you have a number of options to get the source in place so it can be built.

The third alternative is one that is going to work in the most cases, which is why we'll highlight it here.

If you need anything more sophisticated or extensive documentation on all your options, please review our recipe documentation.

Simple Example

In this example we will use trunk which does not contain any packaging and nest a separate branch that contains JUST the packaging (contents of the ./debian/ directory).

The contents of the branch that is nested into are placed into a directory called ./debian.

# bzr-builder format 0.2 deb-version {debupstream}+{revno}+{revno:packaging}
lp:gtg
nest packaging lp:~gtg/gtg/debian debian

Testing locally

Testing the recipe

It's very important to test your recipe locally, because failed builds waste build farm resources, and may exceed your quota (currently 5 per distroseries per recipe per day). Make sure you test locally first!

Save your recipe file to <project>.recipe.

Once you're happy with the specific Ubuntu version you want to test this in, please install

In order to build the recipe you need to use the bzr dailydeb command.

$ bzr dailydeb package.recipe working-dir

This will perform the steps specified in <project>.recipe. It will create working-dir and put the resulting source tree and the source package there.

Testing the build

Now we have a source package. Now let's test the build process.

First we set up pbuilder, a tool that sets up a clean, minimal environment for the build, so we can be sure it builds everywhere.

  1. sudo apt-get install pbuilder

  2. edit ~/.pbuilderrc and add

    COMPONENTS="main universe multiverse restricted"
  3. sudo pbuilder create

To kick off the test-build, run

sudo pbuilder build <working-dir>/<project>_<version>.dsc

If the build succeeds, you can test-install the resulting package from /var/cache/pbuilder/result/.

Setting up the recipe in Launchpad

Now that you confirmed the recipe to work, the rest is very simple.

create-recipe.png

Browse to the branch you want to build in Launchpad. Click on "(+) Create packaging recipe".

Now fill in all the necessary details:

Building

If you have checked "build daily", Launchpad will automatically schedule a build of your recipe once every day, if any of the branch tips have changed since the last build. However, it's a good idea to try building it yourself first, to make sure that everything is working correctly. You can use the "Request build(s)" link for this:

request-build.png