Skip to content

Commit

Permalink
deb: fix version to allow for distro upgrades
Browse files Browse the repository at this point in the history
The existing version format for our packages use `distro-codename` in the version.
Unfortunately, `codename` cannot be used to compare versions, which means that
when a user upgrades their distro to a new version, the package won't be updated
until a new release happens.

This patch changes the format of the version to include `VERSION_ID`, which is
numeric, and can be used in version comparison.

While we're making changes, this also adds an extra `pkgRevision` number in the
version, which can allow us to do a new build/release of a package in between
upstream releases. This version is not yet configurable (which can be changed
in future).

Resulting packages are now formatted as;

- name of the package (e.g., "docker-ce")
- version (e.g., "22.10.6~beta.0")
- "-0" (mostly "best practice", and allows updating for specific situations)
- distro (e.g., "ubuntu")
- VERSION_ID (e.g. "22.04" or "11") this must be "sortable" to make sure that
  packages are upgraded when upgrading to a newer distro version ("codename"
  cannot be used for this, as they're not sorted)
- pkgRevision (usually "0", see above)
- SUITE ("codename"), e.g. "jammy" or "bullseye". This is mostly for convenience,
  because some places refer to distro versions by codename, others by version.
  we prefix the codename with a tilde (~), which effectively excludes it from
  version comparison.

Note that while the `${EPOCH}${EPOCH_SEP}` is part of the version, it is not
included in the package's *filename*.

Examples:

    docker-ce_22.10.6~beta.0-0~debian.11.0~bullseye_amd64.deb
    docker-ce_22.10.6~beta.0-0~ubuntu.22.04.0~jammy_amd64.deb

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
  • Loading branch information
thaJeztah committed May 25, 2022
1 parent ba44734 commit f8299f2
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion deb/build-deb
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,40 @@ debSource="$(awk -F ': ' '$1 == "Source" { print $2; exit }' debian/control)"
debMaintainer="$(awk -F ': ' '$1 == "Maintainer" { print $2; exit }' debian/control)"
debDate="$(date --rfc-2822)"

versionID="$(. /etc/os-release && echo "$VERSION_ID")"

# Include an extra `.0` in the version, in case we ever would have to re-build an
# already published release with a packaging-only change.
pkgRevision=0

# Generate changelog. The version/name of the generated packages are based on this.
#
# Resulting packages are formatted as;
#
# - name of the package (e.g., "docker-ce")
# - version (e.g., "22.10.6~beta.0")
# - "-0" (mostly "best practice", and allows updating for specific situations)
# - distro (e.g., "ubuntu")
# - VERSION_ID (e.g. "22.04" or "11") this must be "sortable" to make sure that
# packages are upgraded when upgrading to a newer distro version ("codename"
# cannot be used for this, as they're not sorted)
# - pkgRevision (usually "0", see above)
# - SUITE ("codename"), e.g. "jammy" or "bullseye". This is mostly for convenience,
# because some places refer to distro versions by codename, others by version.
# we prefix the codename with a tilde (~), which effectively excludes it from
# version comparison.
#
# Note that while the `${EPOCH}${EPOCH_SEP}` is part of the version, it is not
# included in the package's *filename*. (And if you're wondering: we needed the
# EPOCH because of our use of CalVer, which made version comparing not work in
# some cases).
#
# Examples:
#
# docker-ce_22.10.6~beta.0-0~debian.11.0~bullseye_amd64.deb
# docker-ce_22.10.6~beta.0-0~ubuntu.22.04.0~jammy_amd64.deb
cat > "debian/changelog" <<-EOF
$debSource (${EPOCH}${EPOCH_SEP}${DEB_VERSION}-0~${DISTRO}-${SUITE}) $SUITE; urgency=low
$debSource (${EPOCH}${EPOCH_SEP}${DEB_VERSION}-0~${DISTRO}.${versionID}.${pkgRevision}~${SUITE}) $SUITE; urgency=low
* Version: $VERSION
-- $debMaintainer $debDate
EOF
Expand Down

0 comments on commit f8299f2

Please sign in to comment.