* [RFC] running bpftool build tests in CI @ 2026-08-19 19:59 Alexis Lothoré 2026-08-19 20:46 ` Ihor Solodrai 0 siblings, 1 reply; 5+ messages in thread From: Alexis Lothoré @ 2026-08-19 19:59 UTC (permalink / raw) To: bpf; +Cc: Quentin Monnet, Ihor Solodrai, Daniel Borkmann, Bastien Curutchet Hi, as part of the cleanup/automation effort in the BPF selfests directory, I am now taking a look at test_bpftool_build.sh, which ensures that the different supported ways of building bpftool work correctly. As this script does not really exercize anything at runtime but rather at build time, I'd like to propose to introduce a dedicated step in the CI automation that already builds and run selftests. I have opened two PRs in kernel-patches vmtest ([0]) and libbpf/ci ([1]), hoping I am not confusing which code should go where between the different repositories kept in sync with each other. I have also opened a dummy PR on kernel-patches/bpf ([2], not to be merged) that shows how this test would look like in CI. This really is a RFC, as not all tests from test_bpftool_build.sh are being executed: I suspect those based on .config to be currently broken, but that can be handled as a second step, depending on the chosen direction. Any comment welcome ! Alexis [0] https://github.com/kernel-patches/vmtest/pull/517 [1] https://github.com/libbpf/ci/pull/236 [2] https://github.com/kernel-patches/bpf/pull/13368 -- Alexis Lothoré, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC] running bpftool build tests in CI 2026-08-19 19:59 [RFC] running bpftool build tests in CI Alexis Lothoré @ 2026-08-19 20:46 ` Ihor Solodrai 2026-08-20 8:34 ` Alexis Lothoré 0 siblings, 1 reply; 5+ messages in thread From: Ihor Solodrai @ 2026-08-19 20:46 UTC (permalink / raw) To: Alexis Lothoré, bpf Cc: Quentin Monnet, Daniel Borkmann, Bastien Curutchet, Vineet Gupta, Emil Tsalapatis, Mykyta Yatsenko, Puranjay Mohan, Mykola Lysenko, kernel-ci On 8/19/26 12:59 PM, Alexis Lothoré wrote: > Hi, > as part of the cleanup/automation effort in the BPF selfests directory, > I am now taking a look at test_bpftool_build.sh, which ensures that the > different supported ways of building bpftool work correctly. As this > script does not really exercize anything at runtime but rather at build > time, I'd like to propose to introduce a dedicated step in the CI > automation that already builds and run selftests. I have opened two PRs > in kernel-patches vmtest ([0]) and libbpf/ci ([1]), hoping I am not > confusing which code should go where between the different repositories > kept in sync with each other. I have also opened a dummy PR on > kernel-patches/bpf ([2], not to be merged) that shows how this test > would look like in CI. > > This really is a RFC, as not all tests from test_bpftool_build.sh are > being executed: I suspect those based on .config to be currently broken, > but that can be handled as a second step, depending on the chosen > direction. > > Any comment welcome ! Hi Alexis, thank you for working on this. I am a little confused about what are we trying to test here and why. Maybe you could explain. Some variants of bpftool build are CI-exercised regularly: * selftests/bpf directly depend on bpftool, it's built and is used as part of the main "test_progs*" suite * bpftool has a standalone github mirror with it's own CI pipeline: https://github.com/libbpf/bpftool Looking at test_bpftool_build.sh (written 6y ago btw), it seems to be more of a Makefile infra test than bpftool test specifically. Given how complicated some in-tree tools/selftests/ Makefiles are [1], running infra tests like this would be nice. But then maybe we should develop them beyond test_bpftool_build.sh? I briefly skimmed over the CI PRs you've submitted, and one thing I would say is that we don't want a "bpftool build" test to block the kernel build when it fails. It either needs to be a separate job, or a step that is allowed to fail. Vineet recently did a similar thing, where the gcc-bpf selftests build was interleaved with the kernel build and I nacked it with the same justification [2]. I'm thinking the whole "kernel build" workflow should be refactored into either separate selftests build jobs, or some post processing that looks at what artifacts where built successfully and reports failures. This will provide a little more friendly UI/UX. You're welcome to look into that if you're interested. But that's not directly relevant to the changes you're proposing. [1] https://lore.kernel.org/bpf/20260804170156.1709916-1-nickolay.lysenko@gmail.com/ [2] https://github.com/kernel-patches/vmtest/pull/502#discussion_r3724931742 > > Alexis > > [0] https://github.com/kernel-patches/vmtest/pull/517 > [1] https://github.com/libbpf/ci/pull/236 > [2] https://github.com/kernel-patches/bpf/pull/13368 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC] running bpftool build tests in CI 2026-08-19 20:46 ` Ihor Solodrai @ 2026-08-20 8:34 ` Alexis Lothoré 2026-08-20 20:12 ` Ihor Solodrai 0 siblings, 1 reply; 5+ messages in thread From: Alexis Lothoré @ 2026-08-20 8:34 UTC (permalink / raw) To: Ihor Solodrai, Alexis Lothoré, bpf Cc: Quentin Monnet, Daniel Borkmann, Bastien Curutchet, Vineet Gupta, Emil Tsalapatis, Mykyta Yatsenko, Puranjay Mohan, Mykola Lysenko, kernel-ci Hi Ihor, thanks for the feedback On Wed Aug 19, 2026 at 10:46 PM CEST, Ihor Solodrai wrote: > On 8/19/26 12:59 PM, Alexis Lothoré wrote: >> Hi, >> as part of the cleanup/automation effort in the BPF selfests directory, >> I am now taking a look at test_bpftool_build.sh, which ensures that the >> different supported ways of building bpftool work correctly. As this >> script does not really exercize anything at runtime but rather at build >> time, I'd like to propose to introduce a dedicated step in the CI >> automation that already builds and run selftests. I have opened two PRs >> in kernel-patches vmtest ([0]) and libbpf/ci ([1]), hoping I am not >> confusing which code should go where between the different repositories >> kept in sync with each other. I have also opened a dummy PR on >> kernel-patches/bpf ([2], not to be merged) that shows how this test >> would look like in CI. >> >> This really is a RFC, as not all tests from test_bpftool_build.sh are >> being executed: I suspect those based on .config to be currently broken, >> but that can be handled as a second step, depending on the chosen >> direction. >> >> Any comment welcome ! > > Hi Alexis, thank you for working on this. > > I am a little confused about what are we trying to test here and > why. Maybe you could explain. Sure, I may have been a bit light on this. The test_bpftool_build.sh located in tools/testing/selftests/bpf focuses on the various ways of building bpftool: - through kbuild (eg: make tools/bpf) - by changing make execution dir (eg: make -C tools/bpf/bpftool) - by running the tools/ main makefile (eg: cd tools && make bpf) - by running the bpftool main makefile (eg: cd tools/bpf/bpftool && make) This listing is also cross-tested with output path configuration, testing both O=<output_dir> and OUTPUT=<output_dir>. Will be included in the relevant commits if this RFC goes further in this direction. > Some variants of bpftool build are CI-exercised regularly: > * selftests/bpf directly depend on bpftool, it's built and is used > as part of the main "test_progs*" suite > * bpftool has a standalone github mirror with it's own CI pipeline: > https://github.com/libbpf/bpftool > > Looking at test_bpftool_build.sh (written 6y ago btw), it seems to be > more of a Makefile infra test than bpftool test specifically. > > Given how complicated some in-tree tools/selftests/ Makefiles are [1], > running infra tests like this would be nice. But then maybe we should > develop them beyond test_bpftool_build.sh? > > I briefly skimmed over the CI PRs you've submitted, and one thing I > would say is that we don't want a "bpftool build" test to block the > kernel build when it fails. It either needs to be a separate job, or a > step that is allowed to fail. > > Vineet recently did a similar thing, where the gcc-bpf selftests build > was interleaved with the kernel build and I nacked it with the same > justification [2]. Understood, thanks for the pointers. I see that Vineet came up with a new revision that eventually got merged, moving gcc-bpf as a dedicated job in kernel-build-test.yml instead of kernel-build.yml (and so, a failure on gcc-bpf does not mark kernel build as failed) I guess I can replicate this (also, making sure to add this run_tests toggle, maybe ?). However, I feel like it would not make much sense to have a build and a test part, with artifacts going from the former to the latter, as the build step actually _is_ the test. Also, the only needed artifact to run the build is the kernel source tree (we don't need any vmlinux or .config, at least for now) Would it be ok if I try it this way ? > I'm thinking the whole "kernel build" workflow should be refactored > into either separate selftests build jobs, or some post processing > that looks at what artifacts where built successfully and reports > failures. This will provide a little more friendly UI/UX. You're > welcome to look into that if you're interested. But that's not > directly relevant to the changes you're proposing. Trying to rephrase it to make sure I get your point, the goal would be to have green/red checks specifically on selftests builds, rather than a global green/red check on the macro job "build kernel and selftests" ? Or does it go further than that ? If I get it correctly, yes I'd be glad to try and help on that, as a separate task. Alexis > [1] https://lore.kernel.org/bpf/20260804170156.1709916-1-nickolay.lysenko@gmail.com/ > [2] https://github.com/kernel-patches/vmtest/pull/502#discussion_r3724931742 > > >> >> Alexis >> >> [0] https://github.com/kernel-patches/vmtest/pull/517 >> [1] https://github.com/libbpf/ci/pull/236 >> [2] https://github.com/kernel-patches/bpf/pull/13368 >> -- Alexis Lothoré, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC] running bpftool build tests in CI 2026-08-20 8:34 ` Alexis Lothoré @ 2026-08-20 20:12 ` Ihor Solodrai 2026-08-21 12:32 ` Alexis Lothoré 0 siblings, 1 reply; 5+ messages in thread From: Ihor Solodrai @ 2026-08-20 20:12 UTC (permalink / raw) To: Alexis Lothoré, bpf Cc: Quentin Monnet, Daniel Borkmann, Bastien Curutchet, Vineet Gupta, Emil Tsalapatis, Mykyta Yatsenko, Puranjay Mohan, Mykola Lysenko, kernel-ci On 2026-08-20 1:34 a.m., Alexis Lothoré wrote: > Hi Ihor, > thanks for the feedback > > On Wed Aug 19, 2026 at 10:46 PM CEST, Ihor Solodrai wrote: >> On 8/19/26 12:59 PM, Alexis Lothoré wrote: >>> Hi, >>> as part of the cleanup/automation effort in the BPF selfests directory, >>> I am now taking a look at test_bpftool_build.sh, which ensures that the >>> different supported ways of building bpftool work correctly. As this >>> script does not really exercize anything at runtime but rather at build >>> time, I'd like to propose to introduce a dedicated step in the CI >>> automation that already builds and run selftests. I have opened two PRs >>> in kernel-patches vmtest ([0]) and libbpf/ci ([1]), hoping I am not >>> confusing which code should go where between the different repositories >>> kept in sync with each other. I have also opened a dummy PR on >>> kernel-patches/bpf ([2], not to be merged) that shows how this test >>> would look like in CI. >>> >>> This really is a RFC, as not all tests from test_bpftool_build.sh are >>> being executed: I suspect those based on .config to be currently broken, >>> but that can be handled as a second step, depending on the chosen >>> direction. >>> >>> Any comment welcome ! >> >> Hi Alexis, thank you for working on this. >> >> I am a little confused about what are we trying to test here and >> why. Maybe you could explain. > > Sure, I may have been a bit light on this. The test_bpftool_build.sh > located in tools/testing/selftests/bpf focuses on the various ways of > building bpftool: > - through kbuild (eg: make tools/bpf) > - by changing make execution dir (eg: make -C tools/bpf/bpftool) > - by running the tools/ main makefile (eg: cd tools && make bpf) > - by running the bpftool main makefile (eg: cd tools/bpf/bpftool && > make) > > This listing is also cross-tested with output path configuration, > testing both O=<output_dir> and OUTPUT=<output_dir>. Right. That's what I meant by "it's testing makefile infra". It's checking whether any of the listed ways for initiating the build is broken. I agree that adding tests of this kind to CI is a good idea. My point is it's worth expanding the coverage beyond the bpftool. There was a patchset with fixes for out-of-tree build of selftests recently, for example [1]. The tests would help to catch this earlier. [1] https://lore.kernel.org/bpf/20260728-selftests-bpf_oot-v1-0-05feb15d94db@marliere.net/ > > Will be included in the relevant commits if this RFC goes further in > this direction. > >> Some variants of bpftool build are CI-exercised regularly: >> * selftests/bpf directly depend on bpftool, it's built and is used >> as part of the main "test_progs*" suite >> * bpftool has a standalone github mirror with it's own CI pipeline: >> https://github.com/libbpf/bpftool >> >> Looking at test_bpftool_build.sh (written 6y ago btw), it seems to be >> more of a Makefile infra test than bpftool test specifically. >> >> Given how complicated some in-tree tools/selftests/ Makefiles are [1], >> running infra tests like this would be nice. But then maybe we should >> develop them beyond test_bpftool_build.sh? >> >> I briefly skimmed over the CI PRs you've submitted, and one thing I >> would say is that we don't want a "bpftool build" test to block the >> kernel build when it fails. It either needs to be a separate job, or a >> step that is allowed to fail. >> >> Vineet recently did a similar thing, where the gcc-bpf selftests build >> was interleaved with the kernel build and I nacked it with the same >> justification [2]. > > Understood, thanks for the pointers. I see that Vineet came up with a > new revision that eventually got merged, moving gcc-bpf as a dedicated > job in kernel-build-test.yml instead of kernel-build.yml (and so, a > failure on gcc-bpf does not mark kernel build as failed) I guess I can > replicate this (also, making sure to add this run_tests toggle, maybe > ?). However, I feel like it would not make much sense to have a build > and a test part, with artifacts going from the former to the latter, as > the build step actually _is_ the test. Also, the only needed artifact to > run the build is the kernel source tree (we don't need any vmlinux or > .config, at least for now) > > Would it be ok if I try it this way ? I think if the "bpftool build" test doesn't depend on the kernel build at all, it can be implemented as a new workflow independent of everything. You don't even need new code in libbpf/ci for that, just a new .yaml in kernel-patches/vmtest/.github/workflows/, and maybe a new shell script. And it can probably run on github-provided ubuntu runners. That would be a right way to implement it, given the current state of things IMO. > >> I'm thinking the whole "kernel build" workflow should be refactored >> into either separate selftests build jobs, or some post processing >> that looks at what artifacts where built successfully and reports >> failures. This will provide a little more friendly UI/UX. You're >> welcome to look into that if you're interested. But that's not >> directly relevant to the changes you're proposing. > > Trying to rephrase it to make sure I get your point, the goal would be > to have green/red checks specifically on selftests builds, rather than a > global green/red check on the macro job "build kernel and selftests" ? > Or does it go further than that ? > > If I get it correctly, yes I'd be glad to try and help on that, as a > separate task. Ok, let me expand on this. Thinking out loud below. As you correctly noted, currently we have a kernel build + selftests build clumped together in a single job. I don't know if this was intentional design when it was set up, but it's what's there. The advantage of "build many things in one job" compared to "one job - one artifact" extreme is in the cost of transition between the jobs on the performance side (artifacts upload/download, potentially new runner cold start etc.), and in the complexity of the independent jobs (you have to set up prereqs every time, for example). The disadvantage is in the coupling of the dependencies. For example, currently if selftests/bpf build fails, veristat jobs don't run, because they depend on the combined build job. But they actually *can* run if the kernel build succeeded, but selftests build failed. An argument can be made that if your CI run is red, you're going to dig into the logs anyways, so this is all bikeshedding. But I think a clear "kernel build failed" or "bpftool build failed" signal saves a bit of time for everyone. An idea I have on how we could have the cake and eat it too - avoid the cost while keeping the clear signal - is to keep independent build steps in the combined job as allowed to fail, so the job always succeeds. And then have a separate check for "this artifact is missing - that means the build failed - here is the log", either in a dependent job or as a lightweight "check" job. It's not free though: some cost will remain in the complexity of the combined job, and the checks. Validating this idea requires github .yaml hackery (not a fun activity in general) and experimentation. It looks doable to me, but there might be problems with it I haven't thought about. > > Alexis > >> [1] https://lore.kernel.org/bpf/20260804170156.1709916-1-nickolay.lysenko@gmail.com/ >> [2] https://github.com/kernel-patches/vmtest/pull/502#discussion_r3724931742 >> >> >>> >>> Alexis >>> >>> [0] https://github.com/kernel-patches/vmtest/pull/517 >>> [1] https://github.com/libbpf/ci/pull/236 >>> [2] https://github.com/kernel-patches/bpf/pull/13368 >>> > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC] running bpftool build tests in CI 2026-08-20 20:12 ` Ihor Solodrai @ 2026-08-21 12:32 ` Alexis Lothoré 0 siblings, 0 replies; 5+ messages in thread From: Alexis Lothoré @ 2026-08-21 12:32 UTC (permalink / raw) To: Ihor Solodrai, Alexis Lothoré, bpf Cc: Quentin Monnet, Daniel Borkmann, Bastien Curutchet, Vineet Gupta, Emil Tsalapatis, Mykyta Yatsenko, Puranjay Mohan, Mykola Lysenko, kernel-ci On Thu Aug 20, 2026 at 10:12 PM CEST, Ihor Solodrai wrote: > On 2026-08-20 1:34 a.m., Alexis Lothoré wrote: >> Hi Ihor, >> thanks for the feedback [...] >> Sure, I may have been a bit light on this. The test_bpftool_build.sh >> located in tools/testing/selftests/bpf focuses on the various ways of >> building bpftool: >> - through kbuild (eg: make tools/bpf) >> - by changing make execution dir (eg: make -C tools/bpf/bpftool) >> - by running the tools/ main makefile (eg: cd tools && make bpf) >> - by running the bpftool main makefile (eg: cd tools/bpf/bpftool && >> make) >> >> This listing is also cross-tested with output path configuration, >> testing both O=<output_dir> and OUTPUT=<output_dir>. > > Right. That's what I meant by "it's testing makefile infra". It's > checking whether any of the listed ways for initiating the build is > broken. > > I agree that adding tests of this kind to CI is a good idea. My point > is it's worth expanding the coverage beyond the bpftool. > > There was a patchset with fixes for out-of-tree build of selftests > recently, for example [1]. The tests would help to catch this earlier. > > [1] > https://lore.kernel.org/bpf/20260728-selftests-bpf_oot-v1-0-05feb15d94db@marliere.net/ Ah, ok, thanks for the clarification, now I get how it would help to have the same kind of thing for selftests build (even though I am not clear about the exact list of supported cases aside from the one used in CI, but that can be sorted out later). [...] >> Understood, thanks for the pointers. I see that Vineet came up with a >> new revision that eventually got merged, moving gcc-bpf as a dedicated >> job in kernel-build-test.yml instead of kernel-build.yml (and so, a >> failure on gcc-bpf does not mark kernel build as failed) I guess I can >> replicate this (also, making sure to add this run_tests toggle, maybe >> ?). However, I feel like it would not make much sense to have a build >> and a test part, with artifacts going from the former to the latter, as >> the build step actually _is_ the test. Also, the only needed artifact to >> run the build is the kernel source tree (we don't need any vmlinux or >> .config, at least for now) >> >> Would it be ok if I try it this way ? > > I think if the "bpftool build" test doesn't depend on the kernel build > at all, it can be implemented as a new workflow independent of > everything. You don't even need new code in libbpf/ci for that, just a > new .yaml in kernel-patches/vmtest/.github/workflows/, and maybe a new > shell script. And it can probably run on github-provided ubuntu > runners. That would be a right way to implement it, given the current > state of things IMO. ACK, I'll try to apply all this decoupling from the existing workflows then. >>> I'm thinking the whole "kernel build" workflow should be refactored >>> into either separate selftests build jobs, or some post processing >>> that looks at what artifacts where built successfully and reports >>> failures. This will provide a little more friendly UI/UX. You're >>> welcome to look into that if you're interested. But that's not >>> directly relevant to the changes you're proposing. >> >> Trying to rephrase it to make sure I get your point, the goal would be >> to have green/red checks specifically on selftests builds, rather than a >> global green/red check on the macro job "build kernel and selftests" ? >> Or does it go further than that ? >> >> If I get it correctly, yes I'd be glad to try and help on that, as a >> separate task. > > Ok, let me expand on this. Thinking out loud below. > > As you correctly noted, currently we have a kernel build + selftests > build clumped together in a single job. I don't know if this was > intentional design when it was set up, but it's what's there. > > The advantage of "build many things in one job" compared to "one job - > one artifact" extreme is in the cost of transition between the jobs on > the performance side (artifacts upload/download, potentially new > runner cold start etc.), and in the complexity of the independent jobs > (you have to set up prereqs every time, for example). > > The disadvantage is in the coupling of the dependencies. For example, > currently if selftests/bpf build fails, veristat jobs don't run, > because they depend on the combined build job. But they actually *can* > run if the kernel build succeeded, but selftests build failed. > > An argument can be made that if your CI run is red, you're going to > dig into the logs anyways, so this is all bikeshedding. But I think a > clear "kernel build failed" or "bpftool build failed" signal saves a > bit of time for everyone. > > An idea I have on how we could have the cake and eat it too - avoid > the cost while keeping the clear signal - is to keep independent build > steps in the combined job as allowed to fail, so the job always > succeeds. And then have a separate check for "this artifact is missing > - that means the build failed - here is the log", either in a > dependent job or as a lightweight "check" job. Thanks, this clarifies a lot the direction to aim for. I now grasp the expected benefit from this potential rework. > It's not free though: some cost will remain in the complexity of the > combined job, and the checks. > > Validating this idea requires github .yaml hackery (not a fun activity > in general) and experimentation. It looks doable to me, but there > might be problems with it I haven't thought about. So as stated before, unless someone picks it up before I do so, I can take a look at this and try to tweak those workflows to reach the improvements mentioned above, aiming to get clearer signals about what is failing, _while_ trying to keep complexity and CI execution time reasonable. I am definitely not an expert in github automation, so that will possibly lead to a few back and forths and experiments, but that will be an opportunity to learn :) I also have to state that I am still expected to make progress on the selftests conversion/cleanup though, but I can put this item right below in my todo list, as this is pretty related. -- Alexis Lothoré, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-21 12:32 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-19 19:59 [RFC] running bpftool build tests in CI Alexis Lothoré 2026-08-19 20:46 ` Ihor Solodrai 2026-08-20 8:34 ` Alexis Lothoré 2026-08-20 20:12 ` Ihor Solodrai 2026-08-21 12:32 ` Alexis Lothoré
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox