Skip to content

Commit

Permalink
Add static analysis to CI (cieslarmichal#626)
Browse files Browse the repository at this point in the history
* Add pre-commit config file

Signed-off-by: Uilian Ries <[email protected]>

* update revision

Signed-off-by: Uilian Ries <[email protected]>

* Revert "update revision"

This reverts commit 29be8ad.

* Configure cppcheck

Signed-off-by: Uilian Ries <[email protected]>

* Configure clang tidy

Signed-off-by: Uilian Ries <[email protected]>

* Drop oclint and uwyi

Signed-off-by: Uilian Ries <[email protected]>

* Do not specify code style for now

Signed-off-by: Uilian Ries <[email protected]>

* use pytoml

Signed-off-by: Uilian Ries <[email protected]>

* checkout

Signed-off-by: Uilian Ries <[email protected]>

* Cache pip

Signed-off-by: Uilian Ries <[email protected]>

* Single build

Signed-off-by: Uilian Ries <[email protected]>

* Revert "use pytoml"

This reverts commit dd80e49.

* restore cache

Signed-off-by: Uilian Ries <[email protected]>

* restore build folder

Signed-off-by: Uilian Ries <[email protected]>

* Consider gtest as from system

Signed-off-by: Uilian Ries <[email protected]>

* Cache build folder

Signed-off-by: Uilian Ries <[email protected]>

* Try to restore conan cache

Signed-off-by: Uilian Ries <[email protected]>

* Run coverate at same build step

Signed-off-by: Uilian Ries <[email protected]>

* Show report

Signed-off-by: Uilian Ries <[email protected]>

* clang tidy

Signed-off-by: Uilian Ries <[email protected]>

* Do not run test branch

Signed-off-by: Uilian Ries <[email protected]>

* Remove steps from pre-commit

Signed-off-by: Uilian Ries <[email protected]>

* Suppress import error

Signed-off-by: Uilian Ries <[email protected]>

* Ignore clang tidy errors

Signed-off-by: Uilian Ries <[email protected]>

* Ignore clang tidy errors

Signed-off-by: Uilian Ries <[email protected]>

---------

Signed-off-by: Uilian Ries <[email protected]>
  • Loading branch information
uilianries authored and 00thirdeye00 committed Jun 20, 2024
1 parent 9468936 commit 3f0c444
Show file tree
Hide file tree
Showing 7 changed files with 215 additions and 16 deletions.
11 changes: 0 additions & 11 deletions .github/workflows/linux-clang-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,3 @@ jobs:

- name: Test
run: ctest --preset=unixlike-clang-debug

- name: Generate code coverage
working-directory: ${{github.workspace}}/build/unixlike-clang-debug
run: |
ninja faker-ccov-all \
&& llvm-cov-18 show `cat ccov/binaries.list` -instr-profile=ccov/all-merged.profdata > coverage.txt
- name: Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOVTOKEN }}
200 changes: 200 additions & 0 deletions .github/workflows/linux-static-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
name: static-analysis

on:
push:
branches:
- 'main'
workflow_dispatch:
pull_request:

jobs:
build_project:
name: ci-ubuntu-24.04-build-clang
runs-on: ubuntu-24.04

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Configure python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'

- name: Install Python dependencies
run: pip install -r .github/requirements.txt

- name: Install ccache
uses: hendrikmuhs/[email protected]

- name: Cache Conan packages
id: cache-conan
uses: actions/[email protected]
env:
cache-name: cache-conan-packages
with:
path: ~/.conan2
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('conanfile.txt') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Configure Conan profiles
run: |
CC=clang-18 \
CXX=clang++-18 \
conan profile detect --force --name clang-18
- name: Install Conan dependencies
run: |
conan install conanfile.txt \
-r conancenter \
-pr:b clang-18 \
-pr:h clang-18 \
-s compiler.cppstd=20 \
-s build_type=Debug \
-o "*:shared=True" \
-c:b tools.build:compiler_executables="{'c': '/usr/bin/clang-18', 'cpp': '/usr/bin/clang++-18'}" \
-c:h tools.build:compiler_executables="{'c': '/usr/bin/clang-18', 'cpp': '/usr/bin/clang++-18'}" \
--build=missing \
- name: Configure CMake
run: |
cmake -S ${{github.workspace}} --preset=unixlike-clang-debug \
-DCMAKE_C_COMPILER=/usr/bin/clang-18 \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++-18 \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCODE_COVERAGE:BOOL=ON \
-DBUILD_TESTING:BOOL=ON \
-DUSE_SYSTEM_DEPENDENCIES:BOOL=ON \
-DUSE_STD_FORMAT:BOOL=ON \
-DCMAKE_TOOLCHAIN_FILE=build/Debug/generators/conan_toolchain.cmake \
-DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld
- name: Build
run: cmake --build --preset=unixlike-clang-debug

- name: Generate code coverage
working-directory: ${{github.workspace}}/build/unixlike-clang-debug
run: |
ninja faker-ccov-all \
&& llvm-cov-18 show `cat ccov/binaries.list` -instr-profile=ccov/all-merged.profdata > coverage.txt \
&& llvm-cov-18 report `cat ccov/binaries.list` -instr-profile=ccov/all-merged.profdata
- name: Store build artifacts
uses: actions/upload-artifact@v4
with:
name: build-directory
path: ${{github.workspace}}/build

cppcheck:
name: cppcheck
runs-on: ubuntu-24.04
needs: build_project
outputs:
build_output: ${{ steps.build_project.outputs }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install and cache apt packages
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: cppcheck
version: 1.0

- name: Download build directory
uses: actions/download-artifact@v4
with:
name: build-directory
path: build

- name: Run cppcheck
run: |
cppcheck \
--template=gcc \
--suppress=missingIncludeSystem \
--suppress=variableScope \
--suppress=cppcheckError \
--suppress=internalAstError \
--suppress=unmatchedSuppression \
--suppress=passedByValue \
--suppress=syntaxError \
--suppress=preprocessorErrorDirective \
--inconclusive \
-I src \
-I src/common \
-I src/modules \
-I include \
--std=c++20 \
--enable=style \
--enable=performance \
--enable=warning \
--enable=portability \
--inline-suppr \
--cppcheck-build-dir=build/unixlike-clang-debug \
--project=build/unixlike-clang-debug/compile_commands.json
clang_tidy:
name: clang-tidy
runs-on: ubuntu-24.04
needs: build_project
outputs:
build_output: ${{ steps.build_project.outputs }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Cache Conan packages
id: cache-conan
uses: actions/cache/[email protected]
env:
cache-name: cache-conan-packages
with:
path: ~/.conan2
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('conanfile.txt') }}

- name: Download build directory
uses: actions/download-artifact@v4
with:
name: build-directory
path: build

- name: Run clang-tidy
run: |
run-clang-tidy \
-p build/unixlike-clang-debug \
-header-filter="include/*" \
-extra-arg="-std=gnu++20" || true
clang_format:
name: clang-format
runs-on: ubuntu-24.04
needs: build_project

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download build directory
uses: actions/download-artifact@v4
with:
name: build-directory
path: build

- name: Configure python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'

- name: Install Python dependencies
run: pip install pre-commit

- name: Run clang-format
# FIXME: Ignore format errors for now
run: pre-commit run clang-format --all-files --color always --verbose || true
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
fail_fast: false
repos:
- repo: https://github.com/pocc/pre-commit-hooks
rev: master
hooks:
- id: clang-format
- id: clang-tidy
args: ["-header-filter=include/.*", "-extra-arg=-std=c++20"]
- id: cppcheck
args: ["--template=gcc", "--suppress=missingIncludeSystem", "--suppress=variableScope", "--suppress=cppcheckError", "--suppress=internalAstError", "--suppress=unmatchedSuppression", "--suppress=passedByValue", "--suppress=syntaxError", "--suppress=preprocessorErrorDirective", "--inconclusive", "-I src", "-I src/common", "-I src/modules", "-I include", "--std=c++20", "--enable=style", "--enable=performance", "--enable=warning", "--enable=portability", "--inline-suppr"]
2 changes: 1 addition & 1 deletion tests/common/LuhnCheckTest.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "LuhnCheck.h"

#include <gtest/gtest.h>
#include "gtest/gtest.h"
#include <string>

using namespace faker;
Expand Down
2 changes: 1 addition & 1 deletion tests/modules/airline/AirlineTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,6 @@ TEST_F(AirlineTest, shouldGenerateFlightNumberLeadingZeros)
TEST_F(AirlineTest, shouldGenerateFlightNumberByRange)
{
const auto flightNumber = Airline::flightNumberByRange(false, {1, 6});

ASSERT_TRUE(flightNumber.length() <= 6);
}
4 changes: 2 additions & 2 deletions tests/modules/crypto/CryptoTest.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "faker-cxx/Crypto.h"

#include <regex>
#include <string>
#include <string>

#include "gtest/gtest.h"

Expand All @@ -21,7 +21,7 @@ class CryptoTest : public Test
static bool isSHA256Hash(const std::string& input)
{
const std::regex regexExp("^[a-f0-9]{64}$");

return std::regex_match(input, regexExp);
}
};
Expand Down
2 changes: 1 addition & 1 deletion tests/modules/medicine/MedicineTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <algorithm>
#include <string_view>
#include <faker-cxx/Medicine.h>
#include <gtest/gtest.h>
#include "gtest/gtest.h"

#include "medicine/MedicineData.h"

Expand Down

0 comments on commit 3f0c444

Please sign in to comment.