Skip to content

ci: switch from custom-container CI to industrial_ci - #83

Merged
nbbrooks merged 3 commits into
mainfrom
nbbrooks/switch-to-industrial-ci
Jul 9, 2026
Merged

ci: switch from custom-container CI to industrial_ci#83
nbbrooks merged 3 commits into
mainfrom
nbbrooks/switch-to-industrial-ci

Conversation

@nbbrooks

@nbbrooks nbbrooks commented Jul 9, 2026

Copy link
Copy Markdown
Member

Summary

Replace the pre-baked ghcr.io/picknikrobotics/pick_ik:ci container workflow with the industrial_ci pattern used by nearly every other MoveIt/PickNik release repo.

Why

The pre-baked container approach quietly rotted:

  • The ghcr.io/picknikrobotics/pick_ik:ci image 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).
  • The weekly docker.yaml rebuild 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).
  • Meanwhile rosdep in the frozen container can't resolve modern deps like rsl on jammy-for-rolling, because that combo has no binary packages.

Approach

  • Delete .github/workflows/docker.yaml (its only job was building/pushing the CI container that's no longer used).
  • Replace .github/workflows/ci.yaml with the industrial_ci pattern, matrix'd across humble/jazzy/kilted/rolling. This is the same shape used in PickNikRobotics/data_tamer, cpp_polyfills, generate_parameter_library, and most moveit/* repos.
  • Leave .devcontainer/Dockerfile alone — it's used for VSCode devcontainers, orthogonal concern. (Its expired-GPG-key issue is a separate future fix if devcontainer users hit it.)

Benefits

  • CI always uses fresh containers matching the current ROS distro's base OS. No 2.5-year drift.
  • --rosdistro rolling works because the container is noble/resolute-based (whatever rolling currently targets).
  • Cross-distro coverage: builds against humble+jazzy+kilted+rolling instead of just rolling.
  • No container image to maintain, no docker.yaml to keep passing weekly, no ghcr.io storage costs.
  • Aligns with buildfarm expectations — if industrial_ci passes, the buildfarm is likely to pass.

Test plan

🤖 Generated with Claude Code

nbbrooks and others added 3 commits July 8, 2026 20:26
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>
@nbbrooks
nbbrooks merged commit d1cc981 into main Jul 9, 2026
5 of 6 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.

1 participant