SRU documentation¶
Stable release updates (SRUs) are package updates to a currently supported Ubuntu release.
Once an Ubuntu release has been completed and published, updates for it are only released under certain circumstances, and must follow a special procedure called SRU.
The SRU principles and processes ensure that stable Ubuntu releases remain stable and predictable to the user.
This documentation is intended for all Ubuntu users if they wish to understand what to expect from Ubuntu stable releases, and also for upstream and Ubuntu developers if they wish to understand what changes would or would not be acceptable to us. The rest is intended for Ubuntu developers and SRU team members to achieve this in practice.
Important
Did you notice a regression in a package that went to the -updates
pocket?
Please report this by following Report a regression.
Getting started¶
The basic SRU process consists of the following steps:
An SRU driver prepares the relevant bugs with the necessary documentation, using the SRU bug template, and makes an SRU upload available.
When an SRU is uploaded by a developer with upload access to the Ubuntu package archive, it enters the “Unapproved” queue, which you can see here: Upload queue (modify for different series as needed).
The SRU team will then review both the upload in the Unapproved queue, and the SRU documentation on each bug. As necessary, the SRU team will leave comments about the upload or SRU documentation on the relevant bug. When ready, the upload is accepted into the -proposed pocket, and then built. Once accepted into -proposed, its status appears in the Pending SRU Report when the report is next generated.
Once builds are ready, the agreed QA steps are performed on the package build using the -proposed pocket, with results being posted to the relevant bugs as comments. The Pending SRU Report tracks progress on this, as well as any other blockers detected, such as build or test failures.
Once the Pending SRU Report displays all outstanding tasks as reported to be resolved, the SRU is ready to be released. The SRU team regularly reviews the report. For packages marked as ready, they review the corresponding bug comments, ensure that all agreed QA steps have been performed satisfactorily and that there are no outstanding blockers. If satisfied, they release packages into the -updates pocket.
The SRU is now complete. If a regression is found, see How-to → Handling regressions for next steps.
The following diagram illustrates this pipeline:
![digraph {
center=true;
node [
fontname = "Ubuntu";
fontsize = "10";
fixedsize = true;
height = 1.3;
width = 2.3;
];
edge [
fontname = "Ubuntu";
fontsize = "10";
];
prepare_package [
label = "Prepare the bug fix,\nand the SRU template";
shape = rect;
];
unapproved [
label = "Upload the package to\nthe unapproved queue";
shape = rect;
];
review [
label = "Does the SRU team\naccept the changes\nand documentation?";
shape = diamond;
];
proposed [
label = "Package builds in -proposed";
shape = rect;
];
build [
label = "Does the package build\non all architectures?";
shape = diamond;
];
verification [
label = "Does the package pass\nthe SRU test plan?";
shape = diamond;
];
autopkgtest [
label = "Are there autopkgtest\nregressions triggered\nby the upload?";
shape = diamond;
];
age [
label = "Package ages in -proposed\nfor minimum 7 days";
shape = rect;
];
released [
label = "Package is released\nto -updates";
shape = oval;
];
troubleshoot [
label = "Refer to SRU documentation,\nor ask SRU team for guidance."
shape = oval;
];
{
rank=same;
review; proposed;
}
{
rank=same;
troubleshoot; released;
}
prepare_package -> unapproved;
unapproved -> review;
proposed -> review [ label = "Yes"; dir=back ];
proposed:s -> build:n;
build:s -> verification:n [ label = " Yes" ];
build2 [ shape=point, height=0.01, width=0.01 ];
{
rank=same;
build; build2;
}
build -> build2 [ dir=none, label=" No " ];
review:s -> build2:n [ dir=none, label="\n\n\n No" ];
verification:s -> autopkgtest:n [ label = " Yes" ];
verification2 [ shape=point, height=0.01, width=0.01 ];
{
rank=same;
verification; verification2;
}
verification -> verification2 [ dir=none, label=" No "];
build2 -> verification2[ dir=none ];
autopkgtest:s -> age:n [ label = " No" ];
autopkgtest2 [ shape=point, height=0.01, width=0.01 ];
{
rank=same;
autopkgtest; autopkgtest2;
}
autopkgtest -> autopkgtest2 [ dir=none, label=" Yes "];
verification2 -> autopkgtest2 [ dir=none];
autopkgtest2 -> troubleshoot:n;
age:s -> released:n;
}](_images/graphviz-c0960a849d3c50dd2c3ae5defb3e31c617bc5d3f.png)
For next steps, see How-to → Perform a standard SRU.
In this documentation¶
Step-by-step guides covering key operations and common tasks
Technical information - specifications, APIs, architecture
Discussion and clarification of key topics
Project and community¶
Read our code of conduct: As a community, we adhere to the Ubuntu code of conduct.
Get support: Ask Ubuntu is a question and answer site for Ubuntu users and developers.
Join our online chat: Meet us in
#sru:ubuntu.com
on Matrix.Report bugs: We want to know about the problems, so we can fix them.
Contribute documentation: The documentation sources in Launchpad.