ci: cover every released distro, add a blocking Resolute gate - #131
Open
nbbrooks wants to merge 1 commit into
Open
ci: cover every released distro, add a blocking Resolute gate#131nbbrooks wants to merge 1 commit into
nbbrooks wants to merge 1 commit into
Conversation
This repo is released to humble, jazzy, kilted, lyrical and rolling, but CI has only ever built rolling. jazzy, kilted and lyrical ship untested -- and lyrical is the one that matters right now: it is Ubuntu Resolute *and* released, and robotiq_controllers is currently failing on its buildfarm (#109). Consolidates the four rolling binary/semi-binary workflows and the reusable-industrial-ci-with-cache.yml they called into one matrix, then widens it to jazzy, kilted and lyrical. The tier structure is preserved as-is: binary and semi-binary, with `main` and `testing` apt variants. No tier is added or removed, and the source tier keeps its own workflow. lyrical-main is the new blocking Resolute gate -- released distro, populated `main` apt (ros2_control 6.8.0). rolling-main stays non-blocking, the state #129 established, since Rolling's `main` apt has no Resolute packages yet. rolling-testing stays blocking: it is green today and is this repo's established Resolute signal. The nightly cron is kept. Unlike picknik_controllers, where cron-triggered workflows were silently auto-disabled after 60 days of inactivity and took PR coverage with them, these nightly runs are live and are currently the only working Resolute signal we have. That risk is no longer silent either: with these job names in the required status checks, a disabled workflow makes PRs unmergeable rather than quietly unchecked. Makes the semi-binary tier mean something. ros2_robotiq_gripper.rolling.repos was byte-identical to ros2_robotiq_gripper-not-released.rolling.repos, so the semi-binary jobs were exact duplicates of the binary jobs and could not fail independently. That happened because `serial` is unreleased and so must appear in both, and no *released* dependency was ever added. Adds ros2_control from master: released, so binary takes the deb while semi-binary builds the development branch. That is the tier that would have caught LoanedCommandInterface::get_value() being removed, rather than it surfacing as a buildfarm release failure. Both semi-binary jobs therefore become non-blocking -- they can now go red on upstream's schedule rather than ours. ROS Lint moves to lyrical, the newest distro whose build job is blocking, and into a ros:lyrical-ros-base container since GitHub has no 26.04 runner and setup-ros cannot install lyrical on noble. Keeps this repo's existing --linelength=121 and its three-package scope. Verified before pushing: pre-commit clean, and all three ament linters pass inside ros:lyrical-ros-base against those three packages (33 files). ci-coverage-build.yml and the source tier's `?token=` 404 are both left alone here; they are tracked in .github/workflows/README.md as separate fixes. Co-Authored-By: Claude Opus 5 (1M context) <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.
Why
This repo is released to all five distros — humble, jazzy, kilted, lyrical, rolling — but CI has only ever built rolling:
Three released distros with zero coverage — and the gap falls exactly where it hurts. lyrical is Ubuntu Resolute and released, and
robotiq_controllersis currently failing on its buildfarm (#109, lyrical job). We had no job that could have caught it.How
The four rolling binary/semi-binary workflows + the
reusable-industrial-ci-with-cache.ymlthey called → one matrix, widened to jazzy/kilted/lyrical.The tier structure is preserved exactly as-is. No tier added, none removed.
rolling-source-build.ymlkeeps its own workflow (it usesaction-ros-ci, notindustrial_ci).jazzy-mainkilted-mainlyrical-mainrolling-mainjazzy-testingkilted-testinglyrical-testingrolling-testingrolling-main + upstream-sourcerolling-testing + upstream-sourcelyrical-mainis the new blocking Resolute gate — released distro, populatedmainapt (ros2_control6.8.0).rolling-mainstays non-blocking, the state #129 established; Rolling'smainapt still has no Resolute packages.rolling-testingstays blocking — green today, and this repo's established Resolute signal. Not weakening it.The nightly cron is kept
Worth being explicit, because I removed it in the picknik_controllers equivalent (#38) and the situations are opposite. There, every cron-triggered workflow had been silently auto-disabled by GitHub after 60 days of repo inactivity — taking PR coverage with it, since the disable applies to the whole workflow. Here the nightly runs are live and are currently the only working Resolute signal in either repo, so stripping them would be a regression.
The auto-disable risk is real but no longer silent: with these job names in the branch's required status checks, a disabled workflow makes PRs unmergeable rather than quietly unchecked. That's precisely what picknik_controllers lacked.
The semi-binary tier now means something
ros2_robotiq_gripper.rolling.reposwas byte-identical toros2_robotiq_gripper-not-released.rolling.repos, so the semi-binary jobs were exact duplicates of the binary jobs and could not fail independently.That happened for a structural reason:
serialis unreleased and has no rosdep key, so it must be a source checkout in both tiers — and no released dependency was ever added to distinguish them.Adds
ros2_controlfrommaster. It is released, so the binary tier takes the deb while semi-binary builds the development branch. That difference is the entire point of the tier, and it's what would have caughtLoanedCommandInterface::get_value()being removed — which instead surfaced as a buildfarm release failure.Both semi-binary jobs therefore become non-blocking: they now track upstream's
masterand can go red on upstream's schedule rather than ours. They were only blocking before because the tier was inert.ROS Lint pinned to lyrical
The newest distro whose build job is blocking. Moved into a
ros:lyrical-ros-basecontainer, because GitHub has no 26.04 runner andsetup-roscannot install lyrical on noble — the same mismatch that has keptci-coverage-build.ymlred since the Resolute transition.Keeps this repo's existing
--linelength=121and its three-package scope (robotiq_driver,robotiq_controllers,robotiq_description).Deliberately not in this PR
Both are real but independent of the distro-coverage gap:
ci-coverage-build.ymlrunsaction-ros-cion a noble runner outside a container and has failed since Rolling moved to Resolute. Its own comment proposes the fix (wrap inindustrial_ciwithOS_CODE_NAME: resolute).reusable-ros-tooling-source-build.ymlfetches its.reposwith the deprecated?token=${{ secrets.GITHUB_TOKEN }}URL syntax and gets an HTTP 404 every time. One-line fix — drop the token, this is a public repo. (Same bug in picknik_controllers.)Both are documented in
.github/workflows/README.mdso they don't get lost.Verification
pre-commit run --all-files --hook-stage manual— cleanros:lyrical-ros-baseagainst the three packages — pass, 33 files checkedNote that
jazzy,kiltedandlyricalhave never built here, so this PR's own run is the first real signal for them. I'll report back on what it finds.Follow-up
Once this lands, required status checks should go from today's
["Format"]to:Format,ament_copyright,ament_cpplint,ament_lint_cmake,jazzy-main,kilted-main,lyrical-main,rolling-testing— excluding the non-blocking jobs, since requiring acontinue-on-errorjob defeats it.Separately: rosdistro's
source:entry for humble points atmainin this repo, which cannot build on humble (noget_optional()in humble'shardware_interface). Stale metadata worth correcting.