Skip to content

C/C++ Linter Action | clang-format & clang-tidy

GitHub release (latest SemVer) GitHub marketplace cpp-linter MkDocs Deploy GitHub

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).

Usage

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 1

For all explanations of our available input parameters and output variables, see our Inputs and Outputs document.

See also our example recipes.

Used By

Microsoft Microsoft   Apache Apache   NASA NASA   Samsung Samsung   TheAlgorithms TheAlgorithms   CachyOS CachyOS  
Nextcloud Nextcloud   Jupyter Jupyter   NNStreamer NNStreamer   imgproxy imgproxy   Zondax Zondax   AppNeta AppNeta  
Chocolate Doom Chocolate Doom and many more.

Example

Annotations

Using --file-annotations:

clang-format annotations

format-annotation-dark format-annotation-light

clang-tidy annotations

tidy-annotation-dark tidy-annotation-light

Thread Comment

Using --thread-comments:

thread-comment-dark thread-comment-light

Expanded

thread-comment-expanded-dark thread-comment-expanded-light

Step Summary

Using --step-summary:

step-summary-dark step-summary-light

Pull Request Review

review-summary-dark review-summary-light

clang-tidy suggestion

Using --tidy-review:

tidy-review-dark tidy-review-light

clang-format suggestion

Using --format-review:

format-review-dark format-review-light

Add C/C++ Linter Action badge in README

You can show C/C++ Linter Action status with a badge in your repository README

Example

[![cpp-linter](https://github.com/cpp-linter/cpp-linter-action/actions/workflows/cpp-linter.yml/badge.svg)](https://github.com/cpp-linter/cpp-linter-action/actions/workflows/cpp-linter.yml)

cpp-linter

Have question or feedback?

To provide feedback (requesting a feature or reporting a bug) please post to issues.

Required tools installed

As of v2.16.0, this action uses

  • nushell for cross-platform compatible scripting
  • uv for driving a Python virtual environment

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.

On Linux runners

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)
  • wget or 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 gnupg

Otherwise, nushell and/or the LLVM-provided bash script will fail to run.

On macOS runners

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.

On Windows runners

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.

License

The scripts and documentation in this project are released under the MIT License