ci: fix SonarScan — sonarcloud-github-c-cpp action was deleted - #3808
Open
nbbrooks wants to merge 1 commit into
Open
ci: fix SonarScan — sonarcloud-github-c-cpp action was deleted#3808nbbrooks wants to merge 1 commit into
nbbrooks wants to merge 1 commit into
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3808 +/- ##
==========================================
+ Coverage 46.21% 46.26% +0.05%
==========================================
Files 726 726
Lines 59510 59511 +1
Branches 7623 7622 -1
==========================================
+ Hits 27497 27524 +27
+ Misses 31845 31820 -25
+ Partials 168 167 -1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
The `rolling-ci-ccov-sonar` job has been failing at workflow-resolution time,
before any build runs:
##[error]Unable to resolve action sonarsource/sonarcloud-github-c-cpp,
repository not found
SonarSource deleted the `sonarcloud-github-c-cpp` repository (it now 404s).
The migration path was sonarcloud-github-c-cpp -> sonarqube-github-c-cpp
(archived 2025-10-01) -> sonarqube-scan-action, which carries the old
behavior forward as the `deprecated-c-cpp` sub-action.
That sub-action is a drop-in: same composite-action interface, installs both
sonar-scanner and build-wrapper, defaults SONAR_HOST_URL to sonarcloud.io,
and appends the scanner's bin dir to $GITHUB_PATH -- so the following
`run: sonar-scanner -X ...` step keeps working unchanged.
Note this job only runs for branches pushed to moveit/moveit2 itself; the
workflow triggers `on: push`, so PRs from forks never fire it. That is
likely why a workflow that cannot resolve its own action went unnoticed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
nbbrooks
force-pushed
the
nbbrooks/fix-sonar-action
branch
from
August 2, 2026 23:55
2f50dae to
9d59631
Compare
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.
Description
The
rolling-ci-ccov-sonarjob fails in ~3 seconds, at workflow-resolution time, before anything is built:SonarSource deleted the
sonarcloud-github-c-cpprepository —https://github.com/SonarSource/sonarcloud-github-c-cppnow 404s, so.github/workflows/sonar.yamlcan never resolve its own action.Migration path upstream:
SonarSource/sonarcloud-github-c-cppSonarSource/sonarqube-github-c-cppSonarSource/sonarqube-scan-actionThe old behavior is carried forward as the
deprecated-c-cppsub-action.Why this is a safe drop-in
sonarqube-scan-action/deprecated-c-cppkeeps the same contract as the deleted action:sonar-scannerandbuild-wrapperSONAR_HOST_URLtohttps://sonarcloud.iowhen unset$GITHUB_PATHThat last point matters: the next step runs a bare
sonar-scanner -X --define project.settings=..., and it keeps working unchanged because the action still puts the binary onPATH.Why this went unnoticed
sonar.yamltriggerson: push, so it only runs for branches pushed tomoveit/moveit2itself — PRs from forks never fire it. Most contributions come from forks, so a workflow that cannot resolve its own action has been silently red for anyone pushing a branch directly.Full disclosure after pushing: with the action resolving, the job now runs 1m27s (was 3s) and gets all the way through
setup_rosdep,setup_upstream_workspace, andafter_setup_upstream_workspacebefore failing at the next step:Root cause chain (traced 2026-08-03):
ros:rolling-ros-baseis now Resolute. (The comment inci.yamlciting Carefully consider return types #878 as an open blocker is therefore stale.).docker/ci/DockerfiledoesFROM ros:${ROS_DISTRO}-ros-base, so it started building on Resolute — and immediately broke, because it hardcodesclang-format-14, which Resolute does not package (it ships 17–22; default candidate is 21):docker.yamlrun has failed since ~2026-07-13, and the publishedmoveit/moveit2:rolling-ciis stale — still the last successful noble build.sonar.yamlpins that stale noble image, somoveit_resources_panda_moveit_configcan't resolveparallel_gripper_controller, which has no noble rosdep definition (moveit2.repospullsmoveit_resourcesfrom source atros2HEAD, where that dependency is declared).SonarScan has in fact been failing on
maincontinuously since 2025-07-22 (last green run), so this PR is peeling the outer layer of a long-broken workflow rather than restoring it single-handedly.So the second layer is really a
clang-format-14pin in.docker/ci/Dockerfile. Unpinning it is not purely mechanical:FormatCI also installsclang-format-14, and moving to a newer clang-format changes formatting output and would require a repo-wide reformat. That's a maintainer decision about which version MoveIt standardizes on, so it is deliberately out of scope here.Once the image builds on Resolute again,
sonar.yamlshould work unchanged — and therolling-resolutespecial case inci.yaml(which omitsDOCKER_IMAGEprecisely because no Resolute base existed) could likely be folded back into the normalrolling-cijob.This change is still worth landing on its own: an unresolvable action is a hard stop that hides everything behind it, and removing it is what made the real blocker visible.
Note on verification
The scan step itself is gated on
steps.ici.outputs.target_test_results == '0'and needsSONAR_TOKEN, so it can't be exercised end-to-end until the image issue above is also resolved. What is verified here is that the action now resolves and the job proceeds through setup — confirmed by the run on this branch reachinginstall_upstream_dependencies.Checklist
🤖 Generated with Claude Code