Skip to content

Split repository into master (library source) and support (CI, docs, examples) branches.#287

Open
ryanofsky wants to merge 5 commits into
bitcoin-core:masterfrom
ryanofsky:pr/supportm
Open

Split repository into master (library source) and support (CI, docs, examples) branches.#287
ryanofsky wants to merge 5 commits into
bitcoin-core:masterfrom
ryanofsky:pr/supportm

Conversation

@ryanofsky
Copy link
Copy Markdown
Collaborator

@ryanofsky ryanofsky commented Jun 4, 2026

This PR removes documentation, CI scripts, and examples from the master branch, moving it to a support branch instead.

This reduces the number of files that need to be imported into the bitcoin core subtree, and should make subtree bumps in bitcoin easier to review since they will no longer contain extraneous changes. It should also facilitate review within the libmultiprocess repository so PRs that actually modify the library can receive greater attention and PRs that only change support files can be merged more quickly.

This PR is an alternative to trying to exclude support files from the bitcoin core subtree (#276) which is a more complicated change that does not have same review benefits. The idea was originally brought up in #232 (comment).

This PR depends on #286, #289, and #288 should be merged after them.

clientDestroy() reads m_context.connection to decide whether to use
MP_LOG vs KJ_LOG, but Connection::~Connection() can set it to null
concurrently from the event loop thread (via the disconnect_cb sync
cleanup callback) while the destructor runs on an async cleanup thread,
causing a TSan-reported data race. The race is exposed by the test added
in commit 90be835 ("test: regression for ~ProxyClient destroy after peer
disconnect").

The KJ_LOG fallback was only needed before commit 315ff53 ("refactor:
Add ProxyContext EventLoop* member"), when logging required going
through connection->m_loop. Since that commit, m_context.loop is a
direct EventLoopRef that is always valid regardless of whether
m_context.connection is null. The KJ_LOG branch is now dead code, so
drop it and the connection check entirely.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@DrahtBot
Copy link
Copy Markdown

DrahtBot commented Jun 4, 2026

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

Reviews

See the guideline for information on the review process.
A summary of reviews will appear here.

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #288 (Create support branch for CI scripts, documentation, and examples by ryanofsky)
  • #286 (proxy-client: fix TSan data race in clientDestroy by ryanofsky)
  • #278 (doc: Fix and expand design.md by ViniciusCestarii)
  • #276 (build: prepare for subtree split by Sjors)
  • #274 (Add nonunix platform support by ryanofsky)
  • #269 (proxy: add local connection limit to ListenConnections by enirox001)
  • #212 (ci: add newdeps job testing newer versions of cmake and capnproto by ryanofsky)
  • #209 (cmake: Increase cmake policy version by ryanofsky)
  • #204 (cmake: support default build and test workflow by purpleKarrot)
  • #175 (Set cmake_minimum_required(VERSION 3.22) by maflcko)

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.

ryanofsky and others added 4 commits June 3, 2026 21:25
gen.cpp uses IWYU pragma: keep for include which appears to be necessary for
newer versions of capnproto (1.4.0 but not 1.1.0)
TargetCapnpSources.cmake computed the build-side include directory by
computing file(RELATIVE_PATH) from CMAKE_SOURCE_DIR to include_prefix
and appending the result to CMAKE_BINARY_DIR. This assumes include_prefix
is inside CMAKE_SOURCE_DIR, which holds when master is the top-level
cmake project but breaks when it is added as a subdirectory of an external
project (e.g. the support branch) whose source root is elsewhere.

In that case the relative path contains ".." and the resulting
build_include_prefix points to a nonexistent directory instead of
CMAKE_CURRENT_BINARY_DIR where the generated headers actually live.

Fix by anchoring on CMAKE_CURRENT_SOURCE_DIR / CMAKE_CURRENT_BINARY_DIR
instead of the top-level CMAKE_SOURCE_DIR/BINARY_DIR. Since cmake
mirrors source-tree structure into the binary tree, the mapping is
equivalent for any include_prefix inside CMAKE_SOURCE_DIR, and correct
for paths outside it.

Also update docstring and example to use CMAKE_CURRENT_SOURCE_DIR.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Support files moved to support branch:
  git rm -r .github/ ci/ doc/ example/ shell.nix

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Splits the repository so C++ source stays on master and CI scripts,
docs, and examples move to the support branch. Master's CI workflows
become thin wrappers that delegate to the reusable workflows on the
support branch.

GitHub Actions changes:
- ci.yml, bitcoin-core-ci.yml: replaced with thin wrappers that call
  the corresponding reusable workflows on the support branch.

CMakeLists.txt:
- Remove add_subdirectory(example): example/ moves to the support
  branch and is built from support's own CMakeLists.txt.

README.md:
- Update documentation links to point to the support branch.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@ryanofsky
Copy link
Copy Markdown
Collaborator Author

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.

2 participants