A Github Action for linting C/C++ code integrating clang-tidy and clang-format
to collect feedback provided in the form of
file-annotations, thread-comments,
workflow step-summary, and Pull Request reviews (with
tidy-review or format-review).
Create a new GitHub Actions workflow in your project, e.g. at .github/workflows/cpp-linter.yml
The content of the file should be in the following format.
    steps:
      - uses: actions/checkout@v5
      - uses: cpp-linter/cpp-linter-action@v2
        id: linter
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          style: 'file'  # Use .clang-format config file
          tidy-checks: '' # Use .clang-tidy config file
          # only 'update' a single comment in a pull request thread.
          thread-comments: ${{ github.event_name == 'pull_request' && 'update' }}
      - name: Fail fast?!
        if: steps.linter.outputs.checks-failed > 0
        run: exit 1For all explanations of our available input parameters and output variables, see our Inputs and Outputs document.
See also our example recipes.
  
  Microsoft  
  
  Apache  
  
  NASA  
  
  Samsung  
  
  TheAlgorithms  
  
  CachyOS  
  
  
  Nextcloud  
  
  Jupyter  
  
  NNStreamer  
  
  imgproxy  
  
  Zondax  
  
  AppNeta  
  
  
  Chocolate Doom
   and many more.
Using file-annotations:
Using thread-comments:
Using step-summary:
Using tidy-review:
Using format-review:
You can show C/C++ Linter Action status with a badge in your repository README
Example
[](https://github.com/cpp-linter/cpp-linter-action/actions/workflows/cpp-linter.yml)To provide feedback (requesting a feature or reporting a bug) please post to issues.
As of v2.16.0, this action uses
This action installs nushell and uv automatically. Only nushell is added to the PATH environment variable. uv, and any standalone Python distribution it downloads, are not added to the PATH environment variable.
We only support Linux runners using a Debian-based Linux OS (like Ubuntu and many others).
This is because we first try to use the apt package manager to install clang tools.
Linux workflows that use a specific container should ensure that
the following are installed:
- GLIBC (v2.32 or later)
- wgetor- curl
- lsb-release(required by LLVM-provided install script)
- software-properties-common(required by LLVM-provided install script)
- gnupg(required by LLVM-provided install script)
apt-get update
apt-get install -y libc6 wget lsb-release software-properties-common gnupgOtherwise, nushell and/or the LLVM-provided bash script will fail to run.
The specified version of clang-format and clang-tidy is installed via Homebrew.
Failing that, we attempt to use static binaries that we built ourselves;
see cpp-linter/clang-tools-pip and cpp-linter/clang-tools-static-binaries projects for more detail.
For Windows runners, we only use clang tools built as static binaries. See cpp-linter/clang-tools-pip and cpp-linter/clang-tools-static-binaries projects for more detail.
The scripts and documentation in this project are released under the MIT License






