Add a BioDynaMo recipe and setup-biodynamo action. - #97
Merged
vgvassilev merged 1 commit intoAug 13, 2026
Conversation
vgvassilev
force-pushed
the
pr-biodynamo-recipe
branch
2 times, most recently
from
August 13, 2026 17:21
021bf1a to
7882fd7
Compare
Every downstream simulation repo builds BioDynaMo inline on each CI run: a long build that also downloads a ~300 MB prebuilt ROOT tarball from CERN, and that needs a pyenv-managed interpreter set up beforehand. CARTopiaX carries a clone-cache-build dance plus its own pyenv step to do it. Publishing it once per cell turns that into a cache fetch. The artifact is relocatable by construction: BioDynaMo installs its own ROOT under third_party/root, and bin/thisbdm.sh derives BDMSYS from its own location, so the tree works wherever setup-recipe extracts it. build.py proves that before publishing -- it moves the install to a different path and drives a full consumer build from there. setup-biodynamo then sources thisbdm.sh and marshals the resulting environment into $GITHUB_ENV, since a composite action cannot leave a sourced shell behind and the script sets a dozen variables. Two host packages are not optional and are installed by the recipe. ROOT's PyROOT and cppyy are extension modules built against a single CPython minor, and no Ubuntu LTS ships the 3.9 the bundled ROOT wants, so it comes from deadsnakes; cling shells out to the compiler ROOT was built with to locate the standard library headers, so g++-11 has to be present or `import cppyy` dies inside libCling with a segmentation violation. The build passes -DNOPYENV=YES so the generated thisbdm.sh does not require pyenv on the consumer, which would otherwise make the published tree unsourceable.
vgvassilev
force-pushed
the
pr-biodynamo-recipe
branch
from
August 13, 2026 17:39
7882fd7 to
ce1916f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every downstream simulation repo builds BioDynaMo inline on each CI run: a long build that also downloads a ~300 MB prebuilt ROOT tarball from CERN, and that needs a pyenv-managed interpreter set up beforehand. CARTopiaX carries a clone-cache-build dance plus its own pyenv step to do it.
Publishing it once per cell turns that into a cache fetch. The artifact is relocatable by construction: BioDynaMo installs its own ROOT under third_party/root, and bin/thisbdm.sh derives BDMSYS from its own location, so the tree works wherever setup-recipe extracts it. build.py proves that before publishing -- it moves the install to a different path and drives a full consumer build from there. setup-biodynamo then sources thisbdm.sh and marshals the resulting environment into $GITHUB_ENV, since a composite action cannot leave a sourced shell behind and the script sets a dozen variables.
Two host packages are not optional and are installed by the recipe. ROOT's PyROOT and cppyy are extension modules built against a single CPython minor, and no Ubuntu LTS ships the 3.9 the bundled ROOT wants, so it comes from deadsnakes; cling shells out to the compiler ROOT was built with to locate the standard library headers, so g++-11 has to be present or
import cppyydies inside libCling with a segmentation violation. The build passes -DNOPYENV=YES so the generated thisbdm.sh does not require pyenv on the consumer, which would otherwise make the published tree unsourceable.