Draft: Kernel versioning scheme compatible with u-boot-menu
Goal
To provide kernel versioning scheme which would preserve the ordering of kernels in the extlinux.conf
file generated by u-boot-update
.
Disclaimer
This MR is not actually supposed to be merged as-is. It's a proof of concept and a place for experiments and discussion.
Proposition
To add a fourth number localver to the official kernel version officialver. Examples:
linux-image-6.1.56.2000-whle-ls1-sdk-g166eb04eee68
linux-image-6.1.56.2001-whle-ls1-sdk-gb0c02e4d4cd1
linux-image-6.1.56.2002-whle-ls1-sdk-g5b6255b3522f
linux-image-6.1.56.2003-whle-ls1-sdk-g82774b2e2cee
linux-image-6.1.56.2004-whle-ls1-sdk-g9acec646d92c
^^^^^^ officialver
^^^^ localver
^^^^^^^^^^^^ variant
^^^^^^^^^^^^ commithash
The localver would be based on the depth level of the commit node in the git graph - the output of the command:
git rev-list --count HEAD
This naming scheme has all the desired properties (verified):
-
Partial ordering based on versioning ordering: If in the git graph the commit a is before the commit b then, for the same variant (eg.
whle-ls
,whle-ls1-sdk
), the kernel built from commit a is always lower on the booting menu than commit b. -
Backward compatibility: For a fixed officialver (eg.
6.1.56
,6.5.6
) all kernels from the current naming scheme are lower on the booting menu than those from the proposed one. - Transparency for the official versioning: Kernel a with a higher officialver than that of kernel b is always higher on the booting menu, regardless of the naming scheme used for either a or b, or their variant or localver values.
Additionaly, this naming scheme is consistent with the snapshot versioning used in other packages in Conclusive repositories, eg. fmc
1.0~241.gbpb4ad38
1.0~240.gbp062e7a
1.0~239.gbpcbe27f
Challange
For git rev-list …
command to work correctly the CI system needs to have a full repository during the build. Currently it's obtained with the clone method with the depth limit set to 1000 (GIT_DEPTH
). This results in git rev-list …
always returning 1000 in the following yaml config:
…
- DEB_VERSION="${KERNEL_VERSION}~${CI_JOB_ID}-1"
- LOCAL_VERSION="-${KERNEL_VARIANT}"
- LOCAL_VERSION="~$(git rev-list --count HEAD)-${KERNEL_VARIANT}"
…
Not limiting the cloning depth would greatly reduce performance build.