public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: app-emulation/cloud-init/
Date: Mon, 31 Mar 2025 17:07:00 +0000 (UTC)	[thread overview]
Message-ID: <1743440745.e41c5c3ca4cb468f2fa85f2c48f08f1541b1d32f.sam@gentoo> (raw)

commit:     e41c5c3ca4cb468f2fa85f2c48f08f1541b1d32f
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 31 17:04:31 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Mar 31 17:05:45 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e41c5c3c

app-emulation/cloud-init: port to python-single-r1

The package isn't suitable for PEP517, as it installs data files and
it simply happens to be written in Python, rather than intending to be
imported and so on.

Unfortunately, for the remaining PEP517 holdouts, there's little pressure
upstream for them to port to a proper build system yet, as while setuptools
deprecated the `setup.py` entrypoint some time ago, there's no removal
in sight yet, so the only pressing side is on Gentoo's where we want
to cleanup distutils-r1's support for that.

It was arguably a mistake to really have these packages use distutils-r1
in the first place.

The obvious workaround for now is to invoke setup.py manually w/ python-single-r1,
and punt the question until setuptools removal of the entrypoint looks
closer (at which time, other distros will be putting pressure on upstreams
too). Of course, if at the time of such a setuptools change, the package
is still not fixed, then we'd have to remove it.

(The same issues apply to bug #922160 which isn't fixed by this, but
hopefully won't be an actual problem until that aforementioned removal
in setuptools itself of the other bits.)

Bug: https://bugs.gentoo.org/922160
Closes: https://bugs.gentoo.org/850964
Closes: https://bugs.gentoo.org/909872
Closes: https://bugs.gentoo.org/952196
Signed-off-by: Sam James <sam <AT> gentoo.org>

 app-emulation/cloud-init/cloud-init-24.4-r4.ebuild | 124 +++++++++++++++++++++
 app-emulation/cloud-init/cloud-init-9999.ebuild    |  91 +++++++++------
 2 files changed, 178 insertions(+), 37 deletions(-)

diff --git a/app-emulation/cloud-init/cloud-init-24.4-r4.ebuild b/app-emulation/cloud-init/cloud-init-24.4-r4.ebuild
new file mode 100644
index 000000000000..99a282a85204
--- /dev/null
+++ b/app-emulation/cloud-init/cloud-init-24.4-r4.ebuild
@@ -0,0 +1,124 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..13} )
+inherit edo python-single-r1 udev
+
+DESCRIPTION="Cloud instance initialisation magic"
+HOMEPAGE="https://launchpad.net/cloud-init"
+
+if [[ ${PV} == *9999 ]]; then
+	inherit git-r3
+	EGIT_REPO_URI="https://git.launchpad.net/cloud-init"
+else
+	SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz"
+	KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="selinux test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+	$(python_gen_cond_dep '
+		dev-python/jinja2[${PYTHON_USEDEP}]
+		dev-python/oauthlib[${PYTHON_USEDEP}]
+		dev-python/pyserial[${PYTHON_USEDEP}]
+		>=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
+		dev-python/pyyaml[${PYTHON_USEDEP}]
+		dev-python/requests[${PYTHON_USEDEP}]
+		dev-python/jsonpatch[${PYTHON_USEDEP}]
+		dev-python/jsonschema[${PYTHON_USEDEP}]
+		dev-python/netifaces[${PYTHON_USEDEP}]
+	')
+"
+BDEPEND="
+	${COMMON_DEPEND}
+	$(python_gen_cond_dep '
+		dev-python/setuptools[${PYTHON_USEDEP}]
+	')
+	test? (
+		$(python_gen_cond_dep '
+			dev-python/mock[${PYTHON_USEDEP}]
+			dev-python/passlib[${PYTHON_USEDEP}]
+			dev-python/pytest[${PYTHON_USEDEP}]
+			dev-python/pytest-mock[${PYTHON_USEDEP}]
+			dev-python/responses[${PYTHON_USEDEP}]
+		')
+	)
+"
+RDEPEND="
+	${COMMON_DEPEND}
+	${PYTHON_DEPS}
+	net-analyzer/macchanger
+	net-analyzer/openbsd-netcat
+	sys-apps/iproute2
+	sys-fs/growpart
+	virtual/logger
+	selinux? ( sec-policy/selinux-cloudinit )
+"
+
+PATCHES=(
+	"${FILESDIR}/${PN}-24.2-systemd.patch"
+	"${FILESDIR}/${PN}-24.4-netcat.patch"
+)
+
+EPYTEST_IGNORE=(
+	# Can't find file
+	tests/unittests/config/test_apt_configure_sources_list_v1.py
+	tests/unittests/config/test_apt_configure_sources_list_v3.py
+	# PORTAGE_TMPDIR too long for unix sockets
+	tests/unittests/test_all_stages.py
+	# TODO
+	tests/unittests/config/test_schema.py
+)
+
+src_prepare() {
+	default
+
+	# Fix location of documentation installation
+	sed -i "s:USR + \"/share/doc/cloud-init:USR + \"/share/doc/${PF}:" setup.py || die
+
+	if [[ ${PV} == *9999 ]] ; then
+		sed -i 's/version=get_version(),/version=9999,/g' setup.py || die
+	fi
+}
+
+src_compile() {
+	edo ${EPYTHON} setup.py build
+}
+
+src_test() {
+	epytest
+}
+
+src_install() {
+	edo ${EPYTHON} setup.py install \
+		--prefix="${EPREFIX}/usr" \
+		--root="${D}" \
+		--init-system=sysvinit_openrc,systemd \
+		--distro gentoo
+	python_optimize
+
+	keepdir /etc/cloud
+
+	# installs as non-executable
+	chmod +x "${D}"/etc/init.d/* || die
+}
+
+pkg_prerm() {
+	udev_reload
+}
+
+pkg_postinst() {
+	udev_reload
+
+	elog "cloud-init-local needs to be run in the boot runlevel because it"
+	elog "modifies services in the default runlevel.  When a runlevel is started"
+	elog "it is cached, so modifications that happen to the current runlevel"
+	elog "while you are in it are not acted upon."
+}

diff --git a/app-emulation/cloud-init/cloud-init-9999.ebuild b/app-emulation/cloud-init/cloud-init-9999.ebuild
index 128407ca66ec..9f7db580b998 100644
--- a/app-emulation/cloud-init/cloud-init-9999.ebuild
+++ b/app-emulation/cloud-init/cloud-init-9999.ebuild
@@ -1,14 +1,13 @@
-# Copyright 1999-2024 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
 
-# Disabled for now: bug #850628
-#DISTUTILS_USE_PEP517=setuptools
-# https://bugs.launchpad.net/cloud-init/+bug/1978328
-PYTHON_COMPAT=( python3_10 python3_11 python3_12 )
+PYTHON_COMPAT=( python3_{10..13} )
+inherit edo python-single-r1 udev
 
-inherit distutils-r1 udev
+DESCRIPTION="Cloud instance initialisation magic"
+HOMEPAGE="https://launchpad.net/cloud-init"
 
 if [[ ${PV} == *9999 ]]; then
 	inherit git-r3
@@ -18,36 +17,43 @@ else
 	KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~x86"
 fi
 
-DESCRIPTION="Cloud instance initialisation magic"
-HOMEPAGE="https://launchpad.net/cloud-init"
-
 LICENSE="GPL-3"
 SLOT="0"
-IUSE="selinux"
-
-CDEPEND="
-	dev-python/jinja2[${PYTHON_USEDEP}]
-	dev-python/oauthlib[${PYTHON_USEDEP}]
-	dev-python/pyserial[${PYTHON_USEDEP}]
-	>=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
-	dev-python/pyyaml[${PYTHON_USEDEP}]
-	dev-python/requests[${PYTHON_USEDEP}]
-	dev-python/jsonpatch[${PYTHON_USEDEP}]
-	dev-python/jsonschema[${PYTHON_USEDEP}]
-	dev-python/netifaces[${PYTHON_USEDEP}]
+IUSE="selinux test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+	$(python_gen_cond_dep '
+		dev-python/jinja2[${PYTHON_USEDEP}]
+		dev-python/oauthlib[${PYTHON_USEDEP}]
+		dev-python/pyserial[${PYTHON_USEDEP}]
+		>=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
+		dev-python/pyyaml[${PYTHON_USEDEP}]
+		dev-python/requests[${PYTHON_USEDEP}]
+		dev-python/jsonpatch[${PYTHON_USEDEP}]
+		dev-python/jsonschema[${PYTHON_USEDEP}]
+		dev-python/netifaces[${PYTHON_USEDEP}]
+	')
 "
 BDEPEND="
-	${CDEPEND}
-	test? (
-		dev-python/mock[${PYTHON_USEDEP}]
-		dev-python/passlib[${PYTHON_USEDEP}]
-		dev-python/pytest-mock[${PYTHON_USEDEP}]
-		dev-python/responses[${PYTHON_USEDEP}]
+	${COMMON_DEPEND}
+	$(python_gen_cond_dep '
 		dev-python/setuptools[${PYTHON_USEDEP}]
+	')
+	test? (
+		$(python_gen_cond_dep '
+			dev-python/mock[${PYTHON_USEDEP}]
+			dev-python/passlib[${PYTHON_USEDEP}]
+			dev-python/pytest[${PYTHON_USEDEP}]
+			dev-python/pytest-mock[${PYTHON_USEDEP}]
+			dev-python/responses[${PYTHON_USEDEP}]
+		')
 	)
 "
 RDEPEND="
-	${CDEPEND}
+	${COMMON_DEPEND}
+	${PYTHON_DEPS}
 	net-analyzer/macchanger
 	net-analyzer/openbsd-netcat
 	sys-apps/iproute2
@@ -60,29 +66,40 @@ EPYTEST_IGNORE=(
 	# Can't find file
 	tests/unittests/config/test_apt_configure_sources_list_v1.py
 	tests/unittests/config/test_apt_configure_sources_list_v3.py
+	# PORTAGE_TMPDIR too long for unix sockets
+	tests/unittests/test_all_stages.py
+	# TODO
+	tests/unittests/config/test_schema.py
 )
 
-distutils_enable_tests pytest
+src_prepare() {
+	default
 
-python_prepare_all() {
 	# Fix location of documentation installation
-	sed -i "s:USR + '/share/doc/cloud-init:USR + '/share/doc/${PF}:" setup.py || die
+	sed -i "s:USR + \"/share/doc/cloud-init:USR + \"/share/doc/${PF}:" setup.py || die
 
 	if [[ ${PV} == *9999 ]] ; then
 		sed -i 's/version=get_version(),/version=9999,/g' setup.py || die
 	fi
+}
 
-	distutils-r1_python_prepare_all
+src_compile() {
+	edo ${EPYTHON} setup.py build
 }
 
-python_install() {
-	distutils-r1_python_install --init-system=sysvinit_openrc,systemd --distro gentoo
+src_test() {
+	epytest
 }
 
-python_install_all() {
-	keepdir /etc/cloud
+src_install() {
+	edo ${EPYTHON} setup.py install \
+		--prefix="${EPREFIX}/usr" \
+		--root="${D}" \
+		--init-system=sysvinit_openrc,systemd \
+		--distro gentoo
+	python_optimize
 
-	distutils-r1_python_install_all
+	keepdir /etc/cloud
 
 	# installs as non-executable
 	chmod +x "${D}"/etc/init.d/* || die


             reply	other threads:[~2025-03-31 17:07 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-31 17:07 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-05-12 18:07 [gentoo-commits] repo/gentoo:master commit in: app-emulation/cloud-init/ Jakov Smolić
2025-05-11  4:05 Arthur Zamarin
2025-05-11  4:05 Arthur Zamarin
2025-05-10 23:22 Sam James
2025-04-09 13:47 Sam James
2025-04-02  9:28 Arthur Zamarin
2025-04-02  9:28 Arthur Zamarin
2025-04-02  9:28 Arthur Zamarin
2025-04-02  6:05 Sam James
2025-03-31 22:37 Sam James
2025-03-31 17:07 Sam James
2025-03-31 16:37 Sam James
2025-03-31 16:37 Sam James
2025-03-31 16:37 Sam James
2025-03-31 16:37 Sam James
2025-03-31 16:37 Sam James
2024-12-15 14:11 Andreas K. Hüttel
2024-12-15 13:54 Andreas K. Hüttel
2024-12-14 21:49 Andreas K. Hüttel
2024-10-27  6:50 Arthur Zamarin
2024-10-25 22:09 Sam James
2024-10-25 22:09 Sam James
2024-10-25 22:09 Sam James
2024-09-25 13:07 WANG Xuerui
2024-09-25 13:07 WANG Xuerui
2024-07-15  4:35 Sam James
2024-07-15  4:23 Sam James
2024-07-15  4:23 Sam James
2024-07-15  4:23 Sam James
2024-07-15  4:22 Sam James
2024-06-05  7:24 Eray Aslan
2024-04-13 15:34 Matthew Thode
2024-01-20 13:33 Sam James
2023-12-12 19:47 Matthew Thode
2023-02-13 15:39 Matthew Thode
2023-02-06 22:52 Matthew Thode
2023-02-06 22:52 Matthew Thode
2023-01-10 14:37 Michał Górny
2022-12-23 20:11 Kenton Groombridge
2022-07-01  2:11 Matthew Thode
2022-07-01  2:11 Matthew Thode
2022-06-11  5:19 Sam James
2022-06-10  2:45 Sam James
2022-06-07  9:38 Jakov Smolić
2022-06-07  8:38 Jakov Smolić
2022-06-07  1:15 Sam James
2022-06-07  1:15 Sam James
2022-05-20  1:46 Matthew Thode
2022-05-20  1:44 Matthew Thode
2022-04-14 16:18 Matthew Thode
2022-04-12  1:14 Sam James
2022-04-12  1:13 Sam James
2022-04-12  1:13 Sam James
2022-04-10 16:29 Sam James
2022-04-10 16:26 Sam James
2021-11-12  1:43 Sam James
2021-07-05 13:42 Michał Górny
2021-07-05 13:36 Michał Górny
2021-06-13 23:27 Matthew Thode
2020-10-02 20:51 Matthew Thode
2020-08-19 19:34 Sam James
2020-08-17 13:50 Agostino Sarubbo
2020-08-17 10:01 Agostino Sarubbo
2020-02-25 15:02 Agostino Sarubbo
2020-02-25 14:57 Agostino Sarubbo
2020-02-05 14:24 Michał Górny
2018-10-25 16:35 Gilles Dartiguelongue
2018-10-24 13:19 Gilles Dartiguelongue
2018-06-28 19:51 Matt Thode
2018-06-28 19:18 Pacho Ramos
2018-03-17  6:45 Matt Turner
2018-02-13 19:28 Matt Thode
2017-12-03  0:54 Matt Thode
2017-10-24 18:31 Matt Thode
2017-10-24 15:28 Matt Thode
2017-09-06 21:26 Michał Górny
2017-02-07 23:04 Sebastian Pipping
2017-01-17 18:34 Matt Thode
2016-12-23 21:50 Matt Thode
2016-12-23 21:12 Matt Thode
2016-10-07 16:12 Matt Thode
2016-10-06 16:28 Matt Thode
2016-10-06 16:22 Matt Thode
2016-08-21 23:35 Matt Thode
2016-08-20 16:44 Matt Thode
2016-04-28 17:33 Robin H. Johnson
2016-04-25 23:17 Robin H. Johnson
2015-12-25 16:47 Agostino Sarubbo
2015-12-21 12:40 Agostino Sarubbo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1743440745.e41c5c3ca4cb468f2fa85f2c48f08f1541b1d32f.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox