clang-format Check
ActionsTags
(2)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.
- 3:
clang-format-3.9 - 4:
clang-format-4.0 - 5:
clang-format-5.0 - 6:
clang-format-6.0 - 7:
clang-format-7 - 8:
clang-format-8 - 9:
clang-format-9 - 10:
clang-format-10 - 11:
clang-format-11 - 12:
clang-format-12 - 13:
clang-format-13 - 14:
clang-format-14 - 15:
clang-format-15 - 16:
clang-format-16 - 17:
clang-format-17 - 18:
clang-format-18 - 19:
clang-format-19 - 20:
clang-format-20
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 increments y++ and z++ 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 of clang-format and doesn't support granular specification of clang-format minor or patch versions. It's possible that a formatting check workflow using this action and a pinned version of clang-format could break in a subsequent run if the underlying clang-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 ofclang-formatthat you want to run on your codebase.- Default:
13 - Available versions: see Versions supported
- Default:
check-path[optional]: The path to the directory in the repo that should be checked for C/C++/Protobuf formatting.- Default:
. - For cleaner output (i.e. with no double-slashed paths), the final directory in this path should have no trailing slash, e.g.
srcand notsrc/.
- Default:
fallback-style[optional]: The fallback style forclang-formatif no.clang-formatfile exists in your repository.- Default:
llvm - Available values:
LLVM,Google,Chromium,Mozilla,WebKitand others listed in theclang-formatdocs for BasedOnStyle.
- Default:
exclude-regex[optional]: A regex to exclude files or directories that should not be checked.- Default:
^$ - Pattern matching is done with a POSIX
grep -Eextended regex, not a glob expression. You can exclude multiple patterns like this:(hello|world). Build and verify your regex at regex101.com (example).
- Default:
include-regex[optional]: A regex to include files or directories that should be checked.- Default: see
INCLUDE_REGEX - Pattern matching is done with a POSIX
grep -Eextended regex, not a glob expression. You can exclude multiple patterns like this:(hello|world). Build and verify your regex at regex101.com (example).
- Default: see
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:
- Header files:
.h.H.hpp.hh.h++.hxx
- Source files:
.c.C.cpp.cc.c++.cxx.ino.pde.cu
- Protobuf files:
.proto
- SUCCESS: zero exit-code if C/C++/Protobuf files in
check-pathare formatted correctly - FAILURE: nonzero exit-code if C/C++/Protobuf files in
check-pathare 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/[email protected]
with:
clang-format-version: '13'
check-path: 'src'
fallback-style: 'Mozilla' # optionalTo 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/[email protected]
with:
clang-format-version: '13'
check-path: ${{ matrix.path }}
fallback-style: 'Mozilla' # optionalTo 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/[email protected]
with:
clang-format-version: '13'
check-path: ${{ matrix.path['check'] }}
exclude-regex: ${{ matrix.path['exclude'] }}
fallback-style: 'Mozilla' # optionalThese public repos use this Action.
Resources
clang-format Check is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.