An action for clang-format
checks. This action does NOT format your code for you - it only verifies that your repository's code follows your project's formatting conventions.
You can define your own formatting rules in a .clang-format
file at your repository root, or you can provide a fallback style (see fallback-style
). You can also provide a path to check. If you want to run checks against multiple paths in your repository, you can use this action in a matrix run.
clang-format-3.9
clang-format-4.0
clang-format-5.0
clang-format-6.0
clang-format-7
clang-format-8
clang-format-9
clang-format-10
clang-format-11
clang-format-12
clang-format-13
clang-format-14
clang-format-15
clang-format-16
clang-format-17
clang-format-18
[!IMPORTANT] This action complies with the Semantic Versioning spec for how it's called from GitHub Actions workflows. This means that for version format
x.y.z
, minor and patch version incrementsy++
andz++
will not break existing functionality for how this action is called in your GitHub Actions workflows. Major version increments (x++
) will include breaking changes in how this action is called. If you notice version changes that violate this guarantee, open an issue and let's work together to fix it 😁.[!CAUTION] I provide no guarantees for formatting breakages within
clang-format
versions. This action only supports major versions ofclang-format
and doesn't support granular specification ofclang-format
minor or patch versions. It's possible that a formatting check workflow using this action and a pinned version ofclang-format
could break in a subsequent run if the underlyingclang-format
Ubuntu package has introduced a breaking minor or patch version change. I'm not sure how often this happens - vote in this poll and optionally leave a comment so I can understand this problem more.
You can sponsor me here!
clang-format-version
[optional]: The major version of clang-format
that you want to run on your codebase.
13
check-path
[optional]: The path to the directory in the repo that should be checked for C/C++/Protobuf formatting.
.
src
and not src/
.fallback-style
[optional]: The fallback style for clang-format
if no .clang-format
file exists in your repository.
llvm
LLVM
, Google
, Chromium
, Mozilla
, WebKit
and others listed in the clang-format
docs for BasedOnStyle.exclude-regex
[optional]: A regex to exclude files or directories that should not be checked.
^$
grep -E
extended regex, not a glob expression. You can exclude multiple patterns like this: (hello|world)
. Build and verify your regex at regex101.com (example).include-regex
[optional]: A regex to include files or directories that should be checked.
INCLUDE_REGEX
grep -E
extended regex, not a glob expression. You can exclude multiple patterns like this: (hello|world)
. Build and verify your regex at regex101.com (example).This action checks all C/C++/Protobuf (including Arduino .ino
and .pde
) files in the provided directory in the GitHub workspace are formatted correctly using clang-format
. If no directory is provided or the provided path is not a directory in the GitHub workspace, all C/C++/Protobuf files are checked.
The following file extensions are checked by default:
.h
.H
.hpp
.hh
.h++
.hxx
.c
.C
.cpp
.cc
.c++
.cxx
.ino
.pde
.cu
.proto
check-path
are formatted correctlycheck-path
are not formatted correctly[!WARNING] This action is not supported on
windows
GitHub Actions runners!
To use this action, create a .github/workflows/clang-format-check.yml
in your repository containing:
name: clang-format Check
on: [push, pull_request]
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++/Protobuf programs.
uses: jidicula/clang-format-action@v4.13.0
with:
clang-format-version: '13'
check-path: 'src'
fallback-style: 'Mozilla' # optional
To use this action on multiple paths in parallel, create a .github/workflows/clang-format-check.yml
in your repository containing:
name: clang-format Check
on: [push, pull_request]
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
strategy:
matrix:
path:
- 'src'
- 'examples'
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++/Protobuf programs.
uses: jidicula/clang-format-action@v4.13.0
with:
clang-format-version: '13'
check-path: ${{ matrix.path }}
fallback-style: 'Mozilla' # optional
To use this action on multiple paths in parallel with exclusions, create a .github/workflows/clang-format-check.yml
in your repository containing:
name: clang-format Check
on: [push, pull_request]
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
strategy:
matrix:
path:
- check: 'src'
exclude: '(hello|world)' # Exclude file paths containing "hello" or "world"
- check: 'examples'
exclude: '' # Nothing to exclude
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++/Protobuf programs.
uses: jidicula/clang-format-action@v4.13.0
with:
clang-format-version: '13'
check-path: ${{ matrix.path['check'] }}
exclude-regex: ${{ matrix.path['exclude'] }}
fallback-style: 'Mozilla' # optional
These public repos use this Action.