diff mbox series

[RFC,Unstable/Noble] UBUNTU: [Packaging] Add debian/control sanity check

Message ID 20231120153419.700325-1-juerg.haefliger@canonical.com
State New
Headers show
Series [RFC,Unstable/Noble] UBUNTU: [Packaging] Add debian/control sanity check | expand

Commit Message

Juerg Haefliger Nov. 20, 2023, 3:34 p.m. UTC
BugLink: https://bugs.launchpad.net.bugs/2043994

Only the main linux source packages should produce linux-source-PKGVER
binary packages. Add a simple check that fails if debian/control looks
fishy.

Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com>
---
 debian/rules                        |  1 +
 debian/scripts/checks/control-check | 36 +++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100755 debian/scripts/checks/control-check

Comments

Andrea Righi Jan. 2, 2024, 12:16 p.m. UTC | #1
On Mon, Nov 20, 2023 at 04:34:19PM +0100, Juerg Haefliger wrote:
> BugLink: https://bugs.launchpad.net.bugs/2043994
> 
> Only the main linux source packages should produce linux-source-PKGVER
> binary packages. Add a simple check that fails if debian/control looks
> fishy.
> 
> Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com>

It looks like a good idea to me! Should I just apply it to unstable? Or
are we waiting for more comments about this?

Thanks,
-Andrea

> ---
>  debian/rules                        |  1 +
>  debian/scripts/checks/control-check | 36 +++++++++++++++++++++++++++++
>  2 files changed, 37 insertions(+)
>  create mode 100755 debian/scripts/checks/control-check
> 
> diff --git a/debian/rules b/debian/rules
> index b78aff60ce24..3f09305eeba8 100755
> --- a/debian/rules
> +++ b/debian/rules
> @@ -219,6 +219,7 @@ $(DEBIAN)/control.stub: 				\
>  .PHONY: debian/control
>  debian/control: $(DEBIAN)/control.stub
>  	cp $(DEBIAN)/control.stub debian/control
> +	debian/scripts/checks/control-check
>  
>  debian/canonical-certs.pem: $(wildcard $(DROOT)/certs/*-all.pem) $(wildcard $(DROOT)/certs/*-$(arch).pem) $(wildcard $(DEBIAN)/certs/*-all.pem) $(wildcard $(DEBIAN)/certs/*-$(arch).pem)
>  	for cert in $(sort $(notdir $^));					\
> diff --git a/debian/scripts/checks/control-check b/debian/scripts/checks/control-check
> new file mode 100755
> index 000000000000..51e1c91f5502
> --- /dev/null
> +++ b/debian/scripts/checks/control-check
> @@ -0,0 +1,36 @@
> +#!/bin/bash -eu
> +#
> +# debian/control sanity checks
> +#
> +
> +echo "II: Checking debian/control"
> +
> +. debian/debian.env
> +
> +source_name=$(dpkg-parsechangelog -l"${DEBIAN}"/changelog -SSource)
> +linux_source=$(grep -P '^Package:\s*linux.*-source-\d+\.\d+\.\d+' debian/control | sed 's/^Package:\s*//')
> +
> +case "${source_name}___${linux_source}" in
> +	linux___linux-source-*)
> +		# Main kernel package produces linux-source
> +		true
> +		;;
> +	linux-*___)
> +		# Non-main kernel package must *not* produce linux-source
> +		true
> +		;;
> +	*)
> +		# All other combinations are packaging mistakes
> +		if [ -n "${linux_source}" ] ; then
> +			echo "EE: debian/control contains invalid package stanza:" >&2
> +			echo "Package: ${linux_source}" >&2
> +		else
> +			echo "EE: debian/control is missing package stanza:" >&2
> +			echo "Package: linux-source-PKGVER" >&2
> +		fi
> +		exit 1
> +		;;
> +esac
> +
> +echo "II: Done"
> +exit 0
> -- 
> 2.40.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
Paolo Pisati Feb. 21, 2024, 4 p.m. UTC | #2
On Mon, Nov 20, 2023 at 04:34:19PM +0100, Juerg Haefliger wrote:
> BugLink: https://bugs.launchpad.net.bugs/2043994
> 
> Only the main linux source packages should produce linux-source-PKGVER
> binary packages. Add a simple check that fails if debian/control looks
> fishy.

Applied.
diff mbox series

Patch

diff --git a/debian/rules b/debian/rules
index b78aff60ce24..3f09305eeba8 100755
--- a/debian/rules
+++ b/debian/rules
@@ -219,6 +219,7 @@  $(DEBIAN)/control.stub: 				\
 .PHONY: debian/control
 debian/control: $(DEBIAN)/control.stub
 	cp $(DEBIAN)/control.stub debian/control
+	debian/scripts/checks/control-check
 
 debian/canonical-certs.pem: $(wildcard $(DROOT)/certs/*-all.pem) $(wildcard $(DROOT)/certs/*-$(arch).pem) $(wildcard $(DEBIAN)/certs/*-all.pem) $(wildcard $(DEBIAN)/certs/*-$(arch).pem)
 	for cert in $(sort $(notdir $^));					\
diff --git a/debian/scripts/checks/control-check b/debian/scripts/checks/control-check
new file mode 100755
index 000000000000..51e1c91f5502
--- /dev/null
+++ b/debian/scripts/checks/control-check
@@ -0,0 +1,36 @@ 
+#!/bin/bash -eu
+#
+# debian/control sanity checks
+#
+
+echo "II: Checking debian/control"
+
+. debian/debian.env
+
+source_name=$(dpkg-parsechangelog -l"${DEBIAN}"/changelog -SSource)
+linux_source=$(grep -P '^Package:\s*linux.*-source-\d+\.\d+\.\d+' debian/control | sed 's/^Package:\s*//')
+
+case "${source_name}___${linux_source}" in
+	linux___linux-source-*)
+		# Main kernel package produces linux-source
+		true
+		;;
+	linux-*___)
+		# Non-main kernel package must *not* produce linux-source
+		true
+		;;
+	*)
+		# All other combinations are packaging mistakes
+		if [ -n "${linux_source}" ] ; then
+			echo "EE: debian/control contains invalid package stanza:" >&2
+			echo "Package: ${linux_source}" >&2
+		else
+			echo "EE: debian/control is missing package stanza:" >&2
+			echo "Package: linux-source-PKGVER" >&2
+		fi
+		exit 1
+		;;
+esac
+
+echo "II: Done"
+exit 0