Skip to content

[ci] Add Debian testing (with builtin_llvm=OFF) - #23372

Draft
ferdymercury wants to merge 6 commits into
root-project:masterfrom
ferdymercury:patch-24
Draft

ferdymercury wants to merge 6 commits into
root-project:masterfrom
ferdymercury:patch-24

Conversation

@ferdymercury

@ferdymercury ferdymercury commented Sep 15, 2026 •

Copy link
Copy Markdown
Collaborator

This Pull request:

Changes or fixes:

Fedora CI has rawhide, So Debian CI has testing for analogy. But no need to merge this, it can stay as a draft PR for individual testing of new packages. New package to test will be libmathtext-dev.

It's like Debian13, but tests the new libcivetweb-dev package, so builtin_civetweb can be OFF. fyi @linev confirmed that new Debian civetweb will be compatible.

First results not too bad: only 13 tests failing with builtin_llvm=OFF

Merge first

Checklist:

  • tested changes locally
  • updated the docs (if necessary)

@ferdymercury

ferdymercury commented Sep 15, 2026 •

Copy link
Copy Markdown
Collaborator Author

@alja @osschar maybe you know why debiantesting CI build fails with a heap error? https://github.com/root-project/root/actions/runs/34956369673/job/104339538592?pr=23372

@ferdymercury ferdymercury added the skip code analysis Skip the code analysis CI steps for this PR, including verifying clang-formatting and running Ruff. label Sep 15, 2026
@ferdymercury ferdymercury reopened this Sep 16, 2026
@github-actions

github-actions Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Test Results

    23 files      23 suites   4d 3h 11m 36s ⏱️
 3 889 tests  3 884 ✅ 0 💤 5 ❌
79 405 runs  79 400 ✅ 0 💤 5 ❌

For more details on these failures, see this check.

Results for commit 86ff218.

♻️ This comment has been updated with latest results.

@ferdymercury
ferdymercury force-pushed the patch-24 branch 2 times, most recently from b4684d8 to 9af027a Compare September 16, 2026 07:34
@ferdymercury ferdymercury changed the title [ci] Add Debian testing [ci] Add Debian testing (with builtin_llvm=OFF) Sep 16, 2026
@ferdymercury
ferdymercury marked this pull request as ready for review September 16, 2026 08:49
@ferdymercury
ferdymercury marked this pull request as draft September 22, 2026 07:34
@ferdymercury

Copy link
Copy Markdown
Collaborator Author

@guitargeek in TMVA-SOFIE I see:

/usr/include/c++/16/bits/stl_bvector.h:1158: constexpr std::vector<bool, _Alloc>::reference std::vector<bool, _Alloc>::operator[](size_type) [with _Alloc = std::allocator<bool>; reference = std::vector<bool>::reference; size_type = long unsigned int]: Assertion '__n < this->size()' failed.

Comment thread interpreter/CMakeLists.txt Resolved
@ferdymercury
ferdymercury force-pushed the patch-24 branch 2 times, most recently from 020cfd0 to 106385b Compare October 2, 2026 13:12
It's like Debian13, but tests the new libcivetweb-dev package, so builtin_civetweb can be OFF.

[ci] disable pyspark on Debiantesting

CMake Error at cmake/modules/FindPySpark.cmake:34 (message):
    Currently, there are no Spark versions that support Java version greater
    than 21.  Found Java version 25.0.4.1.
  Call Stack (most recent call first):
    cmake/modules/SearchInstalledSoftware.cmake:1259 (find_package)
    CMakeLists.txt:131 (include)
rror: /github/home/ROOT-CI/src/roottest/root/tree/selectorreader/runCollections.C:169:37: error: invalid operands to binary expression ('iterator' (aka '__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > *, vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >') and 'iterator')
     for (std::string const &treeName : trees)
                                      ^
  /github/home/ROOT-CI/build/include/TString.h:56:9: note: candidate function not viable: no known conversion from 'iterator' (aka '__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > *, vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >') to 'const TString' for 1st argument
  Bool_t  operator==(const TString &s1, const char *s2);
          ^          ~~~~~~~~~~~~~~~~~
do not use debug build type

TODO: proper fix would be to skip adding this flag into Cling based on ifdef buildtype

Unknown command line argument '-optimize-regalloc=0'. Try: 'cling (LLVM option parsing) --help'2026-09-30T15:00:08.7528489Z cling (LLVM option parsing): Did you mean '--vp-static-alloc=0'?
@ferdymercury

Copy link
Copy Markdown
Collaborator Author

@aaronj0 it seems that clang is not found properly in CppInteropTests with builtin_llvm=OFF, see https://github.com/root-project/root/actions/runs/38522124953/job/115713996142?pr=23372

2026-10-14T07:07:24.1588769Z sh: 1: clang: not found
2026-10-14T07:07:24.1588983Z ERROR in cling::CIFactory::createCI():
2026-10-14T07:07:24.1589410Z   resource directory /github/home/ROOT-CI/build/interpreter/CppInterOp/unittests/CppInterOp/bin/lib/clang/22 not found!

@ferdymercury
ferdymercury marked this pull request as ready for review October 14, 2026 08:50
@hahnjo

hahnjo commented Nov 5, 2026

Copy link
Copy Markdown
Member

As discussed several times, across several PRs, I'm against adding builtin_llvm=OFF to the CI - it will break on every LLVM upgrade and I don't want to advertise it as a recommended build configuration. I propose to close this PR and stop discussing this topic.

@hahnjo hahnjo added the in:CI label Nov 5, 2026
@ferdymercury

Copy link
Copy Markdown
Collaborator Author

I propose to close this PR

Would it be ok to add to the CI Debian testing with builtin_llvm=ON ? If yes, I can amend the PR.

Just like there is mac-beta, one could have debian-beta.

@hahnjo

hahnjo commented Nov 5, 2026

Copy link
Copy Markdown
Member

I wouldn't mind, but we already have mac-beta and Fedora Rawhide, and we're testing Ubuntu versions before they are released. I'm not sure how much we gain by adding yet another rolling release (except longer CI run times)

@guitargeek

Copy link
Copy Markdown
Contributor

Personally, I would refrain from adding any additional configurations to the CI, because it's already quite heavy... But given that Ubuntu is based on Debian testing, maybe we can swap out the latest Ubuntu non-LTS release for Debian testing, at least on master? But so far, the policy has been to always change all supported releases in the PR builds according to @dpiparo. This becomes increasingly unsustainable though, and IMHO also increasingly unnecessary as ROOT stabilized and rarely breaks on one specific Linux platform only. Breakages mostly relate to compiler, Python, or standard library versions.

@guitargeek

Copy link
Copy Markdown
Contributor

As discussed several times, across several PRs, I'm against adding builtin_llvm=OFF to the CI - it will break on every LLVM upgrade and I don't want to advertise it as a recommended build configuration. I propose to close this PR and stop discussing this topic.

Just for fun, here the AI-collected overview on where these several PRs are:


hahnjo on builtin_llvm=OFF in the CI: references

Collected 2026-11-05, starting from
root#23372 (comment):

As discussed several times, across several PRs, I'm against adding
builtin_llvm=OFF to the CI - it will break on every LLVM upgrade and I don't
want to advertise it as a recommended build configuration. I propose to close
this PR and stop discussing this topic.

Explicitly against builtin_llvm=OFF in the CI

Date Thread What hahnjo said
2026-06-08/09 root-ci-images#131 "packages needed for building with builtin_llvm=OFF" The main discussion, and the one they later point back to. First comment: "this is bound to break again with the next upgrade". Reply to guitargeek's question: "I don't want us to 'officially' support building against a system-default LLVM. I have expressed this opinion before. I don't want to chase bugs that arise due to this combination, and that may or may not be relevant to Conda. [...] And there will ~always be an 'upgrade incoming'"; argues a Conda nightly build is what is really needed. Review: "Let me make it explicit: I don't think this is a good idea."
2026-08-18 root#23068 "[interpreter] fix cmake configuration with system-llvm on ubu26" "This has been discussed multiple times, my reasoning against adding a special build are documented here: root-ci-images#131"
2026-11-05 root#23372 "[ci] Add Debian testing (with builtin_llvm=OFF)" The comment quoted above.

Related PRs in the same chain of events, where hahnjo did not argue the CI point:

  • root#22513 "[llvm] allow building
    with builtin_llvm=OFF in Ubuntu26" is "the other PR" hahnjo refers to in
    root-ci-images#131. dpiparo suggested a special build there and
    noted
    that it would cease to function once LLVM 22 is merged. hahnjo only left an
    inline comment
    on the find_package change.
  • root#22584 "[ci] add special
    system-llvm ubu26 build" is ferdymercury's CI PR from June 2026, depending on
    root-ci-images#131. Closed without any comment from hahnjo.
  • root#22544 "[interpreter] Set
    LLVM_DIR for builtin_llvm" is hahnjo's own fix that came out of the
    root-ci-images#131 discussion (standard find_package variables instead of
    HINTS).

The underlying stance: not an officially supported configuration

  • root#18387
    (2025-04-14): "builtin_llvm=OFF and builtin_clang=OFF are not officially
    supported configurations, they are maintained on a best-effort basis at the
    moment. The user will have to compile Clang from our sources anyway to get our
    patches. For that reason, we must not add downstream patches just for this."
  • root#18386
    (2025-04-14, "[CMake] Fixes and improvements for buildng with
    builtin_clang=OFF"): "the default, and only supported configuration for
    production use as far as I'm concerned, is builtin_llvm=ON builtin_clang=ON."
    Follow-up:
    "'best effort' doesn't mean that I don't care, and it doesn't mean that the use
    cases can be broken at will."
  • root#18446
    (2025-04-19, revert of [CMake] Fixes and improvements for buildng with builtin_clang=OFF #18386) and
    root#18640
    (2025-05-07, 6.36 backport) continue the same argument, mostly about build-system
    changes late in the release cycle.
  • root#11146
    (2022-08-08), earliest instance found: "I don't think it's feasible to write
    CMake detection logic for every single patch that we distribute on top of LLVM
    and Clang."
  • root#15696
    (2024-07-19, LLVM 18 upgrade): system Clang still requires downstream patches;
    their number shrinks with every upgrade.
  • root#19265
    (2025-07-03, "ROOT package in Debian/Ubuntu"): no patches for LLVM, only for
    Clang, but a specific LLVM major version is required.

What hahnjo proposes instead

  • root#23160
    (2026-08-31): "I don't see the point of adding more downstream patches for this
    case. I've said it before, the problem should be fixed 'properly' by making it
    possible to link against a provided libLLVM.so. We know how to do that:
    [rootcling] Remove llvm::cl dependency by using ROOT's optparse #20903"
  • root#20903 "[rootcling] Remove
    llvm::cl dependency by using ROOT's optparse" (January 2026, long exchange
    with vgvassilev): wants linking against the distribution's libLLVM.so to be
    possible if the user asks for it, while builtin_llvm=ON stays the default and
    unchanged. Start at
    this comment;
    the key statement is
    here:
    "the plan is not to make this the default build mode".
    Status as of 2026-09-01:
    first step only, and not moving forward.
  • root#17698
    (2025-02-17, "Allow building ROOT using the Clang shared library"): the two
    technical blockers (-W option clash with libLLVM.so, clang-cpp
    dependencies).
  • root#12156
    (2023-08-11, "CommandLine Error: Option 'W' registered more than once!"): the
    bug that [rootcling] Remove llvm::cl dependency by using ROOT's optparse #20903 is meant to fix; advice at the time was to stay with
    builtin_clang=ON.

Search coverage

Searched hahnjo's issue comments, review bodies and inline review comments across
the root-project GitHub org for builtin_llvm, builtin_clang, and
"external/system LLVM". Offline and chat discussions are not covered; root#18386
and root#16814 both refer to such discussions.

@ferdymercury

Copy link
Copy Markdown
Collaborator Author

I'm not sure how much we gain

There are new packages in debian unstable (civetweb, mathtext) that are not in debian stable where one can switch -Dbuiltin_civetweb=OFF etc when building ROOT. By testing those in advance, we can report any potential bugs. Once they land in stable, is too late to fix them, they only get security fixes, not "Config.cmake" fixes.

maybe we can swap out the latest Ubuntu non-LTS release for Debian testing, at least on master

or have one of the non-LTS as -Dminimal=ON ?

(except longer CI run times)

Alternative idea: have a "os-testing" GitHub label. When it is added by the user (or randomly 1 out of 10), we then also run all beta-versions of the OS ?

@guitargeek

guitargeek commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

The problem is that there are too many constraints and factors when designing the CI matrix (compiler, Python, C++ standard, OS, march_native, architecture, builtin configuration, etc)... If we continue to make ad-hoc decisions to justify adding one more configuration, we'll never converge to a global optimum.

Right now it's on the table of Danilo to propose a sustainable, coherent, and high-coverage CI matrix, but I hope we can converge on this together at the next internal ROOT retreat at CERN the end of November (@ferdymercury if you have time to come 🙂, join in). So I think we can't and shouldn't rush to a decision here in this PR thread.

PS: I feel your pain though, @ferdymercury 😆 I was dealing for the last week with the fallout of 6.42 for Nix packaging, and NixOS in the CI would have saved me a lot of work 🙂

@ferdymercury

Copy link
Copy Markdown
Collaborator Author

Sure, I totally agree that there is no need to rush.

If it does not bother, I will keep the PR open, and will rerun it once every two months or so, to get an idea. I have now packaged CDT and BVH into Debian (pending upload), so next thing I will try is to switch builtin_cdt and builtin_bvh to OFF to see if all tests pass.

Thanks for the invite, however I am already busy with a one week conference this November (IEEE NSS/MIC) :)
Cheers!

@ferdymercury
ferdymercury marked this pull request as draft November 5, 2026 10:14

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

in:CI pr:squash on merge skip code analysis Skip the code analysis CI steps for this PR, including verifying clang-formatting and running Ruff.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants