From 73918ce8af763cfe8cbdec0336c97931724c6b63 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 16 Aug 2022 16:35:59 +0300 Subject: [PATCH] Add clang-tidy check to display warnings on GitHub --- .github/workflows/format.yml | 38 +++++++++++++++++++++++++++++++++--- tests/test-tidy.sh | 25 ++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) create mode 100755 tests/test-tidy.sh diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 714c60bf..7e1552cb 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -17,9 +17,8 @@ jobs: 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 @@ jobs: 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 00000000..f1ee5fed --- /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