Skip to content

Conversation

@ajtowns
Copy link

@ajtowns ajtowns commented Dec 9, 2025

Trivial merge conflict with deleted file resolved.

MarcoFalke and others added 30 commits September 3, 2025 16:14
Also, use update-alternatives to avoid having to manually specify
clang-${APT_LLVM_V} or llvm-symbolizer-${APT_LLVM_V} everywhere.

Github-Pull: bitcoin#32999
Rebased-From: fad040a
Qt is disabled, as the build is now taking a very long time.

Github-Pull: bitcoin#33099
Rebased-From: b09af2c
Github-Pull: bitcoin#33258
Rebased-From: 4cf0ae4
7c6be9a doc: update release notes for 29.x (fanquake)
ea40fa9 ci: use LLVM 21 (fanquake)
5513516 ci: remove DEBUG_LOCKORDER from TSAN job (fanquake)
f9939cd ci: instrument libc++ in TSAN job (fanquake)
0fba5ae ci: allow libc++ instrumentation other than msan (fanquake)
10cbf22 ci: Use APT_LLVM_V in msan task (MarcoFalke)

Pull request description:

  Backports:
  * bitcoin#32999
  * bitcoin#33099 (added `ninja-build`)
  * bitcoin#33258

ACKs for top commit:
  marcofleon:
    ACK 7c6be9a, looks okay to me

Tree-SHA512: 928882d505ed8101a6d4123947252a84d40bd350383408926b5c37aed56dc3359067d1d14c443c51351a6958a8dd9e141bb7713665295ff1f1ad86c5f8a36df0
The `SHA256AutoDetect` return output is used, among other use cases, to
name benchmarks. Using a comma breaks the CSV output.

This change replaces the comma with a semicolon, which fixes the issue.

Github-Pull: bitcoin#33340
Rebased-From: 790b440
Rather than trying to match the apt installed clang version, which is
prone to intermittent issues. i.e bitcoin#33345.

Github-Pull: bitcoin#33364
Rebased-From: b736052
Since bitcoin#29412, we have not allowed mutated blocks to continue
being processed immediately the block is received, but this
is only done for the legacy BLOCK message.

Extend these checks as belt-and-suspenders to not allow
similar mutation strategies to affect relay by honest peers
by applying the check inside
PartiallyDownloadedBlock::FillBlock, immediately before
returning READ_STATUS_OK.

This also removes the extraneous CheckBlock call.

Github-Pull: bitcoin#32646
Rebased-From: bac9ee4
Previously in debug builds, this would cause an Assume crash if
FillBlock had been called previously. This could happen when multiple
blocktxn messages were received.

Co-Authored-By: Greg Sanders <[email protected]>

Github-Pull: bitcoin#33296
Rebased-From: 5e585a0
Add test_multiple_blocktxn_response that checks that the peer is
disconnected.

Github-Pull: bitcoin#33296
Rebased-From: 8b62647
Tor inbound connections do not reveal the peer's actual network address.
Therefore do not apply whitelist permissions to them.

Co-authored-by: Vasil Dimov <[email protected]>

Github-Pull: bitcoin#33395
Rebased-From: f563ce9
f2bd79f doc: update manual pages for v29.2rc1 (fanquake)
461dd13 build: bump version to v29.2rc1 (fanquake)
9bc4afb doc: update release notes for 29.x (fanquake)
61cdc04 net: Do not apply whitelist permission to onion inbounds (Martin Zumsande)
1288d44 test: send duplicate blocktxn message in p2p_compactblocks.py (Eugene Siegel)
569ceb0 net: check for empty header before calling FillBlock (Eugene Siegel)
4c940d4 p2p: remove vestigial READ_STATUS_CHECKBLOCK_FAILED (Greg Sanders)
9b95ab5 p2p: Add witness mutation check inside FillBlock (Greg Sanders)
e97588f trace: Workaround GCC bug compiling with old systemtap (Luke Dashjr)
324caa8 ci: always use tag for LLVM checkout (fanquake)
2717331 Fix benchmark CSV output (Hennadii Stepanov)

Pull request description:

  Backports:
  * bitcoin#32646
  * bitcoin#33296
  * bitcoin#33310
  * bitcoin#33340
  * bitcoin#33364
  * bitcoin#33395

  Plus changes for 29.2rc1.

ACKs for top commit:
  darosior:
    utACK f2bd79f
  mzumsande:
    utACK f2bd79f

Tree-SHA512: 346a92032b7a069e2941056c6273ff65e360c5834832b106350a9cd42b634518cc75b807da6e51a6292e3a33342bb7b145777d3538a2792e03c63962d747a025
Github-Pull: bitcoin#32989
Rebased-From: b232b0f

Add "Restore" and "Save" caching actions.

These actions reduce boilerplate in the main ci.yml configuration file.

These actions are implemented so that caches will be saved on `push`
only.

When a pull request is opened it will cache hit on the caches from the
lastest push, or in the case of depends will hit on any matching depends
hash, falling back to partial matches.

Depends caches are hashed using
`$(git ls-tree HEAD depends "ci/test/$FILE_ENV" | sha256sum | cut -d' ' -f1)`
and this hash is passed in as an input to the actions. This means we
direct cache hit in cases where depends would not be re-built, otherwise
falling back to a partial match.

Previous releases cache is hashed similarly to depends, but using the
test/get_previous_releases.py file.

The cirruslabs cache action will fallback transparently to GitHub's
cache in the case that the job is not being run on a Cirrus Runner,
making these compatible with running on forks (on free GH hardware).
Github-Pull: bitcoin#32989
Rebased-From: 33ba073

If set, Cirrus runners will be used on pushes to, and pull requests
against, this repository.

Forks can set this if they have their own cirrus runners.
Github-Pull: bitcoin#32989
Rebased-From: fdf64e5

Another action to reduce boilerplate in the main ci.yml file.

This action will set up a docker builder compatible with caching build
layers to a container registry using the `gha` build driver.

It will then configure the docker build cache args.
Github-Pull: bitcoin#32989
Rebased-From: 94a0932

Using buildx is required to properly load the correct driver, for use
with registry caching. Neither build, nor BUILDKIT=1 currently do this
properly.

Use of `docker buildx build` is compatible with podman.
Github-Pull: bitcoin#32989
Rebased-From: 18f6be0

Reverts: e87429a

This was added in PR bitcoin#31545 with the intention that self-hosted runners
might use it to save build cache.

As we are not using hosted runners with a registry build cache, the bulk
of this commit can be reverted, simply using the value of
$DOCKER_BUILD_CACHE_ARG in the script.

link: bitcoin#31545
Github-Pull: bitcoin#32989
Rebased-From: 9c2b96e

This sets the build dir at build time so that Apple SDK gets installed
in the correct/expected location for the runtime to find it.

Co-authored-by: Max Edwards <[email protected]>
Github-Pull: bitcoin#32989
Rebased-From: 020069e

Whilst the action cirruslabs/actions/cache will automatically set this
host, the docker `gha` build cache backend will not be aware of it.

Set the value here, which will later be used in the docker build args to
enable docker build cache on the cirrus cache.
Github-Pull: bitcoin#32989
Rebased-From: cc1735d

To remove multiple occurances of the respository name, against which we
compare `${{ github.repository }}` to check if we should use Cirrus
Runners, introduce a helper job which can check a single environment
variable and output this as an input to subsequent jobs.

Forks can maintain a trivial patch of their repo name against the
`REPO_USE_CIRRUS_RUNNERS` variable in ci.yml if they have Cirrus Runners
of their own, which will then enable cache actions and docker build
cache to use Cirrus Cache.

It's not possible to use `${{ env.USE_CIRRUS_RUNNERS }}` in the
`runs-on:` directive as the context is not supported by GitHub.

If it was, this job would no longer be necessary.
Github-Pull: bitcoin#32989
Rebased-From: f253031

Co-authored-by: Max Edwards <[email protected]>
Github-Pull: bitcoin#32989
Rebased-From: 04e7bfb

Co-authored-by: Max Edwards <[email protected]>
willcl-ark and others added 28 commits September 23, 2025 15:26
Github-Pull: bitcoin#32989
Rebased-From: dd1c590

Print the ccache hit-rate for the job using a GitHub annotation if it
was below 75%.
Github-Pull: bitcoin#32989
Rebased-From: 2aa288e

Docker currently warns that we are missing a default value.

Set this to scratch which will error if an appropriate image tag is not
passed in to silence the warning.
Github-Pull: bitcoin#32989
Rebased-From: 3c5da69

ci/lint_run_all.sh: Only used in .cirrus.yml. Refer to test/lint/README.md on how to run locally.
Github-Pull: bitcoin#33319
Rebased-From: 5eeb2fa

These jobs can use reduced runner size to avoid wasting CPU, as much of
the long-running part of the job is single-threaded.

Suggested in: bitcoin#32989 (comment)

Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^[email protected]>
5750355 ci: link against -lstdc++ in native fuzz with msan job (fanquake)
78d93ef ci: Checkout latest merged pulls (MarcoFalke)
4a034cb ci: reduce runner sizes on various jobs (will)
6ded1fe ci: remove un-needed lint_run*.sh files (willcl-ark)
4e8b64b ci: fix annoying docker warning (will)
773e4cd ci: add ccache hit-rate warning when < 75% (will)
4339787 doc: Detail configuration of hosted CI runners (will)
c7f290b ci: dynamically match makejobs with cores (will)
a08c3cc ci: remove .cirrus.yml (will)
06424fb ci: port lint (will)
0f0378f ci: port msan-depends (will)
643385b ci: port tsan-depends (will)
3b2dcc8 ci: port tidy (will)
b4286cf ci: port centos-depends-gui (will)
5057b9a ci: port previous-releases-depends-debug (will)
85ec6c6 ci: port fuzzer-address-undefined-integer-nodepends (will)
544f902 ci: port i686-multiprocess-DEBUG (will)
e826c3d ci: port nowallet-libbitcoinkernel (will)
835b5b8 ci: port mac-cross-gui-notests (will)
a91567a ci: force reinstall of kernel headers in asan (will)
819ee09 ci: update asan-lsan-ubsan (will)
894a3cb ci: update windows-cross job (will)
82c60a3 ci: port arm 32-bit job (will)
8499933 ci: add job to determine runner type (will)
f9f3e8b ci: add Cirrus cache host (will)
af08643 ci: have base install run in right dir (will)
0a649d0 ci: use docker build cache arg directly (will)
f3089fb ci: use buildx in ci (will)
1faf918 ci: add configure-docker action (will)
954c1a5 ci: add REPO_USE_CIRRUS_RUNNERS (will)
301aa5d ci: add caching actions (will)
f63b8e9 ci: add configure environment action (will)

Pull request description:

  Backports bitcoin#32989 to the 29.x branch

ACKs for top commit:
  m3dwards:
    ACK 5750355

Tree-SHA512: c0509903043acd1c1e62f6382d9373a5c7a51377a76cbe6ea0cacf83cb03b10e658b8fd0dc2080acb9d6361f0a7883feb0134acd9bc53d164561364d42e111e7
The next commit requires an additional mainnet block which changes the difficulty.

Also fix a few minor mistakes in the test (suite):
- rename the create_coinbase retarger_period argument to halving_period. Before bitcoin#31583 this was hardcoded for regtest where these values are the same.
- drop unused fees argument from mine helper

Finally the CPU miner instructions for generating the alternative mainnet chain are expanded.

Github-Pull: bitcoin#33446
Rebased-From: 4c3c1f4
A target field was added to the getblock and getblockheader RPC calls in bitcoin#31583, but it mistakingly always used the tip value.

Because regtest does not have difficulty adjustment, a test is added for mainnet instead.

Github-Pull: bitcoin#33446
Rebased-From: bf7996c
Using bypass_limits=true is essentially fuzzing part of a
reorg only, and results in TRUC invariants unable to be
checked. Remove most instances of bypassing limits, leaving
one harness able to do so.

Github-Pull: bitcoin#33504
Rebased-From: bbe8e90
Not enforcing TRUC topology on reorg was the intended
behavior, but the appropriate bypass argument was not
checked.

This mistake means we could potentially invalidate a long
chain of perfectly incentive-compatible transactions that
were made historically, including subsequent non-TRUC
transactions, all of which may have been very high feerate.

Lastly, it wastes CPU cycles doing topology checks since
this behavior cannot actually enforce the topology in
general for the reorg setting.

Github-Pull: bitcoin#33504
Rebased-From: 26e71c2
2d7ebd2 doc: update release notes for 29.x (fanquake)
a8bb76b test: add more TRUC reorg coverge (Greg Sanders)
666aec7 Mempool: Do not enforce TRUC checks on reorg (Greg Sanders)
6f23ead fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders)
9d9baaf doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) (Sebastian Falbesoner)
22ab141 rpc: fix getblock(header) returns target for tip (Sjors Provoost)
118abf4 test: add block 2016 to mock mainnet (Sjors Provoost)

Pull request description:

  Backports:
  * bitcoin#33446
  * bitcoin#33484
  * bitcoin#33504

ACKs for top commit:
  luke-jr:
    ACK 2d7ebd2
  dergoegge:
    ACK 2d7ebd2
  marcofleon:
    ACK 2d7ebd2

Tree-SHA512: 27b852177d8502d6c703cb0eeb1e4df9d651c9c8add5fbf6ae4eeb4b8aefc145471f38f9794c0ed276bf7ebba1844ecbaf5a84cb5913ca7d0a546f5216ea3b2d
QT translations are optional, but the script would error when
'translations_dir' falls back to its default value NULL.

This PR fixes it by moving the set-up of QT translations under
the check for 'translations_dir' presence.

Github-Pull: bitcoin#33482
Rebased-From: 7b5261f
d82fc69 doc: update release notes for 29.2rc2 (fanquake)
513cef7 doc: update manual pages for v29.2rc2 (fanquake)
eea16f7 build: bump version to v29.2rc2 (fanquake)
6b3c1db contrib: fix using macdploy script without translations. (amisha)

Pull request description:

  It's been 2 weeks since rc1: https://github.com/bitcoin/bitcoin/releases/tag/v29.2rc1.
  We've backported more changes:
  * bitcoin#33403
  * bitcoin#33474
  * bitcoin#33482

  Lets do `rc2`.

ACKs for top commit:
  davidgumberg:
    reACK d82fc69
  glozow:
    ACK d82fc69
  darosior:
    utACK d82fc69. Changes look good to me, but i have not been through the process of regenerating the doc myself.

Tree-SHA512: c829efe89f86c9c76767ffe60a3779ece902ee9e3c8f6b4203562aaf257019484bfa49916ddfabdcabbd1478368d9b80a3f0a15057778aa1984852ea245283a6
abf4a6e build: fix depends Qt download link (fanquake)

Pull request description:

  Fix Qt download path, so we wont always hit the fallback.

ACKs for top commit:
  hebasto:
    ACK abf4a6e.

Tree-SHA512: 1157528983ede46c60810eae5c73f4bd81640afcae9afd9aad14c30104e90c52f8e97755f22314a5514bc1de3a92d864398087fe826f1980acc772fd32535a9f
46d9b90 doc: update manual pages for v29.2 (fanquake)
b2026fa build: bump version to v29.2 (fanquake)
3226616 doc: update release notes for 29.2 (fanquake)

Pull request description:

  I'm optimistic that 29.2 wont need an `rc3`.

ACKs for top commit:
  instagibbs:
    ACK 46d9b90
  stickies-v:
    ACK 46d9b90
  glozow:
    ACK 46d9b90

Tree-SHA512: f515d2dfbbe60dc145f79425cb2e8ef7a443e69dab208b9acdf357dae7cca3f566f7d013a85c6d4330d8931da060320159a3a9d8dae0ea3ff18bba5aeb282722
Bitcoin Core 29.2 final

Tree-SHA512: f515d2dfbbe60dc145f79425cb2e8ef7a443e69dab208b9acdf357dae7cca3f566f7d013a85c6d4330d8931da060320159a3a9d8dae0ea3ff18bba5aeb282722
@ajtowns ajtowns added this to the 29.x milestone Dec 9, 2025
@darosior
Copy link

One of the CI issues seems trivial to fix (just the linter):

[178/665][18.9s] clang-tidy-19 -p=/home/runner/work/_temp/build -quiet -load=/tidy-build/libbitcoin-tidy.so /home/runner/work/_temp/src/init.cpp
/home/runner/work/_temp/src/init.cpp:1547:20: error: use emplace_back instead of push_back [modernize-use-emplace,-warnings-as-errors]
 1547 |         uacomments.push_back("inquisition");
      |                    ^~~~~~~~~~
      |                    emplace_back(
1863 warnings generated.

[179/665][10.7s] clang-tidy-19 -p=/home/runner/work/_temp/build -quiet -load=/tidy-build/libbitcoin-tidy.so /home/runner/work/_temp/src/node/mempool_persist.cpp
+ echo '^^^ ⚠️ Failure generated from clang-tidy'
+ false
1025 warnings generated.

[180/665][7.7s] clang-tidy-19 -p=/home/runner/work/_temp/build -quiet -load=/tidy-build/libbitcoin-tidy.so /home/runner/work/_temp/src/bitcoin-util.cpp
/home/runner/work/_temp/src/bitcoin-util.cpp:260:23: error: use emplace_back instead of push_back [modernize-use-emplace,-warnings-as-errors]
  260 |                 stack.push_back({});
      |                       ^~~~~~~~~~~~
      |                       emplace_back(
722 warnings generated.

--

[487/665][8.1s] clang-tidy-19 -p=/home/runner/work/_temp/build -quiet -load=/tidy-build/libbitcoin-tidy.so /home/runner/work/_temp/src/test/crypto_tests.cpp
953 warnings generated.

[488/665][14.7s] clang-tidy-19 -p=/home/runner/work/_temp/build -quiet -load=/tidy-build/libbitcoin-tidy.so /home/runner/work/_temp/src/test/script_tests.cpp
/home/runner/work/_temp/src/test/script_tests.cpp:942:29: error: use starts_with instead of find() == 0 [modernize-use-starts-ends-with,-warnings-as-errors]
  942 |                 if (element.find(scriptFlag) == 0) {
      |                             ^~~~~          ~~~~~~
      |                             starts_with(   )
/home/runner/work/_temp/src/test/script_tests.cpp:1804:13: error: use emplace_back instead of push_back [modernize-use-emplace,-warnings-as-errors]
 1804 |     witData.push_back({});
      |             ^~~~~~~~~~~~
      |             emplace_back(
/home/runner/work/_temp/src/test/script_tests.cpp:1805:13: error: use emplace_back instead of push_back [modernize-use-emplace,-warnings-as-errors]
 1805 |     witData.push_back({});
      |             ^~~~~~~~~~~~
      |             emplace_back(
/home/runner/work/_temp/src/test/script_tests.cpp:1819:13: error: use emplace_back instead of push_back [modernize-use-emplace,-warnings-as-errors]
 1819 |     witData.push_back({});
      |             ^~~~~~~~~~~~
      |             emplace_back(
1456 warnings generated.

^^^ ⚠️ Failure generated from clang-tidy

The other one seems more annoying, as it says the machine ran out of disk space?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.