ci: Enable experimental kernel stuff in most CI tasks #33824

pull maflcko wants to merge 9 commits into bitcoin:master from maflcko:2511-ci-dev-mode-kernel changing 9 files +40 −19
  1. maflcko commented at 11:15 am on November 8, 2025: member

    Most of the CI tasks have a long list of stuff that they enable. This makes it hard to see what each CI task is actually running.

    Also, most of the CI tasks should probably mimic the dev-mode CMake preset and run on as much stuff as possible. Usually, changing the dev-mode comes with changing those CI tasks as well in the same commit, which is verbose.

    Fix both issues, by basing most CI tasks on the dev-mode. In the future, this makes it easier to change the dev-mode in a single place. If CI tasks explicitly disable something, it will be listed explicitly in them.

    As a side-effect this will enable the kernel stuff for some CI task that did not have it enabled, which seems desirable.

  2. DrahtBot renamed this:
    ci: Enable experimental kernel stuff in most CI tasks
    ci: Enable experimental kernel stuff in most CI tasks
    on Nov 8, 2025
  3. DrahtBot added the label Tests on Nov 8, 2025
  4. DrahtBot commented at 11:16 am on November 8, 2025: contributor

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/33824.

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Concept ACK stickies-v

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #32748 (fees: prevent redundant estimates flushes by ismaelsadeeq)
    • #28792 (Embed default ASMap as binary dump header file by fjahr)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

  5. maflcko force-pushed on Nov 8, 2025
  6. DrahtBot added the label CI failed on Nov 8, 2025
  7. DrahtBot commented at 11:24 am on November 8, 2025: contributor

    🚧 At least one of the CI tasks failed. Task TSan: https://github.com/bitcoin/bitcoin/actions/runs/19192288386/job/54868372095 LLM reason (✨ experimental): Compilation failed in the bitcoin-chainstate module due to missing std::exception_ptr and related exception utilities in the standard library (libc++), causing multiple compile errors.

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

  8. maflcko marked this as a draft on Nov 8, 2025
  9. maflcko commented at 11:35 am on November 8, 2025: member
    Hmm. Looks like this uncovered some errors. I’ll circle back next week.
  10. TheCharlatan commented at 7:22 pm on November 8, 2025: contributor

    Thanks for going through this!

    My guess is the failure in the previous releases job is gcc11’s limited implementation of std::ranges. Not sure what to do about that to be honest. Maybe we can add a macro guard for those test cases?

    The test case producing the ubsan error should just be deleted in my opinion. It does not add anything in terms of coverage. How about:

     0diff --git a/src/test/kernel/test_kernel.cpp b/src/test/kernel/test_kernel.cpp
     1index d9875ee16e..b170ea182d 100644
     2--- a/src/test/kernel/test_kernel.cpp
     3+++ b/src/test/kernel/test_kernel.cpp
     4@@ -583,0 +584 @@ BOOST_AUTO_TEST_CASE(btck_block)
     5+    BOOST_CHECK_THROW(Block{hex_string_to_byte_vec("012300")}, std::runtime_error);
     6@@ -716,11 +716,0 @@ void chainman_mainnet_validation_test(TestDirectory& test_directory)
     7-    {
     8-        // Process an invalid block
     9-        auto raw_block = hex_string_to_byte_vec("012300");
    10-        BOOST_CHECK_THROW(Block{raw_block}, std::runtime_error);
    11-    }
    12-    {
    13-        // Process an empty block
    14-        auto raw_block = hex_string_to_byte_vec("");
    15-        BOOST_CHECK_THROW(Block{raw_block}, std::runtime_error);
    16-    }
    17-
    

    On a related note, there is some ongoing work at improving the test binary. Initially it was kept isolated from the rest of the test framework to demonstrate its stand-alone capabilities. I don’t think that is beneficial anymore - we should just use our existing test utilities. There is also an attempt at standardizing the test vectors such that other bindings implementations can re-use them.

  11. ci: Enable experimental kernel stuff in ASan task
    Base the task on --preset=dev-mode to ensure maximal coverage and add
    the following:
    
       bitcoin-chainstate (experimental) ... ON
       libbitcoinkernel (experimental) ..... ON
       kernel-test (experimental) .......... ON
    e6eb4ed5be
  12. ci: Enable experimental kernel stuff in MSan task
    Base the task on --preset=dev-mode to ensure maximal coverage and add
    the following:
    
       bitcoin-chainstate (experimental) ... ON
       libbitcoinkernel (experimental) ..... ON
       kernel-test (experimental) .......... ON
    
    The GUI remains disabled explicitly.
    26d9fe9c94
  13. ci: Enable experimental kernel stuff in G++-11 task (previous releases)
    Base the task on --preset=dev-mode to ensure maximal coverage and add
    the following:
    
       bitcoin-chainstate (experimental) ... ON
       libbitcoinkernel (experimental) ..... ON
       kernel-test (experimental) .......... ON
    
    Also, shorten the name, for a less cluttered web view.
    f73e80d6e3
  14. ci: Enable experimental kernel stuff in TSan task
    Base the task on --preset=dev-mode to ensure maximal coverage and add
    the following:
    
       bitcoin-chainstate (experimental) ... ON
       libbitcoinkernel (experimental) ..... ON
       kernel-test (experimental) .......... ON
    
    The GUI remains disabled explicitly.
    578746d1c6
  15. ci: Enable experimental kernel stuff in valgrind task
    Base the task on --preset=dev-mode to ensure maximal coverage and add
    the following:
    
       bitcoin-chainstate (experimental) ... ON
       libbitcoinkernel (experimental) ..... ON
       kernel-test (experimental) .......... ON
    
    The GUI and USDT remain disabled explicitly.
    fae6c3ff86
  16. ci: Enable experimental kernel stuff in s390x task
    Base the task on --preset=dev-mode to ensure maximal coverage and add
    the following:
    
       bitcoin-chainstate (experimental) ... ON
       libbitcoinkernel (experimental) ..... ON
       kernel-test (experimental) .......... ON
    4b4cafb0d3
  17. ci: [refactor] Base nowallet task on --preset=dev-mode
    This makes it clearer what pieces are disabled over the full dev-mode.
    
    The wallet remains explicitly disabled.
    703d154c59
  18. ci: [refactor] Use --preset=dev-mode in mac_native task
    Also shorten the name, because it is usually truncated anyway in the web
    view.
    
    USDT remains disabled explicitly.
    df4ba5256f
  19. stickies-v commented at 9:48 am on November 10, 2025: contributor
    Concept ACK for standardizing CI workflows around dev-mode and for increasing kernel coverage. CI runtimes seem acceptable.
  20. maflcko commented at 10:16 am on November 10, 2025: member

    The test case producing the ubsan error should just be deleted in my opinion. It does not add anything in terms of coverage. How about:

    I was thinking about permitting nullptr when size=0, or even just permitting nullptr for any size, when the data pointer is followed by a size?

    I understand the nonnull check can in theory be useful in low-level environments where a nullptr-deref would not be detected as access violation, but there are probably more users using modern systems that may want to be able to handle zero-size spans properly at runtime without unnecessarily crashing?

  21. gcc 12 3baa3f0630
  22. maflcko force-pushed on Nov 10, 2025
  23. TheCharlatan commented at 11:39 am on November 10, 2025: contributor

    I was thinking about permitting nullptr when size=0, or even just permitting nullptr for any size, when the data pointer is followed by a size?

    Afaict our de-serialization can handle this case (nullptr when size=0) correctly, but fails when passed a nullptr with non-zero size. Maybe a null check in btck_block_create(...) would be better? What do you think?


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2025-11-12 21:13 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me