
On Fri, Feb 25, 2022 at 03:02:49AM -0800, Andrea Bolognani wrote:
On Fri, Feb 25, 2022 at 11:31:39AM +0100, Erik Skultety wrote:
On Thu, Feb 24, 2022 at 06:49:29AM -0800, Andrea Bolognani wrote:
I'm not entirely convinced that requiring the use of lcitool for this task is necessarily the best idea though. Ideally, it should be possible for developers to reproduce and debug CI failures locally without having to clone a second repository. It's fine to require lcitool for tasks that are performed by maintainers, but casual contributors should find all they need in libvirt.git itself.
Unless they also want to test with VMs as well in which case lcitool is highly recommended. The thing is that right now ci/helper wraps the Makefile. Let's say you (or someone else) replaces it with a python equivalent, I don't think that the number of contributors suddenly starting to use it will differ much compared to the situation right now, but maybe I'm wrong :). My motivation to add the support to lcitool is simple - right now there's an RFC on adopting some infrastructure in order to run TCK-based functional tests as part of GitLab. That's just the first stage, ultimately we want developers to be able to run the same test suite locally without the need to wait for gitlab and since the current design of the above is using nested virt, it is an achievable goal. There was also a suggestion to adopt the Avocado framework for a new test framework which would be largely based on TCK [1]. Now, let's get to the point I'm trying to make :) - my expectation/vision is that both the remote and local functional test executions will revolve around lcitool and so eventually with the adoption of *some* framework it is going to become a requirement that libvirt developers do perform functional testing before submitting a patch series. With that said, it makes more sense in my mind to focus on adding the container runtime support to lcitool in order to move towards the bigger goal and have everything consolidated in a single place.
Alright, that's a pretty solid argument. And even if we ultimately decide that we don't want to require using lcitool, once we have a project-agnostic Python implementation of this logic it would be reasonably straightforward to turn it into a standalone tool similar to the current ci/helper, so we have an exit strategy.
Another thing that has been bothering me is that neither 'ci/helper build' nor 'lcitool build' will actually perform the exact same build steps as the corresponding CI job, making them only mildly effective as debugging tools for CI failures. And of course each of these build recipes is maintained separately, so we have three similar but not quite identical scripts floating around.
Yes, but on its own, I think that is a problem which can be solved separately.
Agreed that the two tasks are not necessarily depending on each other, but there's significant overlap. I think it makes sense to rationalize how the build steps for a project are defined and maintained as part of adding "build in a local container" support to lcitool.
Do you have any high-level concerns about the ci/build approach I vaguely described? The finer details are of course far from being set in stone, but I think the overall idea is solid and we should aim for it being implemented as we evolve our CI tooling.
No, I think that was a solid proposal, I would probably think of along those lines as well had I ever come to that idea myself :). Having each repo define their own build script which can be consumed both during local test executions and copied to the Dockerfile for a gitlab job to consume makes complete sense. Top it off with something like 'lcitool container --script <path_to_build_script>' and I think we have a solid ground for future work. Erik