ci: switch from custom-container CI to industrial_ci - #83
Merged
Conversation
Replace the pre-baked ghcr.io/picknikrobotics/pick_ik:ci container workflow with the industrial_ci pattern used by virtually every other repo on the MoveIt/PickNik release matrix (data_tamer, cpp_polyfills, generate_parameter_library, moveit_msgs, srdfdom, moveit_visual_tools, warehouse_ros, warehouse_ros_sqlite, etc.). Why: - The old CI container was frozen at the 2023-12-17 build and had never been refreshed since. All PRs in the last 2.5 years were effectively tested against jammy+rolling-2023 — an environment that no longer exists in the real ROS ecosystem. - The weekly docker.yaml rebuild had been failing since ~mid-2025 and was auto-disabled by GitHub for inactivity. Root cause is the expired ROS GPG key in the Dockerfile. - industrial_ci installs deps fresh per run, follows the current ROS distro base OS, and matches what the buildfarm does. No container to maintain. Also removes .github/workflows/docker.yaml, which existed solely to build and push the CI container that's no longer used. The .devcontainer/Dockerfile is kept for VSCode devcontainer users (who can fix the expired-key issue separately). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pick_ik/cmake/FindCatch2.cmake uses FetchContent to git-clone the
Catch2 repository at configure time. The old baked CI container had
git preinstalled by its Dockerfile, so this was silently satisfied.
industrial_ci runs in minimal ros:{distro}-ros-base containers that
don't include git. Declaring it as a rosdep test_depend causes
industrial_ci's rosdep install step to fetch it, unblocking the
Catch2 fetch.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Rolling has migrated to Ubuntu Resolute. Packages land in ros2-testing first; the ros2 (main) repo lags during the base-OS transition, so apt can't find ros-rolling-* on resolute in main yet. Setting ROS_REPO=testing + OS_CODE_NAME=resolute makes industrial_ci build against real rolling (resolute base, testing packages) instead of the frozen-Noble default. Matches the pattern in moveit2 PR #3743. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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.
Summary
Replace the pre-baked
ghcr.io/picknikrobotics/pick_ik:cicontainer workflow with the industrial_ci pattern used by nearly every other MoveIt/PickNik release repo.Why
The pre-baked container approach quietly rotted:
ghcr.io/picknikrobotics/pick_ik:ciimage was frozen at the 2023-12-17 build and never refreshed since. All PRs for the last 2.5 years were tested against jammy+rolling-of-late-2023 — an environment that no longer exists in the real ROS ecosystem (rolling has since moved noble → resolute; no jammy binaries for rolling anymore).docker.yamlrebuild had been silently failing since ~mid-2025 and was auto-disabled by GitHub for inactivity. Root cause: expired ROS GPG key in the Dockerfile (NO_PUBKEY F42ED6FBAB17C654).rslon jammy-for-rolling, because that combo has no binary packages.Approach
.github/workflows/docker.yaml(its only job was building/pushing the CI container that's no longer used)..github/workflows/ci.yamlwith the industrial_ci pattern, matrix'd across humble/jazzy/kilted/rolling. This is the same shape used inPickNikRobotics/data_tamer,cpp_polyfills,generate_parameter_library, and mostmoveit/*repos..devcontainer/Dockerfilealone — it's used for VSCode devcontainers, orthogonal concern. (Its expired-GPG-key issue is a separate future fix if devcontainer users hit it.)Benefits
--rosdistro rollingworks because the container is noble/resolute-based (whatever rolling currently targets).docker.yamlto keep passing weekly, no ghcr.io storage costs.Test plan
🤖 Generated with Claude Code