diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 1e87106..452e3b1 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -10,7 +10,7 @@ FROM archlinux@sha256:a10e51dd0694d6c4142754e9d06cbce7baf91ace8031a30df37064d109 RUN pacman -Syyu --noconfirm \ && pacman -Syyu --noconfirm git less vim sudo python-pip wget which pkgconf \ && pacman -Syyu --noconfirm cmake make gcc ninja meson shellcheck \ - && pacman -Syyu --noconfirm gtk4 gtkmm-4.0 boost spdlog fmt libxml++-5.0 + && pacman -Syyu --noconfirm gtk4 gtkmm-4.0 boost spdlog fmt libxml++-5.0 gtest # Create a non-root user 'dev' RUN useradd -ms /bin/bash dev \ @@ -38,6 +38,7 @@ ADD https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VER}/L # Create the LLVM directory and extract only binaries into it RUN sudo mkdir -p /home/LLVM-${LLVM_VER} RUN sudo tar -xJf /home/artifacts/LLVM-${LLVM_VER}-Linux-X64.tar.xz -C /home/LLVM-${LLVM_VER} --strip-components=1 \ + LLVM-${LLVM_VER}-Linux-X64/bin/clangd \ LLVM-${LLVM_VER}-Linux-X64/bin/clang-19 \ LLVM-${LLVM_VER}-Linux-X64/bin/clang \ LLVM-${LLVM_VER}-Linux-X64/bin/clang++ \ diff --git a/.forgejo/workflows/pr_check.yaml b/.forgejo/workflows/pr_check.yaml index df57c81..294d6e4 100644 --- a/.forgejo/workflows/pr_check.yaml +++ b/.forgejo/workflows/pr_check.yaml @@ -120,6 +120,8 @@ jobs: echo "No clang-format violations detected!" - name: GCC build + id: gcc_build + continue-on-error: true run: | mkdir -p ${{ github.workspace }}/build_gcc cmake -Wno-dev \ @@ -133,28 +135,51 @@ jobs: cmake --build ${{ github.workspace }}/build_gcc --parallel `nproc` - name: GCC unit tests + id: gcc_unit_tests + continue-on-error: true run: | cd ${{ github.workspace }}/build_gcc ./larra_xmpp_tests + - name: Clang build (only configuring) + id: clang_build + continue-on-error: true + run: | + export LLVM_VER=19.1.1 + export PATH="/home/LLVM-${LLVM_VER}/bin:${PATH}" + mkdir -p ${{ github.workspace }}/build_clang + + cmake -Wno-dev \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -S ${{ github.workspace }} \ + -B ${{ github.workspace }}/build_clang \ + -GNinja -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_EXAMPLES=ON \ + -DENABLE_TESTS=ON \ + -DCMAKE_CXX_FLAGS="-stdlib=libc++ -I/home/LLVM-${LLVM_VER}/include/c++/v1 -fno-modules" + + echo "::group::compile_commands.json content" + cat ${{ github.workspace }}/build_clang/compile_commands.json + echo "::endgroup::" + + sed -i 's|@.*\.modmap||' ${{ github.workspace }}/build_clang/compile_commands.json + - name: Check clang-tidy + id: clang_tidy + continue-on-error: true run: | export LLVM_VER=19.1.1 export PATH="/home/LLVM-${LLVM_VER}/bin:${PATH}" cd ${{ github.workspace }} - sed -i 's|/usr/sbin/g++|/home/LLVM-19.1.1/bin/clang++ -stdlib=libc++ -I/home/LLVM-${LLVM_VER}/include/c++/v1|' build_gcc/compile_commands.json - sed -i 's|-fdeps-format=p1689r5||' build_gcc/compile_commands.json - sed -i 's|-fmodules-ts||' build_gcc/compile_commands.json - sed -i 's|-fmodule-mapper=.*\.modmap||' build_gcc/compile_commands.json - wget https://raw.githubusercontent.com/llvm/llvm-project/refs/heads/main/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py python run-clang-tidy.py \ -warnings-as-errors=* \ -use-color \ -exclude-header-filter .*build.* \ -header-filter .hpp \ - -p ${{ github.workspace }}/build_gcc/ \ + -p ${{ github.workspace }}/build_clang/ \ -config-file ${{ github.workspace }}/.clang-tidy \ \ ${{ github.workspace }}/examples \ @@ -163,22 +188,9 @@ jobs: echo "No clang-tidy violations detected!" - #- name: Clang build with -fsanitize=address - # run: | - # export LLVM_VER=19.1.1 - # export PATH="/home/LLVM-${LLVM_VER}/bin:${PATH}" - # mkdir -p ${{ github.workspace }}/build_clang - # cmake -Wno-dev \ - # -DCMAKE_C_COMPILER=clang \ - # -DCMAKE_CXX_COMPILER=clang++ \ - # -S ${{ github.workspace }} \ - # -B ${{ github.workspace }}/build_clang \ - # -GNinja -DCMAKE_BUILD_TYPE=Release \ - # -DENABLE_EXAMPLES=ON \ - # -DENABLE_TESTS=ON \ - # -DCMAKE_CXX_FLAGS="-stdlib=libc++ -I/home/LLVM-${LLVM_VER}/include/c++/v1 -fno-omit-frame-pointer -g -fsanitize=address,undefined,leak,function,nullability,vptr" \ - # -DCMAKE_EXE_LINKER_FLAGS="-L/home/LLVM-${LLVM_VER}/lib/ -Wl,-rpath,/home/LLVM-${LLVM_VER}/lib -lc++ -lc++abi -lm -lc -lgcc_s -lgcc -fno-omit-frame-pointer -g -fsanitize=address,undefined,leak,function,nullability,vptr" - # cmake --build ${{ github.workspace }}/build_clang --parallel `nproc` + - name: Check on failures + if: steps.gcc_build.outcome != 'success' || steps.gcc_unit_tests.outcome != 'success' || steps.clang_build.outcome != 'success' || steps.clang_tidy.outcome != 'success' + run: exit 1 #- name: Clang unit tests with -fsanitize=address # run: |