Task:PR1.2 autobuilder

Contents

Background

After the PR1.2 SDK was released, Niels deployed it to the autobuilder; enacting a plan which was discussed on this list. This has caused problems with libhildon dependencies, but the problems aren't just limited to that library [1].

Both Niels and the Council believe we should do something to assist.


What we should do

We *need* to do something, both to improve the situation in -devel and -testing today, and test an approach for the next upgrade.

The main requirements here are, I think:

  • It's not an excessive amount of work
  • It's a viable long term strategy
  • The QA process doesn't get broken

Thoughts and comments from developers, or anyone else with a idea, will be much appreciated.


Progress

Fremantle autobuilder has been switched to the Squeeze devkit; idea #Use the improved dpkg-shlibdeps was implemented. [2] [3]. --javispedro 21:50, 16 April 2010 (UTC)

Options

Deploy SDKs as they are released; treat -devel and -testing as trunk

This is what we have now, I think we can say it doesn't work if there's going to be more than a few days between SDK release and device upgrade. Since Nokia doesn't pre-announce release dates, and last minute bugs could cause problems; I think we can rule this one out.

Revert the builder

This is basically a step backwards. "Changing the builder config is easy. Cleaning up -devel and rebuilding the affected packages is quite some work as we don't have any scripts for that made yet."

Hack the SDK, create some kind of hybrid

This'd be bad enough if limited to just libhildon, but isn't viable and WILL cause unforeseen problems. Veto :-)

Create separate repos, build queues for pre- and post-1.2

Similar to what's been done for Extras proper. "Creating the repos will be about a day work, but the part that sits on top of that (management scripts, Packages interface, QA queue) will probably take a week of work."

There are hard issues around QA here.

Try building in each SDK in turn

My suggestion; when someone uploads to "fremantle" auto-builder it attempts to build the package against the PR1.1 SDK. If it succeeds, it goes into Extras-devel. If it fails to build, it gets built with the PR1.2 SDK, and so on.

For an app with compile time symbol resolution (e.g. C/C++), this'd handle both cases quite nicely. Python apps would have to depend on the specific versions of bindings which gave them the features they wanted - again, not too much of a problem.

At extras(-stable) promotion time you could even decide, based on actual binary package dependencies, whether to put in fremantle-1.2 or both fremantle-1.2 & fremantle extras repos. This would fix another common complain, "what if I don't upgrade for a few weeks".

Larger packages could be prevent from being tried to built twice by stating a forced build dependency on a PR1.2 version of any system package.

Some software won't install from -devel and -testing as it does now, but that will be reduced to the set of software which is actually using features that are unavailable. A HAM patch could grey out applications which were uninstallable, or show some other indication.

This is, effectively, reinventing the more intelligent dpkg-shlibdeps.

However, it deals with the following three circumstances:

  1. Application uses API which has changed in later SDK. This will be built with PR1.1 SDK, succeeds and goes into Extras-devel. Can be promoted to Extras-testing but there's no clear way for a tester to know it won't work if their device is running the latest OS.
  2. Application uses API which is unchanged in later SDK. This will be built with PR1.1 SDK, succeeds and goes into Extras-devel. Can be promoted to Extras-testing and tested on any device with PR1.1 or PR1.2. Once promoted it COULD go into fremantle and fremantle-1.2.
  3. Application uses API which is introduced in later SDK. This will be built with PR1.1 SDK and fail. It will be rebuilt with PR1.2 SDK, succeed and go into Extras-devel. Can be promoted to Extras-testing and tested by testers using the most recent release. Once promoted it will go into fremantle-1.2.

Use the improved dpkg-shlibdeps

This is a big topic and as such might require more careful consideration, but seems way more future proof than the rest of options.

Stuff that would need to be done:

  1. Add the debian-squeeze devkit to the autobuilder. At this point I don't know if it's usable, or not. The Lenny devkit does not contain dpkg-shlibdeps.
  2. Ensure required .symbols files are in the SDK. We could either
    • Fix upstream. Make them generate .symbols files, make them use the updated devkit. Probably impossible for PR1.2.
    • Ship symbol files ourselves in an external package. A bit ugly, requires maintenance.
  3. Put the built packages into a common -devel repo, or specific -devel-1.0 and -devel-1.2 repositories?
  4. If single -devel & -testing repositories, decide whether to put packages in -1.0 or -1.2 at -stable promotion time.

Some cons:

  • Just enabling debian-squeeze devkit in autobuilder might cause problems. Need to check on that. Might need testing.
  • Need to ensure that local SDK installations can replicate the autobuilder setup. This means debian-squeeze devkit, and .symbols files have to be distributed.

A nice added benefit is that we get updated debhelper in the SDK, and more Debian compatibility; might be worth to push.

Initial testing

There will be a temporary autobuilder with the debian-squeeze devkit installed where we will experiment with .symbols files. We have thrown a few packages to it with no visible problems so far; if someone thinks his package might break when built under a newer Debian tooling please say so before it breaks.

.symbols file generation is currently being done externally, using the publicly released library binaries and dpkg-gensymbols. A sample PR1.2 libhildon1 .symbols file looks like this, and will be placed in /etc/dpkg/symbols/ .

Case-by-case basis

Developer complains: add a temporary exception to autobuilder to build $APPNAME with PR1.0/1.1 SDK, but goes into the shared extras-devel as now.