Skip to content

build(pixi): package plotjuggler_sdk as a conda package + prefix.dev publish#126

Merged
facontidavide merged 10 commits into
mainfrom
pixi-recipe
Jun 18, 2026
Merged

build(pixi): package plotjuggler_sdk as a conda package + prefix.dev publish#126
facontidavide merged 10 commits into
mainfrom
pixi-recipe

Conversation

@facontidavide

Copy link
Copy Markdown
Contributor

Summary

First step of the Conan→pixi migration: make plotjuggler_sdk build and publish as a conda package, consumed from the plotjuggler prefix.dev channel. The Conan/cloudsmith path is untouched and keeps working in parallel.

  • pixi.toml — conda-forge dev environment + tasks (configure/build/test/install/pack). pixi run build reproduces the SDK's install-capable build; pixi run -e test test runs the gtest suite; pixi run -e pack pack produces the .conda.
  • recipe.yaml — rattler-build recipe driving the SDK's existing native install(EXPORT) (no SDK CMake changes needed). ignore_run_exports for fmt/fast_float (header-only/BUILD_INTERFACE-only); run dep nlohmann_json. The package test builds examples/sdk_consumer so every build self-verifies find_package(plotjuggler_sdk) + linking + pj_emit_plugin_manifest().
  • .github/workflows/conda-release.yml — tag-gated (v*) build + rattler-build upload prefix --channel plotjuggler. The version guard cross-checks the tag against all three hardcoded version sources (conanfile.py, recipe.yaml context, CMakeLists.txt PJ_PACKAGE_VERSION). linux-64 for now.
  • pj_base/src/builtin/protobuf_wire.hpp — one-line body.reserve(64) to dodge a GCC 14 -Wstringop-overflow false-positive (mid-end warning a pragma can't reach). Behavior-preserving (capacity hint only); the SDK now builds clean under -Werror on GCC 14 and 15.
  • pixi.lock committed for reproducible solves; rattler-build pinned to 0.66.2 (matches CI).

Verification done

  • pixi run -e pack pack builds plotjuggler_sdk-0.8.0-*.conda; rattler's package tests (incl. the consumer build) pass.
  • pixi add plotjuggler_sdk from the built channel resolves and a consumer links a real plugin .so against it.
  • pixi run -e test test46/46 SDK gtests pass (under the conda GCC 14 toolchain).
  • actionlint clean on the workflow.

Before this can publish

  • Set repo secret PREFIX_API_KEY (a prefix.dev token with write access to the plotjuggler channel). The publish job runs on tag v*.

Follow-ups (not in this PR)

  • 3-platform extension (osx-64/win-64): the recipe's test -f/$PREFIX/.a build+test blocks are POSIX-only and need a Windows sh/bat split — validate via CI.
  • This is Phase 1 of a multi-phase migration; the plugins repo (pj-official-plugins) follows in later phases.

🤖 Generated with Claude Code

facontidavide and others added 10 commits June 18, 2026 17:24
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…otobuf_wire

Add body.reserve(64) in Writer::message() so GCC 14's optimizer sees a
non-zero initial capacity; without it the mid-end inliner concludes the
local body vector has size 0 and emits a spurious -Wstringop-overflow
on the appendVarint push_back path.  GCC 15 does not emit the warning.
The reserve() is a capacity hint only — behavior is identical.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Packages the SDK as a conda artifact via rattler-build. The recipe drives
cmake -DPJ_INSTALL_SDK=ON, suppresses fmt/fast_float run_exports (both are
BUILD_INTERFACE-only in the installed targets), and validates the output with
four file-existence tests (Config.cmake, ConfigVersion.cmake,
PjPluginManifest.cmake, libpj_base.a).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…on run range

Exercises find_package(plotjuggler_sdk) + plugin link + pj_emit_plugin_manifest on
every build (all platforms), not just file-existence. Run-deps nlohmann_json >=3.12,<4.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… CI's 0.66.2

Final integration review: the SDK version is hardcoded in three places
(conanfile.py, recipe.yaml, CMakeLists.txt PJ_PACKAGE_VERSION); the publish
guard now checks all three against the tag. Align the dev pack tool to the
exact rattler-build the CI uses.
@facontidavide facontidavide merged commit 95fe7d2 into main Jun 18, 2026
4 checks passed
@facontidavide facontidavide deleted the pixi-recipe branch June 18, 2026 20:14
facontidavide added a commit that referenced this pull request Jun 18, 2026
First conda-packaged release. Bumps the version in all three sources the
conda-release version-guard cross-checks (conanfile.py, recipe.yaml context,
CMakeLists.txt PJ_PACKAGE_VERSION) plus the conanfile.py docstring example.

No consumer-facing API/ABI change since 0.8.0: the only code delta is the
GCC-14 -Wstringop-overflow workaround in src/builtin/protobuf_wire.hpp (not an
installed header). This patch exists to publish the SDK as a conda package on
prefix.dev (via the recipe added in #126) and to exercise the tag-gated
release pipeline.

Co-authored-by: Claude Opus 4.8 (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.

1 participant