Repository navigation
Open
Labels
enhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is neededsemver:majorOverrides the PR title: bump the major versionOverrides the PR title: bump the major version
Description
This is a checklist of tasks that should be implemented in v3. Work for this shall live in the v3 branch until ready for deployment.
- switch to cpp-linter-rs project. We could use a standalone binary instead of the python binding, but dependabot would not know what version is used. Alternatively, we could use the node.js binding, but packaging that in cpp-linter-action needs further investigation (because of native distributions on npmjs.org).
- switch clang-tools installer to non-python dependent project. I have written clang-tools-manager which does exactly what cpp-linter-action and clang-tools-pip does. And it is built into cpp-linter-rs, so
- there's no additional executable binary needed.
- The platform-specific steps in cpp-linter-action about installing clang tools are not needed.
- A clang tool is only installed (after file detection/filtering) if it is needed.
- Write a migration guide for v2 -> v3 and v1 -> v3. This should include changes to inputs only. Users can find information about outputs in our regular documentation because there are no breaking changes in the outputs.
Backward compatibility
We can retain v2 in a non-default branch (named v2). This would allow current workflows to keep working with
- uses: cpp-linter/cpp-linter-action@v2Dependabot updates will not update non-default branches, but that's ok. The cpp-linter-rs project will begin uploading releases to pypi, so the cpp-linter version on v2 branch should be pinned to the last pure-python release.
Reacted by Xianpeng Shen and Emmett
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is neededsemver:majorOverrides the PR title: bump the major versionOverrides the PR title: bump the major version
Activity
shenxianpeng commentedon Oct 31, 2026
I read through the updated
v3.0.0-rc0branch (e8ce711) before setting up an end-to-end run in test-cpp-linter-action. Three things I think will show up there:--jobs. The branch pinscpp-linter==2.0.0rc23from TestPyPI, which was built before #536 (cpp-linter-rs), so it rejects--jobs. The action always passes--jobs=${{ inputs.jobs }}. Running rc23 locally with--jobs=0giveserror: unexpected argument '--jobs'. A Python rc built from currentmainshould fix it, or the action could stop passing--jobssince it is ignored anyway.git ls-files --modifiedreturns nothing andgit applyis never reached. Also, extra arguments togit applyare read as more patch files, not as paths to limit the patch to. Maybe something likegit apply --include=<pathspec> $FIX_PATCH_PATH, then list what changed?tidy-review/format-reviewdon't take effect.pr_reviewis computed from all three inputs but not used; the args still use--pr-review=($env.INPUT_PR_REVIEW).Once there is a Python rc with #536–#541, I'm happy to run the full e2e (PR review, thread comment, step summary, SARIF, auto-fix on Linux/macOS/Windows) and post the results here.
2bndy5 commentedon Oct 31, 2026
INPUTS_*env changes). I can do another release crusade in the cpp-linter-rs repo, then bump this branch accordingly.git ls-files --modifiedcommand; that should be removed.--tidy-review,--format-review, and--pr-reviewwhen--pr-reviewreplaces the other two. I checked locally, and clap does not allow specifying the same arg 3 times:shenxianpeng commentedon Nov 3, 2026
Thanks for the rc.25 release crusade! When you have time, could you bump the
v3.0.0-rc0branch to it? The branch is still on e8ce711, which pinscpp-linter==2.0.0rc23, so every run still fails on--jobs. The two items from above would go in the same update:cpp-linter==2.0.0rc24(the Python package of rc.25, on TestPyPI)git ls-files --modifiedstepMeanwhile I'll run the end-to-end tests in test-cpp-linter-action against rc.25 (PR review, thread comment, step summary, SARIF, auto-fix patch on Linux, macOS and Windows) and post the results here, so we know what's left before GA.
2bndy5 commentedon Nov 3, 2026
v3.0.0-rc0 branch now on latest v2 rc release. I also removed the
--modifiedflag fromgit ls-filescommand.shenxianpeng commentedon Nov 5, 2026
Thanks for the update! I ran
v3.0.0-rc0@ 34d5522 (cpp-linter rc24 / rc.25) end to end in cpp-linter/test-cpp-linter-action#69.Works: with the workaround below, the v3 counts match v2 exactly on ubuntu x64/arm64, macOS and windows x64 (clang 21: 14 total, 15 on Windows), and windows-11-arm works too. clang 12/17/23 run fine.
jobsnow only prints the deprecation warning. The PR review, thread comment, step summary andsummary-output-fileall work.Three things still break:
summary-output-fileis set. The action always passes--summary-output-file=and--database=, and rc.25 rejects an empty path:error: a value is required for '--summary-output-file <PATH>' but none was supplied(log). Once that's set, an unsetdatabasefails the same way. Sincesummary-output-fileis empty by default, every default workflow fails. Either pass these options only when they're set (database,summary-output-file, probablyextra-args), or make cpp-linter treat an empty value as unset.git apply.git apply $env.FIX_PATCH_PATH ...$modifiedtreats every source file after the patch as another patch:error: No valid patches in input, exit 128 (log). Running^git apply $env.FIX_PATCH_PATHon its own before thegit ls-filesline fixes it.tidy-review: truealone gives no review.$pr_reviewcombines the three inputs but is never used: the action still passes--pr-review=($env.INPUT_PR_REVIEW). With rs#547 cpp-linter accepts the combination, so--pr-review=($pr_review)should do it. (Only if you want the deprecated aliases to keep working in v3.)Minor, in cpp-linter-rs: on ubuntu the log says
[ERROR]: Failed to install clang-tidy-21 via apt:followed bySuccessfully installed. It looks like apt's "does not have a stable CLI interface" warning on stderr gets logged as an error.The matrix job ran with
summary-output-fileset everywhere as a workaround; without it every job failed at item 1.Generated by Claude Code
2bndy5 commentedon Nov 6, 2026
ok, I updated the branch again.
summary-output-fileanddatabaseare conditionally passed if the value given is not empty.git applyis done beforegit ls-filesI added back the--modifiedarg to better filter files ingit add--pr-reviewvalue to the combined$pr_reviewarg in the nu script.