InfiniTime.git

commit 73918ce8af763cfe8cbdec0336c97931724c6b63

Author: Riku Isokoski <riksu9000@gmail.com>

Add clang-tidy check to display warnings on GitHub

 .github/workflows/format.yml | 38 +++++++++++++++++++++++++++++++++++---
 tests/test-tidy.sh | 25 +++++++++++++++++++++++++


diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index 714c60bf0c6df07131148d9585887c3d92dc367a..7e1552cbf25543eab3c2af12ca683ded1b4c1f2a 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -17,9 +17,8 @@       - uses: actions/checkout@v3
         with:
           fetch-depth: 1000
 
-      - name: Configure git
-        run: |
-          git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF" --depth=1000
+      - name: Fetch base branch
+        run: git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF"
 
       - name: Install clang-format
         run: |
@@ -35,3 +34,36 @@         if: failure()
         with:
           name: Patches
           path: ./*.patch
+  test-clang-tidy:
+    runs-on: ubuntu-latest
+    container:
+      image: infinitime/infinitime-build
+    steps:
+    # This workaround fixes the error "unsafe repository (REPO is owned by someone else)".
+    # See https://github.com/actions/checkout/issues/760 and https://github.com/actions/checkout/issues/766
+    # The fix in "actions/checkout@v2" was not sufficient as the build process also uses git (to get the current
+    # commit hash, for example).
+    - name: Workaround permission issues
+      run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
+    - name: Checkout source files
+      uses: actions/checkout@v3
+      with:
+        submodules: recursive
+        fetch-depth: 1000
+    - name: Fetch base branch
+      run: git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF"
+    - name: Install clang-tidy
+      run: |
+        apt-get update
+        apt-get -y install clang-tidy-12
+    - name: Prepare environment
+      shell: bash
+      env:
+        SOURCES_DIR: .
+      run: |
+        . docker/build.sh
+        GetGcc
+        GetNrfSdk
+        GetMcuBoot
+        CmakeGenerate
+    - run: tests/test-tidy.sh




diff --git a/tests/test-tidy.sh b/tests/test-tidy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f1ee5feda02ee57fbb7999fcfba8949060d11e6a
--- /dev/null
+++ b/tests/test-tidy.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+set -e
+
+if [ -z "$GITHUB_BASE_REF" ]
+then
+  echo "This script is only meant to be run in a GitHub Workflow"
+  exit 1
+fi
+
+CHANGED_FILES=$(git diff --name-only "$GITHUB_BASE_REF"...HEAD)
+
+for file in $CHANGED_FILES
+do
+  [ -e "$file" ] || continue
+  case "$file" in
+  src/libs/*|src/FreeRTOS/*) continue ;;
+  *.cpp|*.h)
+    echo "::group::$file"
+    clang-tidy-12 -p build "$file" || true
+    echo "::endgroup::"
+  esac
+done
+
+exit 0