Skip to content

Stabilize new build in separate repository, and get CI/CD working#8

Open
CodeByDrescher wants to merge 30 commits intomasterfrom
stabilize-new-build
Open

Stabilize new build in separate repository, and get CI/CD working#8
CodeByDrescher wants to merge 30 commits intomasterfrom
stabilize-new-build

Conversation

@CodeByDrescher
Copy link
Copy Markdown
Collaborator

@CodeByDrescher CodeByDrescher commented Apr 14, 2026

Summary

Stabilize the ODE solver against sanitizers, modernize the build, and ship a
Python distribution alongside the native CLI.

  • Build: switch to Conan-managed dependencies (argparse, spdlog,
    libcurl); CMake minimum 3.13 → 3.16; consolidate platform detection on
    WIN32; new options OPTION_TARGET_PYTHON_BINDING,
    OPTION_TEST_WITH_LOCALHOST, OPTION_STATICALLY_LINK; warning cleanup
    pass and sprintf removal so the C++20 build compiles clean.
  • Solver architecture: lift input parsing out of the solver into
    VCellSolverInput + VCellSolverFactory; introduce abstract VCellSolver
    base; replace the 273-line hand-rolled argv parser in
    SundialsSolverStandalone with argparse; expose a reusable
    solve(input, output, tid) entry in SundialsSolverInterface (used by
    both the CLI and the Python module).
  • Messaging stabilization: decompose SimulationMessaging into
    MessageEventManager (worker thread + queue, with documented lock
    ordering), CurlProxyClasses (AbstractCurlProxy / NullCurlProxy /
    CurlProxy — replaces #ifdef USE_MESSAGING forests with polymorphism),
    JobEventStatus (now a JobEvent::Status namespaced enum), and
    WorkerEvent. Fixes from TSAN/UBSAN/leak runs: data race,
    mutex-access-before-constructor-finished, undefined behavior, memory
    leaks, int overflow in a test. std::jthreadstd::thread for
    compiler portability. Net: SimulationMessaging.cpp 755 → 194 lines.
  • Python bindings (pyvcell_odesolver): scikit-build-core + vendored
    pybind11; src/main.cpp exposes version() and
    solve(cvode_input_file_path, output_file_path, tid=-1).
  • CI/CD: matrix over macOS-15 (arm + intel), Windows, Linux x86_64 +
    arm64, Python 3.10–3.13. Per-platform Conan profiles, cibuildwheel
    Python wheels, lipo macOS Universal build, GHCR manylinux images,
    mold linker on Linux, sanitizer-enabled CMake.
  • Tests: replace IDAWin/tests/smoke/smoke.py with a top-level
    tests/ dir of GoogleTest C++ tests (smoke, hello, message-processing)
    plus a test_basic.py that exercises the wheel.

Test plan

  • CI green across all 5 platforms × 4 Python versions
  • ctest -VV green locally (Linux, macOS); Windows via CI
  • SundialsSolverStandalone_x64 runs the smoke .cvodeInput and
    matches *.ida.expected / *.cvode.expected
  • pip install of the built wheel exposes
    pyvcell_odesolver.solve(...) and produces output matching the CLI
  • Run with -DOPTION_TARGET_MESSAGING=ON against a localhost broker
    (-DOPTION_TEST_WITH_LOCALHOST=ON) — no TSAN/leak warnings
  • macOS Universal binary verified with lipo -archs

@CodeByDrescher CodeByDrescher requested a review from jcschaff April 14, 2026 14:35
@CodeByDrescher
Copy link
Copy Markdown
Collaborator Author

closes #5
closes #7

@CodeByDrescher CodeByDrescher force-pushed the stabilize-new-build branch 8 times, most recently from 9324083 to ad645a9 Compare April 24, 2026 18:41
@CodeByDrescher CodeByDrescher force-pushed the stabilize-new-build branch 16 times, most recently from d65a80b to 872370e Compare May 4, 2026 15:53
@CodeByDrescher CodeByDrescher force-pushed the stabilize-new-build branch from 872370e to f81042f Compare May 4, 2026 16:13
Wires tests/unit/smoke_test.py into ctest as python_smoke_test via a
PYTHON_TEST_INTERPRETER cache var. The entry is skipped at configure time
when pyvcell_odesolver isn't importable, so CI's native ctest job stays
green; cibuildwheel exercises the same file independently via pytest.
Also rewrites CLAUDE.md, which still described the upstream multi-solver
parent repo, and ignores wheelhouse/ + the pycache from the new test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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