Skip to content

ci: unbreak the three red jobs (windows runner pin, rolling base pin, renamed test binary) - #28

Merged
dv-picknik merged 1 commit into
mainfrom
fix/21028-btcpp-ci-fixes
Aug 5, 2026
Merged

ci: unbreak the three red jobs (windows runner pin, rolling base pin, renamed test binary)#28
dv-picknik merged 1 commit into
mainfrom
fix/21028-btcpp-ci-fixes

Conversation

@dv-picknik

@dv-picknik dv-picknik commented Aug 4, 2026

Copy link
Copy Markdown
Member

Gets this fork's CI matrix fully green. Two of the failures are external drift; digging in surfaced a third, previously-masked one that is our own fork-rename fallout.

What broke

Job Root cause Evidence
cmake Windows windows-latest is now the windows-2025-vs2026 image — Visual Studio 2026 only (MSVC 19.51, tools 14.51). conan profile detect picks up compiler.version=195, no prebuilt binaries match, so everything builds from source. libsodium/1.0.20 (pulled in by zeromq) is the one package built by msbuild rather than cmake: its hand-written .vcxproj gets PlatformToolset v145 from compiler.version=195, while conanvcvars lands on VCToolsVersion 14.44.35207, and msbuild rejects the pair. error MSB8052 run 30653019407
Pixi (conda) (windows) Same image change, unrelated symptom: cmake picks its default generator from a hardcoded list, and the conda-forge cmake 3.31.5 in pixi.lock predates VS 2026, so it asked for Visual Studio 17 2022 and found nothing. could not find any instance of Visual Studio run 30653019362
ros2-rolling ROS 2 Rolling migrated to Ubuntu 26.04 (resolute); packages.ros.org publishes zero ros-rolling-* debs for resolute so far, so ros-rolling-ros-environment isn't there to install. run 30653019731
Pixi (conda) (ubuntu) — not in the issue The rename in #26 changed PROJECT_NAME to behaviortree_cpp_picknik, so tests/CMakeLists.txt builds behaviortree_cpp_picknik_test. pixi.toml and cmake_windows.yml still ran behaviortree_cpp_test. see below

Three corrections to the issue's guesses, all found by reading the logs rather than trusting the summary:

  • The pixi windows failure is not the libsodium/MSVC toolset mismatch. Same underlying image change, but pixi never reaches conan — it dies at cmake generator selection.
  • The cmake Windows failure is not a cmake generator problem either. Conan already selects Visual Studio 18 2026 and gtest configures and builds clean under it. Only the one msbuild-based package in the graph breaks.
  • The pixi ubuntu job was never actually passing. fail-fast kept cancelling it mid-build once windows died, so its own failure was invisible. It has been broken since the rename.

The fix

Adapt to VS 2026 rather than pin away from it, then fix the rename fallout:

  • cmake_windows.yml: -o "zeromq/*:encryption=tweetnacl" on conan install. tweetnacl ships inside libzmq, so this drops the libsodium dependency — and with it the only msbuild-built package in the graph — while leaving CURVE support intact. Nothing in this repo touches CURVE; the ZMQ_CURVE_* hits in src/loggers/zmq.hpp are cppzmq's own #ifdef'd option wrappers.
  • pixi.toml: cmake = ">=4.2" (first version with the Visual Studio 18 2026 generator) plus a win-64 build task that names that generator explicitly. Relocking picks up cmake 4.4.2 and moves pixi.lock to format v7.
  • pixi.yaml: setup-pixiv0.10.1, pixi-versionv0.76.1, because the pinned v0.40.3 cannot read a v7 lock. Also fail-fast: false, so one job's failure stops hiding its sibling's.
  • ros2-rolling.yaml: add OS_CODE_NAME: noble to the matrix env.
  • pixi.toml (both targets) + cmake_windows.yml test step: behaviortree_cpp_testbehaviortree_cpp_picknik_test.

Both windows runners stay on windows-latest. cmake_ubuntu.yml needed nothing — it runs ctest, not the binary by name.

Testing

Everything testable on Linux was run locally; CI isolates the rest.

  • rolling/noble — verified locally. Ran industrial_ci in Docker exactly as CI does (ROS_DISTRO=rolling ROS_REPO=main OS_CODE_NAME=noble ./.industrial_ci/ci.sh): builds, 207 tests from 45 test suites pass, colcon test-result reports 208 tests, 0 errors, 0 failures. The run also emits ROS's own Rolling has migrated to Ubuntu 26.04 warning — the drift confirmed from the source. Green on CI here too.
  • pixi linux under cmake 4.4.2 — verified locally. pixi run build && pixi run test builds clean and passes 207 tests, so the CMake 4 policy bump costs nothing. The one pre-4 declaration left in the tree is lexy's cmake_minimum_required(VERSION 3.8), which warns rather than errors.
  • windows — CI-testable only, and the earlier windows-2022 push already isolated the two failures to exactly the two causes above: build (windows-2022) got through conan, cmake and link and failed only on the stale test binary name, and pixi_conda_build (windows-2022) was mid-compile with no generator error. Both are addressed here without the pins.
  • pre-commit clean; all workflow YAML parses.

Not done

  • package-name: plotjuggler in both industrial_ci workflows is stale copy-paste, but package-name isn't an input industrial_ci declares (not in its action.yml) — silently ignored, changes no behavior. Left alone.
  • Didn't port upstream's unrelated churn (concurrency groups, actions/checkout@v7, the conanfile.py/CMake-presets rewrite of the Windows job) — none of it is needed to go green, and each is extra merge surface against upstream.

When these come off

  • encryption=tweetnacl can go back to the default once conan-center publishes msvc 195 binaries, or once the libsodium recipe stops handing msbuild a toolset/tools mismatch.
  • OS_CODE_NAME: noble once packages.ros.org starts publishing rolling debs for resolute.
  • The cmake and pixi version floors are permanent, not workarounds.

Closes PickNikRobotics/moveit_pro#21028

🤖 Generated with Claude Code

https://claude.ai/code/session_01SFjW9VieunSxySXNKSFEmX

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@dv-picknik, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 52 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 84a4a480-1394-4358-85fe-2e788eb201ee

📥 Commits

Reviewing files that changed from the base of the PR and between 120a665 and 7b39030.

⛔ Files ignored due to path filters (1)
  • pixi.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/cmake_windows.yml
  • .github/workflows/pixi.yaml
  • .github/workflows/ros2-rolling.yaml
  • pixi.toml
📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Updated Windows build validation to use the correct test executable and encryption configuration.
    • Upgraded Pixi tooling and adjusted CI behavior so independent platform checks continue running when one fails.
    • Updated ROS 2 Rolling validation to use a supported Ubuntu release configuration.
    • Updated Windows builds to use the current Visual Studio generator and raised the minimum CMake version to 4.2.
    • Added compatibility notes to clarify build environment constraints.

Walkthrough

CI settings update Windows dependency and test commands, upgrade Pixi tooling, disable matrix fail-fast, and pin the ROS 2 Rolling Ubuntu codename to noble.

Changes

CI compatibility

Layer / File(s) Summary
Update Windows build and test settings
.github/workflows/cmake_windows.yml, pixi.toml
Windows Conan installation enables TweetNaCl encryption. CMake uses the Visual Studio 18 2026 generator. Test commands use behaviortree_cpp_picknik_test. The minimum CMake version is 4.2.
Update Pixi CI execution
.github/workflows/pixi.yaml
Pixi CI disables matrix fail-fast and upgrades the setup action and Pixi versions for the current lockfile format.
Pin ROS 2 Rolling package base
.github/workflows/ros2-rolling.yaml
The Rolling matrix sets OS_CODE_NAME to noble because Rolling packages are unavailable for the targeted Ubuntu release.

Possibly related issues

  • PickNikRobotics/moveit_pro#21028 — The changes address the documented Windows Conan/MSBuild mismatch and ROS 2 Rolling package availability failures.

Possibly related PRs

Suggested reviewers: griswaldbrooks, jwhitleywork


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore (reviewers only)

❌ Failed checks (1 error)

Check name Status Explanation Resolution
Human Review Check ❌ Error The PR changes CI/CD workflows and adds the encryption=tweetnacl Conan configuration; it also disables matrix fail-fast, which can increase runner usage. This PR requires review by a requested human reviewer. After review, a non-author requested reviewer should override this pre-merge check.
✅ Passed checks (3 passed)
Check name Status Explanation
Description check ✅ Passed The description clearly explains the failures, fixes, testing, scope, and linked issue; the repository template contains no additional required sections.
Linked Issues check ✅ Passed The changes address the linked issue’s Windows dependency failure and ROS Rolling package failure while restoring related Pixi CI coverage.
Out of Scope Changes check ✅ Passed The workflow, Pixi, CMake, generator, fail-fast, and renamed test updates directly support the stated CI recovery objectives.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@dv-picknik dv-picknik changed the title ci: pin windows runner to 2022 and rolling to noble ci: unbreak the three red jobs (windows runner pin, rolling base pin, renamed test binary) Aug 4, 2026
@dv-picknik
dv-picknik marked this pull request as draft August 5, 2026 20:27
@dv-picknik dv-picknik self-assigned this Aug 5, 2026
@dv-picknik
dv-picknik marked this pull request as ready for review August 5, 2026 21:29
…st binary)

Three jobs were red. Two are external drift; the third had been masked by
fail-fast and is our own fork-rename fallout.

cmake Windows and Pixi (conda) both broke on the same runner-image change --
windows-latest is now windows-2025-vs2026, with Visual Studio 2026 (MSVC
19.51, tools 14.51) as the only Visual Studio installed -- but they broke on
different things, so they get different fixes. Both stay on windows-latest.

cmake Windows is not a generator problem. Conan already selects the
"Visual Studio 18 2026" generator and gtest configures and builds clean
under it. The break is libsodium, the one package in the graph built by
msbuild rather than cmake: its hand-written .vcxproj gets PlatformToolset
v145 from compiler.version=195 while conanvcvars lands on VCToolsVersion
14.44.35207, and msbuild rejects the pair (MSB8052). Passing
-o "zeromq/*:encryption=tweetnacl" uses the copy of tweetnacl bundled in
libzmq and drops the libsodium dependency entirely. CURVE support is
unchanged, and nothing here touches it -- the ZMQ_CURVE_* references in
src/loggers/zmq.hpp are cppzmq's own ifdef'd option wrappers.

Pixi is a generator problem. cmake picks its default generator from a
hardcoded list, and the conda-forge cmake 3.31.5 in the lock predates VS
2026 entirely, so it asked for "Visual Studio 17 2022" and found nothing.
That generator exists only in cmake >= 4.2, hence the dependency floor and
the win-64 build task that names it explicitly. Relocking to cmake 4.4.2
moves pixi.lock to format v7, which the pinned pixi v0.40.3 cannot read, so
setup-pixi and pixi move up with it.

ros2-rolling is unrelated: ROS 2 Rolling migrated to Ubuntu 26.04
(resolute), and packages.ros.org publishes no ros-rolling-* debs for
resolute yet, so ros-rolling-ros-environment isn't there to install. Pin
OS_CODE_NAME to noble until it is.

Pixi (conda) on ubuntu was never actually passing -- fail-fast cancelled it
mid-build once windows died, hiding its own failure. The rename in #26
changed PROJECT_NAME to behaviortree_cpp_picknik, so tests build
behaviortree_cpp_picknik_test while pixi.toml and cmake_windows.yml still
ran behaviortree_cpp_test. Fixed, and fail-fast disabled so one job's
failure stops hiding its sibling's.

cmake_ubuntu.yml needed nothing -- it runs ctest, not the binary by name.

Verified locally where possible: industrial_ci in Docker with ROS_DISTRO=
rolling ROS_REPO=main OS_CODE_NAME=noble builds and passes 207 tests, and
pixi run build && pixi run test under cmake 4.4.2 builds clean and passes
207 tests, so the CMake 4 policy bump costs nothing (the one pre-4
declaration left is lexy's cmake_minimum_required(VERSION 3.8), which warns
rather than errors). The windows halves are CI-testable only; all six jobs
are green.
@dv-picknik
dv-picknik force-pushed the fix/21028-btcpp-ci-fixes branch from e522c43 to 7b39030 Compare August 5, 2026 21:31

@griswaldbrooks griswaldbrooks left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i mean, if it works in ci...?

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
.github/workflows/cmake_windows.yml (1)

42-49: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Make the non-Pixi Windows generator explicit.

The Conan workaround assumes Visual Studio 18 2026, but the configure command at Line 54 still omits -G. Without -G, CMake can use CMAKE_GENERATOR or its internal default. A runner image change can select a generator that does not match the Conan toolchain. Pass -G "Visual Studio 18 2026" to Line 54 and verify CMake is at least 4.2. CMake added this generator in 4.2 and documents -G as the explicit selector. (cmake.org)

Proposed configure change
-      run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
+      run: cmake $GITHUB_WORKSPACE -G "Visual Studio 18 2026" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/cmake_windows.yml around lines 42 - 49, Update the Windows
CMake configure command to pass the explicit generator option -G "Visual Studio
18 2026", matching the Conan workaround’s toolchain. Also ensure the workflow
uses CMake version 4.2 or newer so this generator is supported.
.github/workflows/pixi.yaml (1)

13-15: 🚀 Performance & Scalability | 🔵 Trivial

Confirm the runner-cost trade-off of disabling fail-fast.

fail-fast: false keeps the sibling matrix job running after one job fails. This supports independent diagnostics, but it can consume another runner and extend the workflow. Confirm that this cost is acceptable for the repository. GitHub documents that fail-fast cancellation applies to in-progress and queued matrix jobs. (docs.github.com)

As per coding guidelines, CI/CD changes that can affect runner costs require a human review.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pixi.yaml around lines 13 - 15, Confirm with a human
reviewer that the increased runner usage and workflow duration from fail-fast:
false are acceptable for this repository; retain the setting only after
approving this CI cost trade-off.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/cmake_windows.yml:
- Around line 42-49: Update the Windows CMake configure command to pass the
explicit generator option -G "Visual Studio 18 2026", matching the Conan
workaround’s toolchain. Also ensure the workflow uses CMake version 4.2 or newer
so this generator is supported.

In @.github/workflows/pixi.yaml:
- Around line 13-15: Confirm with a human reviewer that the increased runner
usage and workflow duration from fail-fast: false are acceptable for this
repository; retain the setting only after approving this CI cost trade-off.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 01a0a3a5-d705-4585-b0b7-88b494d0608f

📥 Commits

Reviewing files that changed from the base of the PR and between 0bfb46a and e522c43.

⛔ Files ignored due to path filters (1)
  • pixi.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • .github/workflows/cmake_windows.yml
  • .github/workflows/pixi.yaml
  • pixi.toml

@dv-picknik
dv-picknik added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 22778bf Aug 5, 2026
10 of 11 checks passed
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