From: "Daniel P. Berrangé" <berrange@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
"Cleber Rosa" <crosa@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Hanna Reitz" <hreitz@redhat.com>,
"Thomas Huth" <thuth@redhat.com>, "Kevin Wolf" <kwolf@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Beraldo Leal" <bleal@redhat.com>
Subject: Re: [RFC PATCH 0/9] tests: run python tests under the build/tests/venv environment
Date: Fri, 13 May 2022 09:35:23 +0100 [thread overview]
Message-ID: <Yn4YS1FpgtCZMMx6@redhat.com> (raw)
In-Reply-To: <20220513000609.197906-1-jsnow@redhat.com>
On Thu, May 12, 2022 at 08:06:00PM -0400, John Snow wrote:
> RFC: This is a very early, crude attempt at switching over to an
> external Python package dependency for QMP. This series does not
> actually make the switch in and of itself, but instead just switches to
> the paradigm of using a venv in general to install the QEMU python
> packages instead of using PYTHONPATH to load them from the source tree.
>
> (By installing the package, we can process dependencies.)
>
> I'm sending it to the list so I can show you some of what's ugly so far
> and my notes on how I might make it less ugly.
>
> (1) This doesn't trigger venv creation *from* iotests, it merely prints
> a friendly error message if "make check-venv" has not been run
> first. Not the greatest.
So if we run the sequence
mkdir build
cd build
../configure
make
./tests/qemu-iotests/check 001
It won't work anymore, until we 'make check-venv' (or simply
'make check') ?
I'm somewhat inclined to say that venv should be created
unconditionally by default. ie a plain 'make' should always
everything needed to be able to invoke the tests directly.
> (2) This isn't acceptable for SRPM builds, because it uses PyPI to fetch
> packages just-in-time. My thought is to use an environment variable like
> QEMU_CHECK_NO_INTERNET that changes the behavior of the venv setup
> process. We can use "--system-site-packages" as an argument to venv
> creation and "--no-index" as an argument to pip installation to achieve
> good behavior in SRPM building scenarios. It'd be up to the spec-writer
> to opt into that behavior.
I think I'd expect --system-site-packages to be the default behaviour.
We expect QEMU to be compatible with the packages available in the
distros that we're targetting. So if the dev has the python packages
installed from their distro, we should be using them preferentially.
This is similar to how we bundle slirp/capstone/etc, but will
preferentially use the distro version if it is available.
> (3) Using one venv for *all* tests means that avocado comes as a pre-req
> for iotests -- which adds avocado as a BuildRequires for the Fedora
> SRPM. That's probably not ideal. It may be better to model the test venv
> as something that can be created in stages: the "core" venv first, and
> the avocado packages only when needed.
>
> You can see in these patches that I wasn't really sure how to tie the
> check-venv step as a dependency of 'check' or 'check-block', and it
> winds up feeling kind of hacky and fragile as a result.
See above, I'm inclined to say the venv should be created unconditionally
> (Patches 6 and 7 feel particularly fishy.)
>
> What I think I would like to do is replace the makefile logic with a
> Python bootstrapping script. This will allow me to add in environment
> variable logic to accommodate #2 pretty easily. It will also allow
> iotests to call into the bootstrap script whenever it detects the venv
> isn't set up, which it needed to do anyway in order to print a
> user-friendly error message. Lastly, it will make it easier to create a
> "tiered" venv that layers in the avocado dependencies only as-needed,
> which avoids us having to bloat the SRPM build dependencies.
The tests is an area where we still have too much taking place in
Makefiles, as opposed to meson. Can we put a rule in
tests/meson.build to trigger the ven creation ? Gets us closer to
being able to run ninja without using make as a wrapper.
> In the end, I think that approach will:
>
> - Allow us to run iotests without having to run a manual prep step
> - Keep additional SRPM deps to a minimum
> - Keep makefile hacks to a minimum
>
> The only downside I am really frowning at is that I will have to
> replicate some "update the venv if it's outdated" logic that is usually
> handled by the Make system in the venv bootstrapper. Still, I think it's
> probably the only way to hit all of the requirements here without trying
> to concoct a fairly complex Makefile.
The only reason we need to update the venv is if a python dependancy
changes right ? If we're using system packages by default that's
a non-issue. If we're using the python-qemu.qmp as a git submodule,
we presumably only need to re-create the venv if we see that the
git submodule hash has changed. IOW, we don't need to worry about
tracking whether individual python deps are outdated.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2022-05-13 8:41 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-13 0:06 [RFC PATCH 0/9] tests: run python tests under the build/tests/venv environment John Snow
2022-05-13 0:06 ` [RFC PATCH 1/9] python: update for mypy 0.950 John Snow
2022-05-13 8:42 ` Paolo Bonzini
2022-05-13 14:09 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 2/9] tests: add "TESTS_PYTHON" variable to Makefile John Snow
2022-05-13 8:23 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 3/9] tests: install "qemu" namespace package into venv John Snow
2022-05-13 8:26 ` Paolo Bonzini
2022-05-13 14:01 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 4/9] tests: silence pip upgrade warnings during venv creation John Snow
2022-05-13 8:27 ` Paolo Bonzini
2022-05-13 14:02 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 5/9] tests: use tests/venv to run basevm.py-based scripts John Snow
2022-05-13 8:33 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 6/9] tests: add check-venv as a dependency of check and check-block John Snow
2022-05-13 8:41 ` Paolo Bonzini
2022-05-13 14:12 ` John Snow
2022-05-13 15:34 ` Paolo Bonzini
2022-05-13 16:08 ` John Snow
2022-05-13 0:06 ` [RFC PATCH 7/9] tests: add check-venv to build-tcg-disabled CI recipe John Snow
2022-05-13 8:41 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 8/9] iotests: fix source directory location John Snow
2022-05-13 8:35 ` Paolo Bonzini
2022-05-13 0:06 ` [RFC PATCH 9/9] iotests: use tests/venv for running tests John Snow
2022-05-13 8:38 ` Paolo Bonzini
2022-05-13 14:38 ` John Snow
2022-05-13 15:33 ` Paolo Bonzini
2022-05-13 16:00 ` John Snow
2022-05-14 15:55 ` John Snow
2022-05-16 7:41 ` Paolo Bonzini
2022-05-17 23:51 ` John Snow
2022-05-18 10:38 ` Paolo Bonzini
2022-05-13 8:35 ` Daniel P. Berrangé [this message]
2022-05-13 9:45 ` [RFC PATCH 0/9] tests: run python tests under the build/tests/venv environment Paolo Bonzini
2022-05-13 10:29 ` Daniel P. Berrangé
2022-05-13 15:55 ` John Snow
2022-05-13 16:07 ` Daniel P. Berrangé
2022-05-13 16:49 ` Paolo Bonzini
2022-05-13 19:09 ` John Snow
2022-05-13 12:57 ` Kevin Wolf
2022-05-13 15:25 ` John Snow
2022-05-13 10:20 ` Paolo Bonzini
2022-05-13 15:39 ` John Snow
2022-05-13 16:07 ` Paolo Bonzini
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=Yn4YS1FpgtCZMMx6@redhat.com \
--to=berrange@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=bleal@redhat.com \
--cc=crosa@redhat.com \
--cc=f4bug@amsat.org \
--cc=hreitz@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
/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;
as well as URLs for NNTP newsgroup(s).