diff --git a/.ci.prepare_codecov b/.ci.prepare_codecov
new file mode 100755
index 0000000..91119f5
--- /dev/null
+++ b/.ci.prepare_codecov
@@ -0,0 +1,21 @@
+#!/bin/bash
+pushd $BASEDIR
+
+BLUE='\033[0;34m'
+NOCOLOR='\033[0m'
+
+apt-get install -qq lcov
+
+echo -e "${BLUE}Capture coverage info${NOCOLOR}"
+lcov --capture --directory target_ws --output-file coverage.info
+
+echo -e "${BLUE}Extract repository files${NOCOLOR}"
+lcov --extract coverage.info "$BASEDIR/target_ws/src/$TARGET_REPO_NAME/*" --output-file coverage.info
+
+echo -e "${BLUE}Filter out test files${NOCOLOR}"
+lcov --remove coverage.info '*/test/*' --output-file coverage.info
+
+echo -e "${BLUE}Output coverage data for debugging${NOCOLOR}"
+lcov --list coverage.info
+
+popd
diff --git a/.github/workflows/README.md b/.github/workflows/README.md
index 28fbd3b..3d92e0e 100644
--- a/.github/workflows/README.md
+++ b/.github/workflows/README.md
@@ -1,72 +1,105 @@
+# CI overview
-ROS2 Distro | Branch | Build status | Documentation | Released packages
-:---------: | :----: | :----------: | :-----------: | :---------------:
-**Rolling** | [`rolling`](https://github.com/PickNikRobotics/picknik_controllers/tree/rolling) | [](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/rolling-binary-build-main.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/rolling-binary-build-testing.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/rolling-semi-binary-build-main.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/rolling-semi-binary-build-testing.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/rolling-source-build.yml?branch=main) | [](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/doxygen-deploy.yml)
[Generated Doc](https://PickNikRobotics.github.io/picknik_controllers_Documentation/rolling/html/index.html) | [picknik_controllers](https://index.ros.org/p/picknik_controllers/#rolling)
+| Workflow | Trigger | Blocking | What it covers |
+|---|---|---|---|
+| [`build_and_test.yaml`](build_and_test.yaml) | PR to `main`, push to `main`, manual | see below | Build + test on every distro `main` is released to |
+| [`ci-format.yml`](ci-format.yml) | PR, manual | yes | `pre-commit` across all files |
+| [`ci-ros-lint.yml`](ci-ros-lint.yml) | PR to `main`, manual | yes | `ament_copyright`, `ament_lint_cmake`, `ament_cpplint` on **lyrical** |
+| [`jazzy-abi-compatibility.yml`](jazzy-abi-compatibility.yml) | PR to `main` | yes | ABI diff vs. the base branch |
+| [`kilted-abi-compatibility.yml`](kilted-abi-compatibility.yml) | PR to `main` | yes | ABI diff vs. the base branch |
+| [`rolling-abi-compatibility.yml`](rolling-abi-compatibility.yml) | PR to `main` | no | ABI diff vs. the base branch |
+| [`prerelease-check.yml`](prerelease-check.yml) | manual | n/a | `industrial_ci` `PRERELEASE: true` — buildfarm dry-run before tagging |
-## Build status
+## The three build tiers
+`build_and_test.yaml` keeps the escalating-lookahead ladder from the original
+stogl-robotics layout — each tier looks further into the future than the last —
+but as one matrix instead of 20 files.
-### Explanation of different build types
+### Tier 1 — binary: released debs (`main` apt)
-**NOTE**: There are three build stages checking current and future compatibility of the package.
+*"Can a user build this today?"* **These are the only jobs that gate merges.**
-[Detailed build status](.github/workflows/README.md)
+| Job | Base OS |
+|---|---|
+| `jazzy-main` | noble |
+| `kilted-main + ccov` | noble |
+| **`lyrical-main`** | **resolute** |
-1. Binary builds - against released packages (main and testing) in ROS distributions. Shows that direct local build is possible.
+`lyrical` is the Resolute gate. It is a released distro, so its `main` apt is
+populated, and every dependency this repo has is available there —
+`ros2_control` 6.8.0, `realtime_tools` 5.2.0. This is the job that would have
+caught the break that got us un-released from rolling.
- Uses repos file: `$NAME$-not-released..repos`
+### Tier 2 — binary against `testing` apt
-1. Semi-binary builds - against released core ROS packages (main and testing), but the immediate dependencies are pulled from source.
- Shows that local build with dependencies is possible and if fails there we can expect that after the next package sync we will not be able to build.
+*"What breaks at the next sync?"* `jazzy-testing`, `kilted-testing`,
+`lyrical-testing`, `rolling-testing`. All non-blocking.
- Uses repos file: `$NAME$.repos`
+Rolling appears only at this tier, because Rolling's `main` apt has no Resolute
+packages yet.
-1. Source build - also core ROS packages are build from source. It shows potential issues in the mid future.
+Non-blocking is deliberate: an upstream regression staged for release is
+something we want to *see*, not something that should block an unrelated PR.
+This repo has already been through one "7 PRs blocked on an ecosystem break"
+episode.
-ROS2 Distro | Branch | Build status | Documentation | Released packages
-:---------: | :----: | :----------: | :-----------: | :---------------:
-**Humble** | [`humble`](https://github.com/PickNikRobotics/picknik_controllers/tree/humble) | [](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/humble-binary-build-main.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/humble-binary-build-testing.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/humble-semi-binary-build-main.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/humble-semi-binary-build-testing.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/humble-source-build.yml?branch=main) | [](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/doxygen-deploy.yml)
[Generated Doc](https://PickNikRobotics.github.io/picknik_controllers_Documentation/humble/html/index.html) | [picknik_controllers](https://index.ros.org/p/picknik_controllers/#humble)
+### Tier 3 — semi-binary: immediate dependencies from source
-## Build status
+*"What breaks in the mid future?"* `rolling-testing + upstream-source`.
+Non-blocking.
+Core ROS still comes from debs, but our immediate dependencies — `ros2_control`
+and `realtime_tools` — are built from their development branches, listed in
+[`picknik_controllers.rolling.repos`](../../picknik_controllers.rolling.repos).
+This fails weeks before a breaking upstream change reaches any apt repo.
-### Explanation of different build types
+**This tier previously reported green without testing anything.** Its `.repos`
+file was an entirely commented-out placeholder, which made the semi-binary job
+byte-identical to the binary job. Wiring it up is what makes the ladder real.
+It is the tier that would have caught
+`LoanedCommandInterface::get_value()` being removed, months before it surfaced
+as a buildfarm release failure.
-**NOTE**: There are three build stages checking current and future compatibility of the package.
+Adding the same lookahead for another distro is one more matrix entry plus a
+`picknik_controllers..repos`.
-[Detailed build status](.github/workflows/README.md)
+### What was dropped
-1. Binary builds - against released packages (main and testing) in ROS distributions. Shows that direct local build is possible.
+The old **source-build** tier (core ROS itself from source, via
+`ros-tooling/action-ros-ci`) is gone. It was permanently red regardless of
+tier value: it fetched its `.repos` with the deprecated `?token=` URL syntax
+and got an HTTP 404 on every run. Rebuilding all of core ROS to test two
+controllers is also poor value — tier 3 already covers the dependencies that
+can realistically break us.
- Uses repos file: `$NAME$-not-released..repos`
+## Coverage
-1. Semi-binary builds - against released core ROS packages (main and testing), but the immediate dependencies are pulled from source.
- Shows that local build with dependencies is possible and if fails there we can expect that after the next package sync we will not be able to build.
+Runs on `kilted` (tier 1), not on rolling. Coverage attached to a non-blocking
+job silently stops reporting whenever that job breaks, and rolling breakage is
+precisely what this repo keeps hitting.
- Uses repos file: `$NAME$.repos`
+## Branches
-1. Source build - also core ROS packages are build from source. It shows potential issues in the mid future.
+`main` currently serves jazzy, kilted, lyrical and rolling. humble is served by
+the [`humble`](https://github.com/PickNikRobotics/picknik_controllers/tree/humble)
+branch, which carries its own copy of these workflows.
-ROS2 Distro | Branch | Build status | Documentation | Released packages
-:---------: | :----: | :----------: | :-----------: | :---------------:
-**Iron** | [`iron`](https://github.com/PickNikRobotics/picknik_controllers/tree/iron) | [](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/iron-binary-build-main.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/iron-binary-build-testing.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/iron-semi-binary-build-main.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/iron-semi-binary-build-testing.yml?branch=main)
[](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/iron-source-build.yml?branch=main) | [](https://github.com/PickNikRobotics/picknik_controllers/actions/workflows/doxygen-deploy.yml)
[Generated Doc](https://PickNikRobotics.github.io/picknik_controllers_Documentation/iron/html/index.html) | [picknik_controllers](https://index.ros.org/p/picknik_controllers/#iron)
+The intent is for `main` to serve **all** active distros using the source-level
+compatibility guards described in
+[moveit2#3751](https://github.com/moveit/moveit2/pull/3751). When that lands,
+re-adding humble here is a single matrix entry — no new workflow files.
-## Build status
+## No `schedule:` triggers
+Deliberate. GitHub auto-disables cron-triggered workflows after 60 days of repo
+inactivity, and it disables the **whole** workflow, not just the cron trigger.
+That is what silently took all 20 of this repo's previous build workflows offline
+between 2026-03 and 2026-08 — every workflow with a `schedule:` was disabled, and
+every workflow without one survived.
-### Explanation of different build types
-
-**NOTE**: There are three build stages checking current and future compatibility of the package.
-
-[Detailed build status](.github/workflows/README.md)
-
-1. Binary builds - against released packages (main and testing) in ROS distributions. Shows that direct local build is possible.
-
- Uses repos file: `$NAME$-not-released..repos`
-
-1. Semi-binary builds - against released core ROS packages (main and testing), but the immediate dependencies are pulled from source.
- Shows that local build with dependencies is possible and if fails there we can expect that after the next package sync we will not be able to build.
-
- Uses repos file: `$NAME$.repos`
-
-1. Source build - also core ROS packages are build from source. It shows potential issues in the mid future.
+This does cost nightly dependency-rot detection, which is what the cron was for.
+The tiers above still catch the same breakages, just on PR and push rather than
+on a timer. If a timer is wanted back, it should live somewhere that cannot
+disable the PR gate with it — a separate repository-dispatch or a scheduled
+workflow that only runs the non-blocking tiers.
diff --git a/.github/workflows/build_and_test.yaml b/.github/workflows/build_and_test.yaml
new file mode 100644
index 0000000..8f7deb9
--- /dev/null
+++ b/.github/workflows/build_and_test.yaml
@@ -0,0 +1,176 @@
+# This config uses industrial_ci (https://github.com/ros-industrial/industrial_ci.git).
+# For troubleshooting, see readme (https://github.com/ros-industrial/industrial_ci/blob/master/README.rst)
+#
+# Replaces 20 per-distro workflow files and 2 reusable workflows with one matrix.
+#
+# Deliberately has NO `schedule:` trigger. GitHub auto-disables cron-triggered
+# workflows after 60 days of repo inactivity, and it disables the whole workflow,
+# not just the cron -- which is what silently took every build job in this repo
+# offline between 2026-03 and 2026-08.
+#
+# The three-tier lookahead from the original stogl-robotics layout is preserved
+# and, for the first time, actually functional. See .github/workflows/README.md.
+
+name: Build and Test
+
+on:
+ workflow_dispatch:
+ pull_request:
+ branches:
+ - main
+ push:
+ branches:
+ - main
+
+jobs:
+ industrial_ci:
+ strategy:
+ # Without this, one failing job cancels its siblings before they report,
+ # so a job broken by the environment discards results that were still good.
+ fail-fast: false
+ matrix:
+ env:
+ # ---------------------------------------------------------------
+ # Tier 1 -- binary: build against released debs in `main` apt.
+ # "Can a user build this today?" These are the jobs that gate merges.
+ # ---------------------------------------------------------------
+ #
+ # humble is NOT built here. `main` dropped humble support in 49a5270
+ # after the ros2_control API break -- humble's hardware_interface has
+ # no `get_optional()`. humble is served by the `humble` branch and its
+ # own workflow.
+ #
+ # This is meant to be temporary. Once `main` carries source-level
+ # compatibility guards per moveit2#3751, humble comes back as one more
+ # entry in this list and the `humble` branch retires. The matrix is
+ # shaped so that is a one-line change, not a restructure.
+ - ROS_DISTRO: jazzy
+ ROS_REPO: main
+ - ROS_DISTRO: kilted
+ ROS_REPO: main
+ CCOV: true
+ # lyrical is Ubuntu Resolute AND released, so its `main` apt is
+ # populated -- ros2_control 6.8.0 and realtime_tools 5.2.0 are both
+ # there. Every dependency this repo has is available, so this is a
+ # BLOCKING Resolute gate. That is the job that would have caught the
+ # break which got us un-released from rolling.
+ - ROS_DISTRO: lyrical
+ ROS_REPO: main
+ OS_CODE_NAME: resolute
+
+ # ---------------------------------------------------------------
+ # Tier 2 -- binary against `testing` apt: what breaks at the NEXT
+ # sync. Non-blocking on purpose: an upstream regression staged for
+ # release is something we want to see, not something that should
+ # block an unrelated PR. This repo has already been through a
+ # "7 PRs blocked on an ecosystem break" episode.
+ # ---------------------------------------------------------------
+ - ROS_DISTRO: jazzy
+ ROS_REPO: testing
+ NONBLOCKING: true
+ - ROS_DISTRO: kilted
+ ROS_REPO: testing
+ NONBLOCKING: true
+ - ROS_DISTRO: lyrical
+ ROS_REPO: testing
+ OS_CODE_NAME: resolute
+ NONBLOCKING: true
+ # Rolling's `main` apt has no Resolute packages yet, so rolling only
+ # exists at this tier. Pin OS_CODE_NAME rather than trusting
+ # industrial_ci's default, which has moved once already.
+ - ROS_DISTRO: rolling
+ ROS_REPO: testing
+ OS_CODE_NAME: resolute
+ NONBLOCKING: true
+
+ # ---------------------------------------------------------------
+ # Tier 3 -- semi-binary: core ROS from debs, but our *immediate*
+ # dependencies (ros2_control, realtime_tools) built from their
+ # development branches. This is the mid-future signal: it fails weeks
+ # before a breaking upstream change reaches any apt repo.
+ #
+ # This is the tier that would have caught the removal of
+ # LoanedCommandInterface::get_value() ahead of time instead of at
+ # buildfarm-release time.
+ # ---------------------------------------------------------------
+ - ROS_DISTRO: rolling
+ ROS_REPO: testing
+ OS_CODE_NAME: resolute
+ UPSTREAM_WORKSPACE: picknik_controllers.rolling.repos
+ NONBLOCKING: true
+
+ env:
+ AFTER_RUN_TARGET_TEST: ${{ matrix.env.CCOV && './.ci.prepare_codecov' || '' }}
+ TARGET_CMAKE_ARGS: >
+ -DCMAKE_BUILD_TYPE=${{ matrix.env.CCOV && 'Debug' || 'Release'}}
+ ${{ matrix.env.CCOV && '-DCMAKE_CXX_FLAGS="--coverage" --no-warn-unused-cli' || '' }}
+ # Only meaningful for the tier-3 job. `upstream_ws` is restored from cache
+ # with different ownership than the container user, so vcs trips git's
+ # dubious-ownership check. Written directly rather than via `git config`
+ # because git is not installed yet at AFTER_INIT on a bare OS image.
+ AFTER_INIT: printf '[safe]\n\tdirectory = *\n' >> ~/.gitconfig
+ # Refresh the cached upstream checkout. Drift is desirable here -- tracking
+ # the upstream development branches is the entire point of tier 3.
+ AFTER_SETUP_UPSTREAM_WORKSPACE: ${{ matrix.env.UPSTREAM_WORKSPACE && 'vcs pull $BASEDIR/upstream_ws/src' || '' }}
+ CCACHE_DIR: ${{ github.workspace }}/.ccache
+ BASEDIR: ${{ github.workspace }}/.work
+ CACHE_PREFIX: ${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}${{ matrix.env.UPSTREAM_WORKSPACE && '-upstream' || '' }}${{ matrix.env.CCOV && '-ccov' || '' }}
+
+ name: "${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}${{ matrix.env.UPSTREAM_WORKSPACE && ' + upstream-source' || '' }}${{ matrix.env.CCOV && ' + ccov' || ''}}"
+ runs-on: ubuntu-latest
+ # Valid here because this is a step-based job. It is silently ignored on a
+ # job that calls a reusable workflow via `uses:` -- the trap that broke
+ # ros2_robotiq_gripper's workflow file until #129.
+ continue-on-error: ${{ matrix.env.NONBLOCKING || false }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: cache upstream_ws
+ if: ${{ matrix.env.UPSTREAM_WORKSPACE }}
+ uses: actions/cache@v4
+ with:
+ save-always: true
+ path: ${{ env.BASEDIR }}/upstream_ws
+ key: upstream_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles(matrix.env.UPSTREAM_WORKSPACE) }}-${{ github.run_id }}
+ restore-keys: |
+ upstream_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles(matrix.env.UPSTREAM_WORKSPACE) }}
+ # The target directory cache doesn't include the source directory because
+ # that comes from the checkout. See "prepare target_ws for cache" below.
+ - name: cache target_ws
+ if: ${{ ! matrix.env.CCOV }}
+ uses: actions/cache@v4
+ with:
+ save-always: true
+ path: ${{ env.BASEDIR }}/target_ws
+ key: target_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles('**/CMakeLists.txt', '**/package.xml') }}-${{ github.run_id }}
+ restore-keys: |
+ target_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles('**/CMakeLists.txt', '**/package.xml') }}
+ - name: cache ccache
+ uses: actions/cache@v4
+ with:
+ save-always: true
+ path: ${{ env.CCACHE_DIR }}
+ key: ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}-${{ github.run_id }}
+ restore-keys: |
+ ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}
+ ccache-${{ env.CACHE_PREFIX }}
+ - name: industrial_ci
+ uses: ros-industrial/industrial_ci@master
+ env: ${{ matrix.env }}
+ - name: upload test artifacts (on failure)
+ uses: actions/upload-artifact@v4
+ if: failure()
+ with:
+ name: test-results-${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}${{ matrix.env.UPSTREAM_WORKSPACE && '-upstream' || '' }}
+ path: ${{ env.BASEDIR }}/target_ws/**/test_results/**/*.xml
+ - name: upload codecov report
+ uses: codecov/codecov-action@v4
+ if: ${{ matrix.env.CCOV }}
+ with:
+ files: ${{ env.BASEDIR }}/coverage.info
+ - name: prepare target_ws for cache
+ if: ${{ always() && ! matrix.env.CCOV }}
+ run: |
+ du -sh ${{ env.BASEDIR }}/target_ws
+ sudo find ${{ env.BASEDIR }}/target_ws -wholename '*/test_results/*' -delete
+ sudo rm -rf ${{ env.BASEDIR }}/target_ws/src
+ du -sh ${{ env.BASEDIR }}/target_ws
diff --git a/.github/workflows/ci-coverage-build.yml b/.github/workflows/ci-coverage-build.yml
deleted file mode 100644
index ec9bf50..0000000
--- a/.github/workflows/ci-coverage-build.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-name: Coverage Build
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
-
-jobs:
- coverage:
- name: coverage build
- runs-on: ubuntu-24.04
- # Non-blocking while Rolling completes its Noble → Resolute base-OS transition.
- #
- # Observed 2026-07 on Ubuntu 24.04 (noble) runners: rosdep can't resolve
- # `realtime_tools` for noble, so `apt-get install` skips ros2_control's runtime
- # deps; the subsequent `colcon build` then fails at
- # `find_package(controller_interface REQUIRED)` in CMakeLists.txt. Upstream root
- # cause is that Rolling has migrated to Resolute and its dep chain no longer
- # resolves against noble apt. Not fixable at the workflow level here.
- #
- # Revisit when either (a) `ros-tooling/action-ros-ci` releases a version that
- # switches its runner base to Resolute, or (b) we wrap this workflow in
- # `industrial_ci` with `OS_CODE_NAME: resolute` (matching moveit2's approach).
- continue-on-error: true
- strategy:
- fail-fast: false
- env:
- ROS_DISTRO: rolling
- steps:
- - uses: ros-tooling/setup-ros@v0.7
- with:
- required-ros-distributions: ${{ env.ROS_DISTRO }}
- - uses: actions/checkout@v7
- - uses: ros-tooling/action-ros-ci@v0.4
- with:
- target-ros2-distro: ${{ env.ROS_DISTRO }}
- import-token: ${{ secrets.GITHUB_TOKEN }}
- # build all packages listed in the meta package
- package-name:
- picknik_reset_fault_controller
-
- vcs-repo-file-url: |
- https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }}/picknik_controllers-not-released.${{ env.ROS_DISTRO }}.repos
- colcon-defaults: |
- {
- "build": {
- "mixin": ["coverage-gcc"]
- }
- }
- colcon-mixin-repository: https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
- - uses: codecov/codecov-action@v7.0.0
- with:
- file: ros_ws/lcov/total_coverage.info
- flags: unittests
- name: codecov-umbrella
- - uses: actions/upload-artifact@v7
- with:
- name: colcon-logs-coverage-rolling
- path: ros_ws/log
diff --git a/.github/workflows/ci-ros-lint.yml b/.github/workflows/ci-ros-lint.yml
index 85c0f47..3aeab6b 100644
--- a/.github/workflows/ci-ros-lint.yml
+++ b/.github/workflows/ci-ros-lint.yml
@@ -1,41 +1,50 @@
name: ROS Lint
+
on:
+ workflow_dispatch:
pull_request:
+ branches:
+ - main
jobs:
ament_lint:
name: ament_${{ matrix.linter }}
- runs-on: ubuntu-24.04
- strategy:
- fail-fast: false
- matrix:
- linter: [copyright, lint_cmake]
- steps:
- - uses: actions/checkout@v7
- - uses: ros-tooling/setup-ros@v0.7
- - uses: ros-tooling/action-ros-lint@v0.1
- with:
- distribution: rolling
- linter: ${{ matrix.linter }}
- package-name:
- picknik_reset_fault_controller
-
-
- ament_lint_100:
- name: ament_${{ matrix.linter }}
- runs-on: ubuntu-24.04
+ runs-on: ubuntu-latest
+ # Pinned to lyrical: it is the newest distro whose build job in
+ # build_and_test.yaml is BLOCKING, so the linters match the toolchain that
+ # actually gates merges. rolling is newer but non-blocking, and linting
+ # against a distro we do not gate on would put lint failures on a job nobody
+ # is obliged to fix.
+ #
+ # Runs in a container rather than on the runner because lyrical is Ubuntu
+ # Resolute and GitHub has no 26.04 runner yet. ros-tooling/setup-ros on a
+ # noble runner cannot install lyrical -- that exact mismatch is what broke
+ # the old coverage job, and this avoids repeating it.
+ container: ros:lyrical-ros-base
strategy:
fail-fast: false
matrix:
- linter: [cpplint]
+ include:
+ - linter: copyright
+ apt: ament-copyright
+ args: ""
+ - linter: lint_cmake
+ apt: ament-lint-cmake
+ args: ""
+ - linter: cpplint
+ apt: ament-cpplint
+ args: "--linelength=100 --filter=-whitespace/newline"
steps:
- - uses: actions/checkout@v7
- - uses: ros-tooling/setup-ros@v0.7
- - uses: ros-tooling/action-ros-lint@v0.1
- with:
- distribution: rolling
- linter: cpplint
- arguments: "--linelength=100 --filter=-whitespace/newline"
- package-name:
- picknik_reset_fault_controller
- picknik_controllers
+ - uses: actions/checkout@v4
+ - name: install ament_${{ matrix.linter }}
+ run: |
+ apt-get update -qq
+ apt-get install -y -qq ros-lyrical-${{ matrix.apt }}
+ # Lints the repository root rather than a package list. The previous config
+ # named `picknik_controllers`, which is not a package in this repo, and
+ # never linted picknik_twist_controller at all.
+ - name: ament_${{ matrix.linter }}
+ shell: bash
+ run: |
+ source /opt/ros/lyrical/setup.bash
+ ament_${{ matrix.linter }} ${{ matrix.args }} .
diff --git a/.github/workflows/humble-abi-compatibility.yml b/.github/workflows/humble-abi-compatibility.yml
deleted file mode 100644
index 3c7244a..0000000
--- a/.github/workflows/humble-abi-compatibility.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Humble - ABI Compatibility Check
-on:
- workflow_dispatch:
- branches:
- - humble
- pull_request:
- branches:
- - humble
-
-jobs:
- abi_check:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v7
- - uses: ros-industrial/industrial_ci@master
- env:
- ROS_DISTRO: humble
- ROS_REPO: main
- ABICHECK_URL: github:${{ github.repository }}#${{ github.base_ref }}
- NOT_TEST_BUILD: true
diff --git a/.github/workflows/humble-binary-build-main.yml b/.github/workflows/humble-binary-build-main.yml
deleted file mode 100644
index 793ddcd..0000000
--- a/.github/workflows/humble-binary-build-main.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Humble Binary Build - humble
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - humble
- pull_request:
- branches:
- - humble
- push:
- branches:
- - humble
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: humble
- ros_repo: main
- upstream_workspace: picknik_controllers-not-released.humble.repos
- ref_for_scheduled_build: humble
diff --git a/.github/workflows/humble-binary-build-testing.yml b/.github/workflows/humble-binary-build-testing.yml
deleted file mode 100644
index 17f1b70..0000000
--- a/.github/workflows/humble-binary-build-testing.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Humble Binary Build - testing
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - humble
- pull_request:
- branches:
- - humble
- push:
- branches:
- - humble
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: humble
- ros_repo: testing
- upstream_workspace: picknik_controllers-not-released.humble.repos
- ref_for_scheduled_build: humble
diff --git a/.github/workflows/humble-semi-binary-build-main.yml b/.github/workflows/humble-semi-binary-build-main.yml
deleted file mode 100644
index dd3f73f..0000000
--- a/.github/workflows/humble-semi-binary-build-main.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Humble Semi-Binary Build - humble
-# description: 'Build & test that compiles the humble dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - humble
- pull_request:
- branches:
- - humble
- push:
- branches:
- - humble
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: humble
- ros_repo: main
- upstream_workspace: picknik_controllers.humble.repos
- ref_for_scheduled_build: humble
diff --git a/.github/workflows/humble-semi-binary-build-testing.yml b/.github/workflows/humble-semi-binary-build-testing.yml
deleted file mode 100644
index 6346bb2..0000000
--- a/.github/workflows/humble-semi-binary-build-testing.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Humble Semi-Binary Build - testing
-# description: 'Build & test that compiles the humble dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - humble
- pull_request:
- branches:
- - humble
- push:
- branches:
- - humble
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: humble
- ros_repo: testing
- upstream_workspace: picknik_controllers.humble.repos
- ref_for_scheduled_build: humble
diff --git a/.github/workflows/humble-source-build.yml b/.github/workflows/humble-source-build.yml
deleted file mode 100644
index ff0fd62..0000000
--- a/.github/workflows/humble-source-build.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Humble Source Build
-on:
- workflow_dispatch:
- branches:
- - humble
- push:
- branches:
- - humble
- schedule:
- # Run every day to detect flakiness and broken dependencies
- - cron: '03 3 * * *'
-
-jobs:
- source:
- uses: ./.github/workflows/reusable-ros-tooling-source-build.yml
- with:
- ros_distro: humble
- ref: humble
- ros2_repo_branch: humble
diff --git a/.github/workflows/jazzy-abi-compatibility.yml b/.github/workflows/jazzy-abi-compatibility.yml
index 9f05516..55280be 100644
--- a/.github/workflows/jazzy-abi-compatibility.yml
+++ b/.github/workflows/jazzy-abi-compatibility.yml
@@ -9,6 +9,7 @@ on:
jobs:
abi_check:
+ name: jazzy-abi
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
diff --git a/.github/workflows/jazzy-binary-build-main.yml b/.github/workflows/jazzy-binary-build-main.yml
deleted file mode 100644
index e7efd00..0000000
--- a/.github/workflows/jazzy-binary-build-main.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Jazzy Binary Build - main
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: jazzy
- ros_repo: main
- upstream_workspace: picknik_controllers-not-released.jazzy.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/jazzy-binary-build-testing.yml b/.github/workflows/jazzy-binary-build-testing.yml
deleted file mode 100644
index 72e6706..0000000
--- a/.github/workflows/jazzy-binary-build-testing.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Jazzy Binary Build - testing
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: jazzy
- ros_repo: testing
- upstream_workspace: picknik_controllers-not-released.jazzy.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/jazzy-semi-binary-build-main.yml b/.github/workflows/jazzy-semi-binary-build-main.yml
deleted file mode 100644
index 1f64272..0000000
--- a/.github/workflows/jazzy-semi-binary-build-main.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Jazzy Semi-Binary Build - main
-# description: 'Build & test that compiles the main dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: jazzy
- ros_repo: main
- upstream_workspace: picknik_controllers.jazzy.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/jazzy-semi-binary-build-testing.yml b/.github/workflows/jazzy-semi-binary-build-testing.yml
deleted file mode 100644
index 018e753..0000000
--- a/.github/workflows/jazzy-semi-binary-build-testing.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Jazzy Semi-Binary Build - testing
-# description: 'Build & test that compiles the main dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: jazzy
- ros_repo: testing
- upstream_workspace: picknik_controllers.jazzy.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/jazzy-source-build.yml b/.github/workflows/jazzy-source-build.yml
deleted file mode 100644
index d651912..0000000
--- a/.github/workflows/jazzy-source-build.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Jazzy Source Build
-on:
- workflow_dispatch:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every day to detect flakiness and broken dependencies
- - cron: '03 3 * * *'
-
-jobs:
- source:
- uses: ./.github/workflows/reusable-ros-tooling-source-build.yml
- with:
- ros_distro: jazzy
- ref: main
- ros2_repo_branch: jazzy
diff --git a/.github/workflows/kilted-abi-compatibility.yml b/.github/workflows/kilted-abi-compatibility.yml
index 7107e13..1d1f496 100644
--- a/.github/workflows/kilted-abi-compatibility.yml
+++ b/.github/workflows/kilted-abi-compatibility.yml
@@ -9,6 +9,7 @@ on:
jobs:
abi_check:
+ name: kilted-abi
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
diff --git a/.github/workflows/kilted-binary-build-main.yml b/.github/workflows/kilted-binary-build-main.yml
deleted file mode 100644
index 2bb336e..0000000
--- a/.github/workflows/kilted-binary-build-main.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Kilted Binary Build - main
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: kilted
- ros_repo: main
- upstream_workspace: picknik_controllers-not-released.kilted.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/kilted-binary-build-testing.yml b/.github/workflows/kilted-binary-build-testing.yml
deleted file mode 100644
index 84435a4..0000000
--- a/.github/workflows/kilted-binary-build-testing.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Kilted Binary Build - testing
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: kilted
- ros_repo: testing
- upstream_workspace: picknik_controllers-not-released.kilted.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/kilted-semi-binary-build-main.yml b/.github/workflows/kilted-semi-binary-build-main.yml
deleted file mode 100644
index 044fbca..0000000
--- a/.github/workflows/kilted-semi-binary-build-main.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Kilted Semi-Binary Build - main
-# description: 'Build & test that compiles the main dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: kilted
- ros_repo: main
- upstream_workspace: picknik_controllers.kilted.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/kilted-semi-binary-build-testing.yml b/.github/workflows/kilted-semi-binary-build-testing.yml
deleted file mode 100644
index bf0c20f..0000000
--- a/.github/workflows/kilted-semi-binary-build-testing.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Kilted Semi-Binary Build - testing
-# description: 'Build & test that compiles the main dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: kilted
- ros_repo: testing
- upstream_workspace: picknik_controllers.kilted.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/kilted-source-build.yml b/.github/workflows/kilted-source-build.yml
deleted file mode 100644
index 3f019f2..0000000
--- a/.github/workflows/kilted-source-build.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Kilted Source Build
-on:
- workflow_dispatch:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every day to detect flakiness and broken dependencies
- - cron: '03 3 * * *'
-
-jobs:
- source:
- uses: ./.github/workflows/reusable-ros-tooling-source-build.yml
- with:
- ros_distro: kilted
- ref: main
- ros2_repo_branch: kilted
diff --git a/.github/workflows/reusable-industrial-ci-with-cache.yml b/.github/workflows/reusable-industrial-ci-with-cache.yml
deleted file mode 100644
index af44c65..0000000
--- a/.github/workflows/reusable-industrial-ci-with-cache.yml
+++ /dev/null
@@ -1,96 +0,0 @@
-name: Reusable industrial_ci Workflow with Cache
-# Reusable action to simplify dealing with ROS/ROS2 industrial_ci builds with cache
-# author: Denis Štogl
-
-on:
- workflow_call:
- inputs:
- ref_for_scheduled_build:
- description: 'Reference on which the repo should be checkout for scheduled build. Usually is this name of a branch or a tag.'
- default: ''
- required: false
- type: string
-
- upstream_workspace:
- description: 'UPSTREAM_WORKSPACE variable for industrial_ci. Usually path to local .repos file.'
- required: true
- type: string
- ros_distro:
- description: 'ROS_DISTRO variable for industrial_ci'
- required: true
- type: string
- ros_repo:
- description: 'ROS_REPO to run for industrial_ci. Possible values: "main", "testing"'
- default: 'main'
- required: false
- type: string
- os_code_name:
- description: 'OS_CODE_NAME variable for industrial_ci'
- default: ''
- required: false
- type: string
- before_install_upstream_dependencies:
- description: 'BEFORE_INSTALL_UPSTREAM_DEPENDENCIES variable for industrial_ci'
- default: ''
- required: false
- type: string
-
- ccache_dir:
- description: 'Local path to store cache (from "github.workspace"). For standard industrial_ci configuration do not have to be changed'
- default: '.ccache'
- required: false
- type: string
- basedir:
- description: 'Local path to workspace base directory to cache (from "github.workspace"). For standard industrial_ci configuration do not have to be changed'
- default: '.work'
- required: false
- type: string
-
-
-jobs:
- reusable_industrial_ci_with_cache:
- name: ${{ inputs.ros_distro }} ${{ inputs.ros_repo }} ${{ inputs.os_code_name }}
- runs-on: ubuntu-latest
- env:
- CCACHE_DIR: ${{ github.workspace }}/${{ inputs.ccache_dir }}
- BASEDIR: ${{ github.workspace }}/${{ inputs.basedir }}
- CACHE_PREFIX: ${{ inputs.ros_distro }}-${{ inputs.upstream_workspace }}-${{ inputs.ros_repo }}-${{ github.job }}
- steps:
- - name: Checkout ${{ inputs.ref }} when build is not scheduled
- if: ${{ github.event_name != 'schedule' }}
- uses: actions/checkout@v7
- - name: Checkout ${{ inputs.ref }} on scheduled build
- if: ${{ github.event_name == 'schedule' }}
- uses: actions/checkout@v7
- with:
- ref: ${{ inputs.ref_for_scheduled_build }}
- - name: cache target_ws
- if: ${{ ! matrix.env.CCOV }}
- uses: pat-s/always-upload-cache@v3
- with:
- path: ${{ env.BASEDIR }}/target_ws
- key: target_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles('**/CMakeLists.txt', '**/package.xml') }}-${{ github.run_id }}
- restore-keys: |
- target_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles('**/CMakeLists.txt', '**/package.xml') }}
- - name: cache ccache
- uses: pat-s/always-upload-cache@v3
- with:
- path: ${{ env.CCACHE_DIR }}
- key: ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}-${{ github.run_id }}
- restore-keys: |
- ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}
- ccache-${{ env.CACHE_PREFIX }}
- - uses: 'ros-industrial/industrial_ci@master'
- env:
- UPSTREAM_WORKSPACE: ${{ inputs.upstream_workspace }}
- ROS_DISTRO: ${{ inputs.ros_distro }}
- ROS_REPO: ${{ inputs.ros_repo }}
- OS_CODE_NAME: ${{ inputs.os_code_name }}
- BEFORE_INSTALL_UPSTREAM_DEPENDENCIES: ${{ inputs.before_install_upstream_dependencies }}
- - name: prepare target_ws for cache
- if: ${{ always() && ! matrix.env.CCOV }}
- run: |
- du -sh ${{ env.BASEDIR }}/target_ws
- sudo find ${{ env.BASEDIR }}/target_ws -wholename '*/test_results/*' -delete
- sudo rm -rf ${{ env.BASEDIR }}/target_ws/src
- du -sh ${{ env.BASEDIR }}/target_ws
diff --git a/.github/workflows/reusable-ros-tooling-source-build.yml b/.github/workflows/reusable-ros-tooling-source-build.yml
deleted file mode 100644
index 20c619b..0000000
--- a/.github/workflows/reusable-ros-tooling-source-build.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-name: Reusable industrial_ci Workflow with Cache
-# Reusable action to simplify dealing with ROS/ROS2 industrial_ci builds with cache
-# author: Denis Štogl
-
-on:
- workflow_call:
- inputs:
- ros_distro:
- description: 'ROS2 distribution name'
- required: true
- type: string
- ref:
- description: 'Reference on which the repo should be checkout. Usually is this name of a branch or a tag.'
- required: true
- type: string
- ros2_repo_branch:
- description: 'Branch in the ros2/ros2 repository from which ".repos" should be used. Possible values: master (Rolling), humble, jazzy.'
- default: 'master'
- required: false
- type: string
-
-jobs:
- reusable_ros_tooling_source_build:
- name: ${{ inputs.ros_distro }} ubuntu-24.04
- runs-on: ubuntu-24.04
- strategy:
- fail-fast: false
- steps:
- - uses: ros-tooling/setup-ros@v0.7
- with:
- required-ros-distributions: ${{ inputs.ros_distro }}
- - uses: actions/checkout@v7
- with:
- ref: ${{ inputs.ref }}
- - uses: ros-tooling/action-ros-ci@v0.4
- with:
- target-ros2-distro: ${{ inputs.ros_distro }}
- # build all packages listed in the meta package
- package-name:
- picknik_reset_fault_controller
-
- vcs-repo-file-url: |
- https://raw.githubusercontent.com/ros2/ros2/${{ inputs.ros2_repo_branch }}/ros2.repos
- https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }}/picknik_controllers.${{ inputs.ros_distro }}.repos?token=${{ secrets.GITHUB_TOKEN }}
- colcon-mixin-repository: https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
- - uses: actions/upload-artifact@v7
- with:
- name: colcon-logs-ubuntu-24.04
- path: ros_ws/log
diff --git a/.github/workflows/rolling-abi-compatibility.yml b/.github/workflows/rolling-abi-compatibility.yml
index 6aca22e..e5e918e 100644
--- a/.github/workflows/rolling-abi-compatibility.yml
+++ b/.github/workflows/rolling-abi-compatibility.yml
@@ -9,6 +9,7 @@ on:
jobs:
abi_check:
+ name: rolling-abi
runs-on: ubuntu-latest
# Non-blocking while Rolling completes its Noble → Resolute base-OS transition.
# Some Rolling-on-Resolute packages currently only exist in ros2-testing apt.
diff --git a/.github/workflows/rolling-binary-build-main.yml b/.github/workflows/rolling-binary-build-main.yml
deleted file mode 100644
index 9d29b60..0000000
--- a/.github/workflows/rolling-binary-build-main.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Rolling Binary Build - main
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: rolling
- ros_repo: main
- upstream_workspace: picknik_controllers-not-released.rolling.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/rolling-binary-build-testing.yml b/.github/workflows/rolling-binary-build-testing.yml
deleted file mode 100644
index bf9ace9..0000000
--- a/.github/workflows/rolling-binary-build-testing.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Rolling Binary Build - testing
-# author: Denis Štogl
-# description: 'Build & test all dependencies from released (binary) packages.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '03 1 * * *'
-
-jobs:
- binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: rolling
- ros_repo: testing
- upstream_workspace: picknik_controllers-not-released.rolling.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/rolling-semi-binary-build-main.yml b/.github/workflows/rolling-semi-binary-build-main.yml
deleted file mode 100644
index 7eb34ae..0000000
--- a/.github/workflows/rolling-semi-binary-build-main.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Rolling Semi-Binary Build - main
-# description: 'Build & test that compiles the main dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: rolling
- ros_repo: main
- upstream_workspace: picknik_controllers.rolling.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/rolling-semi-binary-build-testing.yml b/.github/workflows/rolling-semi-binary-build-testing.yml
deleted file mode 100644
index e5754af..0000000
--- a/.github/workflows/rolling-semi-binary-build-testing.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Rolling Semi-Binary Build - testing
-# description: 'Build & test that compiles the main dependencies from source.'
-
-on:
- workflow_dispatch:
- branches:
- - main
- pull_request:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every morning to detect flakiness and broken dependencies
- - cron: '33 1 * * *'
-
-jobs:
- semi_binary:
- uses: ./.github/workflows/reusable-industrial-ci-with-cache.yml
- with:
- ros_distro: rolling
- ros_repo: testing
- upstream_workspace: picknik_controllers.rolling.repos
- ref_for_scheduled_build: main
diff --git a/.github/workflows/rolling-source-build.yml b/.github/workflows/rolling-source-build.yml
deleted file mode 100644
index 6306dc6..0000000
--- a/.github/workflows/rolling-source-build.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: Rolling Source Build
-on:
- workflow_dispatch:
- branches:
- - main
- push:
- branches:
- - main
- schedule:
- # Run every day to detect flakiness and broken dependencies
- - cron: '03 3 * * *'
-
-jobs:
- source:
- uses: ./.github/workflows/reusable-ros-tooling-source-build.yml
- with:
- ros_distro: rolling
- ref: main
- ros2_repo_branch: rolling
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..6f63de9
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,13 @@
+Any contribution that you make to this repository will
+be under the Apache 2 License, as dictated by that
+[license](http://www.apache.org/licenses/LICENSE-2.0.html):
+
+~~~
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+~~~
diff --git a/picknik_controllers-not-released.humble.repos b/picknik_controllers-not-released.humble.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers-not-released.humble.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers-not-released.jazzy.repos b/picknik_controllers-not-released.jazzy.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers-not-released.jazzy.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers-not-released.kilted.repos b/picknik_controllers-not-released.kilted.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers-not-released.kilted.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers-not-released.rolling.repos b/picknik_controllers-not-released.rolling.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers-not-released.rolling.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers.humble.repos b/picknik_controllers.humble.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers.humble.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers.jazzy.repos b/picknik_controllers.jazzy.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers.jazzy.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers.kilted.repos b/picknik_controllers.kilted.repos
deleted file mode 100644
index 1b3910e..0000000
--- a/picknik_controllers.kilted.repos
+++ /dev/null
@@ -1,6 +0,0 @@
-repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
diff --git a/picknik_controllers.rolling.repos b/picknik_controllers.rolling.repos
index 1b3910e..ca35d4b 100644
--- a/picknik_controllers.rolling.repos
+++ b/picknik_controllers.rolling.repos
@@ -1,6 +1,19 @@
+# Immediate dependencies of picknik_reset_fault_controller and
+# picknik_twist_controller, pulled from their development branches for the
+# tier-3 "semi-binary" job in .github/workflows/build_and_test.yaml.
+#
+# Everything else these packages depend on (rclcpp, geometry_msgs,
+# example_interfaces) is core ROS and comes from debs.
+#
+# This file was previously a commented-out placeholder, which made the
+# semi-binary job byte-identical to the binary job -- the middle rung of the
+# lookahead ladder reported green without testing anything.
repositories:
- ## EXAMPLE DEPENDENCY
-# :
-# type: git
-# url: git@github.com:/.git
-# version: master
+ ros2_control:
+ type: git
+ url: https://github.com/ros-controls/ros2_control.git
+ version: master
+ realtime_tools:
+ type: git
+ url: https://github.com/ros-controls/realtime_tools.git
+ version: master