NOTE: Here you can check the Launchpad Builders status. Our build process relies on Launchpad builders, and they may be down or very busy. This might prevent building the packages and snaps from being built.
A new beta version will be automatically released by the canary validation
process. When this process passes, it moves the beta
branch to the latest
commit it verified calculating it from the version string. Namely if the latest
edge version is 1.2.3-dev120
, and it is verified, the beta HEAD
will be moved to the 120th
commit after the tag v1.2.3
(so that
origin/beta/HEAD~120
is v1.2.3
)
The verification process works as follows:
flowchart TD
A[Wait for specific time of the day] --New changes--> D
D[Build runtime/frontend snaps]
A --No new change--> A
D --Build failed--> E(Failure, do nothing)
E --> A
D --Build ok--> F[Verify snaps via Metabox]
F --Validation ok--> G[Run canary testing on jenkins]
F --Validation failed --->E
G --Validation failed --->E
G --Validation ok--->H(Move beta branch to the commit)
NOTE: This process is fully automated, you don't need to trigger it.
Internal teams (mostly QA and Certification) are using the version in the beta snap channels or the beta PPA to complete their tests. If this version is validated, it can then be pushed to stable for other teams and external stakeholders.
Therefore, if there has been no negative feedback from internal teams after a cycle of testing the beta release, run the Stable release workflow to copy deb packages to the stable PPA and promote all snaps to stable.
Both Debian packages and checkbox snaps rely on [get_version.py] to calculate package versions from git metadata.
>>> from get_version import get_version, OutputFormat
>>> get_version(dev_suffix=True, output_format=OutputFormat.SNAP)
'2.9.0-dev38
The get_version module can generate the version for any packaging we support and can also be called from the CLI. The idea is that each commit done since the last tag is categorized using the postfix included in the commit message and the version is calculated as follows:
- Infra: are changes to our CI/CD infrastructure, they are ignored
- Bugfix: are bugfixes, the patch number is incremented
- New: are new backward compatible features, the minor version is incremented
- Breaking: are new breaking changes, the major version number is incremented
NOTE: If any commit is in a different format, the script will complain about it by logging it to the stderr. Don't ignore these messages: double check what was changed in the problematic commits and re-calculate the version accordingly
First you need to determine the version string for the tag. You can use the previously described script to do so:
- Clone the repository and get the version
$ git clone git@github.com:canonical/checkbox.git $ cd checkbox/tools/release $ ./get_version.py --output-format tag
- Tag the release
$ git tag -s "v2.10.0" -m "Beta promotion of: 2.9.1 → 2.10.0"
- Push the tag to origin
$ git push --tags
3 workflows are triggered on tag push events:
- checkbox deb packages (copy packages to the stable PPA)
- checkbox snap packages (copy snaps to the stable channels)
- checkbox core snap packages (copy snaps to the stable channels)
In addition to the above workflows, a Draft Release Note is created on Github with an auto-generated changelog.
Check the related Github Action logs to see if everything runs as expected:
- Snapcraft is not blocked during the snap build process. For example, in this
build, the i386 build was blocked on an error (
Chroot problem
) for hours before finally completing
The release process should have created a new Draft Release Note. You can use this to prepare a release e-mail:
- If this release comes with big changes for the user, you can talk about them in a Highlights section.
- Not all changes in the Release Note from GitHub are meaningful for the end users. Highlight the ones that are most important for them by bolding them. For instance, changes related to the tooling used for Checkbox releases is not important to the users, but fixes for bugs reported by the users are!
You can see a sample release e-mail here.
Send the release e-mail to:
- checkbox-devel@lists.ubuntu.com (public, see mailing list page)
- ce-certification-qa@lists.canonical.com (private)
Note: You need to be registered to both these mailing lists in order to be able to send an e-mail to them.
- stable: For external customers.
- beta: For Canonical internal users. This version should be the one used for Certification, and early QA pipelines.
- edge: To test recent developments that are not yet in beta.
- checkbox-ng
- checkbox-support
- providers/base
- providers/resource
- providers/certification-client
- providers/certification-server
- providers/sru
- providers/tpm2
- providers/gpgpu
These are the steps to run the tests for the release tools:
# Only run the tests
python -m pytest
# Run the tests and get the coverage
python -m coverage run -m pytest
python -m coverage html
If you have tox
instaled, you can just run
tox -e py310