From aacf32de28c050321b17d0c69f78891690aaf318 Mon Sep 17 00:00:00 2001 From: nevergiveupcpp Date: Fri, 20 Mar 2026 09:27:23 +0700 Subject: [PATCH] chore: add CI --- .github/CODEOWNERS | 1 + .github/workflows/ci.yml | 116 +++++++++++++++++++++++++++++++++ tests/CMakePresets.json | 76 +++++++++++++++------ tests/benchmark/CMakeLists.txt | 4 +- tests/unittest/CMakeLists.txt | 4 +- 5 files changed, 176 insertions(+), 25 deletions(-) create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/ci.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..6c0f0b0 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @nevergiveupcpp \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ed2dad2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,116 @@ +name: CI + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + +jobs: + unittests: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + if: github.event_name == 'pull_request' + + strategy: + fail-fast: false + + matrix: + include: + - name: Windows x64 / MSVC + os: windows-latest + preset: msvc-x64 + vcpkg_triplet: x64-windows + + - name: Windows x64 / Clang + os: windows-latest + preset: llvm-x64 + vcpkg_triplet: x64-windows + + - name: Windows ARM64 / MSVC + os: windows-11-arm + preset: msvc-arm64 + vcpkg_triplet: arm64-windows + + - name: Linux x64 / GCC + os: ubuntu-latest + preset: gcc-linux-x64 + vcpkg_triplet: x64-linux-dynamic + + - name: Linux ARM64 / GCC + os: ubuntu-24.04-arm + preset: gcc-linux-arm64 + vcpkg_triplet: arm64-linux + + - name: macOS ARM64 / AppleClang + os: macos-latest + preset: apple-clang-macos-arm64 + vcpkg_triplet: arm64-osx + + steps: + - uses: actions/checkout@v4 + + - name: Set VCPKG_ROOT + shell: bash + run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV + + - name: Install GTest + run: vcpkg install gtest:${{ matrix.vcpkg_triplet }} + + - name: Configure + working-directory: tests/unittest + run: cmake --preset ${{ matrix.preset }} + + - name: Build + working-directory: tests/unittest + run: cmake --build --preset ${{ matrix.preset }} --config Release + + - name: Test + working-directory: tests/unittest/build/${{ matrix.preset }} + run: ctest --build-config Release --output-on-failure + + benchmark: + name: Benchmark + runs-on: windows-latest + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + + steps: + - uses: actions/checkout@v4 + + - name: Set VCPKG_ROOT + shell: bash + run: echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV + + - name: Install Google Benchmark + run: vcpkg install benchmark:x64-windows + + - name: Configure + working-directory: tests/benchmark + run: cmake --preset msvc-x64 + + - name: Build + working-directory: tests/benchmark + run: cmake --build --preset msvc-x64 --config Release + + - name: Run + working-directory: tests/benchmark/build/msvc-x64/Release + run: ./benchmark-pvm.exe --benchmark_format=json --benchmark_out=result.json + + - name: Store results + uses: benchmark-action/github-action-benchmark@v1 + with: + tool: googlecpp + output-file-path: tests/benchmark/build/msvc-x64/Release/result.json + github-token: ${{ secrets.GITHUB_TOKEN }} + auto-push: true + comment-on-alert: true + alert-threshold: '150%' + fail-on-alert: true + + all-checks: + name: All Checks + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + needs: [unittests] + steps: + - run: echo "All checks passed" diff --git a/tests/CMakePresets.json b/tests/CMakePresets.json index 4d23eb1..94a22bf 100644 --- a/tests/CMakePresets.json +++ b/tests/CMakePresets.json @@ -37,6 +37,18 @@ "VCPKG_TARGET_TRIPLET": "x86-windows" } }, + { + "name": "msvc-arm64", + "inherits": "base-release", + "displayName": "MSVC ARM64 Release", + "binaryDir": "${sourceDir}/build/msvc-arm64", + "toolset": "v143", + "architecture": "ARM64", + "cacheVariables": { + "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreadedDLL", + "VCPKG_TARGET_TRIPLET": "arm64-windows" + } + }, { "name": "llvm-x64", "inherits": "base-release", @@ -84,32 +96,54 @@ "CMAKE_CXX_FLAGS": "-m32 -msse -msse2", "VCPKG_TARGET_TRIPLET": "x86-linux" } - } - ], - "buildPresets": [ - { - "name": "msvc-x64", - "configurePreset": "msvc-x64" - }, - { - "name": "msvc-x86", - "configurePreset": "msvc-x86" }, { - "name": "llvm-x64", - "configurePreset": "llvm-x64" - }, - { - "name": "gcc-mingw-x64", - "configurePreset": "gcc-mingw-x64" + "name": "clang-linux-x64", + "inherits": "base-release", + "displayName": "Clang Linux x64 Release", + "binaryDir": "${sourceDir}/build/clang-linux-x64", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", + "VCPKG_TARGET_TRIPLET": "x64-linux-dynamic" + } }, { - "name": "gcc-linux-x64", - "configurePreset": "gcc-linux-x64" + "name": "gcc-linux-arm64", + "inherits": "base-release", + "displayName": "GCC Linux ARM64 Release", + "binaryDir": "${sourceDir}/build/gcc-linux-arm64", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_C_COMPILER": "gcc", + "CMAKE_CXX_COMPILER": "g++", + "VCPKG_TARGET_TRIPLET": "arm64-linux" + } }, { - "name": "gcc-linux-x86", - "configurePreset": "gcc-linux-x86" + "name": "apple-clang-macos-arm64", + "inherits": "base-release", + "displayName": "Apple Clang macOS ARM64 Release", + "binaryDir": "${sourceDir}/build/apple-clang-macos-arm64", + "generator": "Ninja", + "cacheVariables": { + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", + "VCPKG_TARGET_TRIPLET": "arm64-osx" + } } + ], + "buildPresets": [ + { "name": "msvc-x64", "configurePreset": "msvc-x64" }, + { "name": "msvc-x86", "configurePreset": "msvc-x86" }, + { "name": "msvc-arm64", "configurePreset": "msvc-arm64" }, + { "name": "llvm-x64", "configurePreset": "llvm-x64" }, + { "name": "gcc-mingw-x64", "configurePreset": "gcc-mingw-x64" }, + { "name": "gcc-linux-x64", "configurePreset": "gcc-linux-x64" }, + { "name": "gcc-linux-x86", "configurePreset": "gcc-linux-x86" }, + { "name": "clang-linux-x64", "configurePreset": "clang-linux-x64" }, + { "name": "gcc-linux-arm64", "configurePreset": "gcc-linux-arm64" }, + { "name": "apple-clang-macos-arm64", "configurePreset": "apple-clang-macos-arm64" } ] -} \ No newline at end of file +} diff --git a/tests/benchmark/CMakeLists.txt b/tests/benchmark/CMakeLists.txt index 852fd5a..00433c0 100644 --- a/tests/benchmark/CMakeLists.txt +++ b/tests/benchmark/CMakeLists.txt @@ -24,8 +24,8 @@ target_link_libraries(benchmark-obfuscxx PRIVATE target_compile_options(benchmark-obfuscxx PRIVATE $<$:/constexpr:steps10000000> - $<$:-mavx2> - $<$:-mavx2> + $<$,$>>:-mavx2> + $<$,$>>:-mavx2> ) target_compile_definitions(benchmark-obfuscxx PRIVATE diff --git a/tests/unittest/CMakeLists.txt b/tests/unittest/CMakeLists.txt index 8347416..e0f04dd 100644 --- a/tests/unittest/CMakeLists.txt +++ b/tests/unittest/CMakeLists.txt @@ -24,8 +24,8 @@ target_link_libraries(unittest-obfuscxx PRIVATE target_compile_options(unittest-obfuscxx PRIVATE $<$:/constexpr:steps10000000> - $<$:-mavx2> - $<$:-mavx2> + $<$,$>>:-mavx2> + $<$,$>>:-mavx2> ) target_compile_definitions(unittest-obfuscxx PRIVATE