diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 370ad16..4fc6339 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -24,6 +24,18 @@ env: GTEST_FILTER: ${{ github.event.inputs.gtest_filter || '*' }} jobs: + style-check: + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + continue-on-error: true + steps: + - name: checkout + uses: actions/checkout@v4 + - name: run style check + run: | + clang-format --version + cd test && make style_check + ubuntu: runs-on: ubuntu-latest if: > diff --git a/test/Makefile b/test/Makefile index 152f909..348bfa2 100644 --- a/test/Makefile +++ b/test/Makefile @@ -28,6 +28,11 @@ TEST_ARGS = gtest/gtest-all.cc gtest/gtest_main.cc $(OPENSSL_SUPPORT) $(ZLIB_SUP # OSS-Fuzz will define its own value for LIB_FUZZING_ENGINE. LIB_FUZZING_ENGINE ?= standalone_fuzz_target_runner.o +CLANG_FORMAT = clang-format +REALPATH = $(shell which grealpath 2>/dev/null || which realpath 2>/dev/null) +STYLE_CHECK_FILES = $(filter-out httplib.h httplib.cc, \ + $(wildcard example/*.h example/*.cc fuzzing/*.h fuzzing/*.cc *.h *.cc ../httplib.h)) + all : test test_split ./test @@ -45,6 +50,28 @@ test_split : test.cc ../httplib.h httplib.cc Makefile cert.pem check_abi: @./check-shared-library-abi-compatibility.sh +.PHONY: style_check +style_check: $(STYLE_CHECK_FILES) + @for file in $(STYLE_CHECK_FILES); do \ + $(CLANG_FORMAT) $$file > $$file.formatted; \ + if ! diff -u $$file $$file.formatted; then \ + file2=$$($(REALPATH) --relative-to=.. $$file); \ + printf "\n%*s\n" 80 | tr ' ' '#'; \ + printf "##%*s##\n" 76; \ + printf "## %-70s ##\n" "$$file2 not properly formatted. Please run clang-format."; \ + printf "##%*s##\n" 76; \ + printf "%*s\n\n" 80 | tr ' ' '#'; \ + failed=1; \ + fi; \ + rm -f $$file.formatted; \ + done; \ + if [ -n "$$failed" ]; then \ + echo "Style check failed for one or more files. See above for details."; \ + false; \ + else \ + echo "All files are properly formatted."; \ + fi + test_proxy : test_proxy.cc ../httplib.h Makefile cert.pem $(CXX) -o $@ -I.. $(CXXFLAGS) test_proxy.cc $(TEST_ARGS)