QA on Soyuz
(See also the Effective QA section in BuildFarm - you must visit this if you made changes in the publisher because builders need to access the archives)
There are three places you can do QA for Soyuz:
QA on qastaging
qastaging only runs the UI side of Soyuz services, so you can only test code that runs in the webapp:
- PPA copying operations
- API operations
- template/browser code changes
- (add more here)
QA on staging
staging does not currently run any builders (references to 'clementine' are outdated). Similar QA to qastaging can be performed here. If building QA is absolutely required here, it could theoretically have scalingstack access, but that is not set up.
QA on dogfood
Dogfood is the original QA platform for Soyuz and some developers have shell access which is necessary to run the scripts and work with production-like data. Since this machine is not open for general access to developers, anyone wishing to QA changes to the following things will need to contact a member of Canonical launchpad team.
- The Publisher (PPA or Ubuntu), which includes
- cron.germinate (this one is owned by the Ubuntu team but we test it for them)
- The upload processor (process-upload.py)
- Ubuntu archive management tools (everything in scripts/ftpmaster-tools/)
- Any package build types that require a buildd.
Dogfood has limited resources and is starting to get close to disk space limitations when restoring the production database. The database is restored very irregularly, and on no fixed schedule. Dogfood is very, very slow.
Getting more QA facilities on [qa]staging
It should be easy to run the txpkgupload daemon, and the upload processor and process-accepted script cron jobs on staging. It should also be possible to ask a LOSA to run one of the archive-admin scripts manually, when required, with no issues.
The publisher is a very different matter, because of the nature of the staging database getting restored every week, it will get out of sync with the published repositories. This can cause OOPSes in the scripts, some of which will be false alarms but will still look odd to the uninitiated. At best it will be transient, at worst it will block the publisher and hence QA. There are also some problems with librarian files getting expired in production that are not expired in staging which will also make the publisher fall over.
The PPA signing private keys are also not available outside of production - we remove the references in the dogfood DB to avoid the publisher problems in that area but if they need to be tested then it presents some manual work.
So, some more thought needs to be put into how best to handle publishing on staging.
On a new release of launchpad-buildd or soyuz code involved in building any of the various types, it is important to test that the builds succeed.
You probably want:
Source Package Recipe Build
There is a full Procedure for creating a recipe and uploading it to launchpad.
A shorter way is to use an existing project on dogfood and create a new recipe (or build an existing one). launchpad-buildd is a good candidate.
- Create a recipe
- Either 'Use an existing PPA' if you have one, or create a new one.
- Bionic and Xenial are a good choice for distribution series
- Request a build
A Source Package Recipe Build that builds into a PPA will also cause a Binary Package Build to happen, but it is still worth testing that separately.
Binary Package Build
These are created on the upload of a package for building into a PPA.
Create a PPA. This can be skipped if you've already done this.
Follow the Soyuz/ReUploadPackage instructions. sl is a good candidate package.
A Source Package Recipe Build will also cause these builds to happen.
OCI Image Build
Snap builds require a git branch to build from. You can push directly to dogfood's git service (git.dogfood.paddev.net) and then create a snap recipe based on the result in the same way that you want on production. Alternatively, snaps support building from external repositories, which can be either production launchpad (launchpad.net), github, or similar service.
Create a snap on dogfood via lp-shell: `lp.snaps.new(name='test-from-api', owner=lp.me, git_repository_url='url-to-repository', git_path='branch-to-build')
Find the snap via the Web UI
- Request a build of the snap