test: add deb coverage to TEST-88-UPGRADE

This commit is contained in:
Luca Boccassi
2026-07-26 13:45:28 +01:00
parent a1e42f3438
commit 28e1f84d6a
2 changed files with 111 additions and 4 deletions
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -e
set -o pipefail
if [[ "$1" == "build" ]]; then
exit 0
fi
pkgdir=/usr/host-pkgs
develver=$(dpkg-query --root="$BUILDROOT" --showformat='${Version}' --show systemd)
distrover=$(
apt-cache madison systemd |
awk -F '|' '$3 !~ /file:\/+repository/ && !found { gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2); print $2; found=1 }'
)
if [[ -z $distrover ]]; then
echo "Skipping upgrade test, no distro version found"
exit 0
fi
if [[ ${distrover#*:} =~ ^([0-9]+) ]]; then
distromajor=${BASH_REMATCH[1]}
else
echo "Skipping upgrade test, unable to parse distro version: $distrover"
exit 0
fi
if [[ ${develver#*:} =~ ^([0-9]+) ]]; then
develmajor=${BASH_REMATCH[1]}
else
echo "Skipping upgrade test, unable to parse development version: $develver"
exit 0
fi
deltaver=$((develmajor - distromajor))
if [[ $deltaver -le 0 ]]; then
echo "Skipping upgrade test, distro version is newer or equal: $distrover"
exit 0
fi
distro_packages=()
devel_packages=()
while IFS=$'\t' read -r package source package_architecture; do
[[ $source == systemd ]] || continue
[[ $package_architecture == "$DISTRIBUTION_ARCHITECTURE" || $package_architecture == all ]] || continue
[[ $package != *-dbgsym* ]] || continue
devel_packages+=("$package=$(dpkg-query --root="$BUILDROOT" --showformat='${Version}' --show "$package")")
package_versions=$(apt-cache madison "$package")
if awk -F '|' -v version="$distrover" '
$3 !~ /file:\/+repository/ {
gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2)
if ($2 == version)
found=1
}
END {
exit !found
}
' <<<"$package_versions"; then
distro_packages+=("$package=$distrover")
fi
done < <(dpkg-query --root="$BUILDROOT" --show --showformat='${binary:Package}\t${source:Package}\t${Architecture}\n')
if (( ${#distro_packages[@]} == 0 )); then
echo "Skipping upgrade test, no distro packages found"
exit 0
fi
if (( ${#devel_packages[@]} == 0 )); then
echo "Skipping upgrade test, no development packages found"
exit 0
fi
rm -rf "$BUILDROOT$pkgdir/distro" "$BUILDROOT$pkgdir/devel"
mkdir -p "$BUILDROOT$pkgdir"/{distro,devel}
# apt-get download writes packages to the current directory
(
cd "$BUILDROOT$pkgdir/distro"
apt-get download "${distro_packages[@]}"
)
(
cd "$BUILDROOT$pkgdir/devel"
apt-get download "${devel_packages[@]}"
)
+21 -4
View File
@@ -12,8 +12,25 @@ if ! [[ -d $pkgdir ]]; then
exit 77
fi
if ! command -v dnf >/dev/null; then
echo 'dnf not found, skipping test.' >/skipped
if command -v dnf >/dev/null; then
package_extension=rpm
downgrade=(dnf downgrade --nogpgcheck -y --allowerasing --disablerepo '*')
upgrade=(dnf -y upgrade --nogpgcheck --disablerepo '*')
elif command -v apt-get >/dev/null; then
package_extension=deb
apt_sources=/run/TEST-88-UPGRADE.sources
apt_source_parts=/run/TEST-88-UPGRADE.sources.d
: >"$apt_sources"
mkdir -p "$apt_source_parts"
apt_options=(
-o "Dir::Etc::sourcelist=$apt_sources"
-o "Dir::Etc::sourceparts=$apt_source_parts"
--no-install-recommends
)
downgrade=(apt-get "${apt_options[@]}" install --allow-downgrades -y)
upgrade=(apt-get "${apt_options[@]}" install -y)
else
echo 'No supported package manager found, skipping test.' >/skipped
exit 77
fi
@@ -84,7 +101,7 @@ timer2=$(systemctl show -P NextElapseUSecRealtime upgrade_timer_test.timer)
# FIXME: See https://github.com/systemd/systemd/pull/39293
systemctl stop systemd-networkd-resolve-hook.socket || true
dnf downgrade --nogpgcheck -y --allowerasing --disablerepo '*' "$pkgdir"/distro/*.rpm
"${downgrade[@]}" "$pkgdir"/distro/*."$package_extension"
# Some distros don't ship networkd, so the test will always fail
if command -v networkctl >/dev/null; then
@@ -105,7 +122,7 @@ fi
check_sd
# Finally test the upgrade
dnf -y upgrade --nogpgcheck --disablerepo '*' "$pkgdir"/devel/*.rpm
"${upgrade[@]}" "$pkgdir"/devel/*."$package_extension"
# TODO: sanity checks
check_sd