From 318ea348da066ca8efa478c1142e835f7820e3a9 Mon Sep 17 00:00:00 2001 From: Nathan Brooks Date: Wed, 8 Jul 2026 20:26:11 -0600 Subject: [PATCH 1/3] ci: switch from custom-container CI to industrial_ci MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .github/workflows/ci.yaml | 41 ++++++++++++----------------------- .github/workflows/docker.yaml | 35 ------------------------------ 2 files changed, 14 insertions(+), 62 deletions(-) delete mode 100644 .github/workflows/docker.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a770ff5..72fc63e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -4,33 +4,20 @@ on: workflow_dispatch: pull_request: push: + branches: [main] jobs: - build-and-test: - runs-on: ubuntu-22.04 - container: ghcr.io/picknikrobotics/pick_ik:ci - env: - CCACHE_DIR: ${{ github.workspace }}/.ccache + industrial_ci: + strategy: + fail-fast: false + matrix: + env: + - {ROS_DISTRO: humble, ROS_REPO: main} + - {ROS_DISTRO: jazzy, ROS_REPO: main} + - {ROS_DISTRO: kilted, ROS_REPO: main} + - {ROS_DISTRO: rolling, ROS_REPO: main} + runs-on: ubuntu-latest steps: - - name: Check out the repo - uses: actions/checkout@v4 - - name: Cache ccache - uses: pat-s/always-upload-cache@v3.0.11 - with: - path: ${{ env.CCACHE_DIR }} - key: ccache-${{ github.sha }}-${{ github.run_id }} - restore-keys: | - ccache-${{ github.sha }} - ccache - - name: Source ROS Workspaces - run: | - . /opt/ros/rolling/setup.sh - echo "$(env)" >> $GITHUB_ENV - - name: Configure - run: cmake --preset relwithdebinfo - - name: Build - working-directory: ./build/relwithdebinfo - run: ninja - - name: Test - working-directory: ./build/relwithdebinfo - run: ctest . --rerun-failed --output-on-failure + - uses: actions/checkout@v4 + - uses: ros-industrial/industrial_ci@master + env: ${{ matrix.env }} diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml deleted file mode 100644 index f7bd113..0000000 --- a/.github/workflows/docker.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: docker - -on: - workflow_dispatch: - schedule: - - cron: '0 0 * * 0' - push: - paths: - - '.devcontainer/Dockerfile' - - '.github/workflows/docker.yaml' - - 'package.xml' - -jobs: - ci-docker: - runs-on: ubuntu-22.04 - steps: - - name: Check out the repo - uses: actions/checkout@v4 - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - name: Login to Github Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - file: .devcontainer/Dockerfile - push: true - target: ci - tags: ghcr.io/picknikrobotics/pick_ik:ci From 9430e940abd3886609912cfab3b677f37d8cb8ad Mon Sep 17 00:00:00 2001 From: Nathan Brooks Date: Wed, 8 Jul 2026 20:35:53 -0600 Subject: [PATCH 2/3] Declare git as a test_depend for Catch2 FetchContent 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 --- package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/package.xml b/package.xml index 45e538f..7c2e6b9 100644 --- a/package.xml +++ b/package.xml @@ -21,6 +21,7 @@ tf2_kdl tl_expected + git moveit_resources_panda_moveit_config From 5bf033e6c8918c0b40898ef4582bb912bb35512f Mon Sep 17 00:00:00 2001 From: Nathan Brooks Date: Wed, 8 Jul 2026 20:53:11 -0600 Subject: [PATCH 3/3] ci: point rolling at ros2-testing + resolute 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 --- .github/workflows/ci.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 72fc63e..2b84c52 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -15,7 +15,11 @@ jobs: - {ROS_DISTRO: humble, ROS_REPO: main} - {ROS_DISTRO: jazzy, ROS_REPO: main} - {ROS_DISTRO: kilted, ROS_REPO: main} - - {ROS_DISTRO: rolling, ROS_REPO: main} + # Rolling has migrated to Ubuntu Resolute. Packages land in + # ros2-testing first; the ros2 (main) repo lags during the base-OS + # transition. Point at testing + resolute so we exercise real + # rolling instead of the frozen Noble fossil. + - {ROS_DISTRO: rolling, ROS_REPO: testing, OS_CODE_NAME: resolute} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4