diff --git a/.ci/docker/ubuntu.Dockerfile b/.ci/docker/ubuntu.Dockerfile deleted file mode 100644 index e71b915..0000000 --- a/.ci/docker/ubuntu.Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -# Using a non-LTS Ubuntu, just until CMake 3.25 is available on Ubuntu 24.04 -FROM ubuntu:23.10 - -# Install dependencies, -RUN apt-get update -RUN apt-get install -y \ - clang \ - clang-tidy \ - g++ \ - ninja-build \ - cmake \ - git -RUN apt-get clean - -WORKDIR /workarea -COPY ./ ./ - -# Set build arguments. -ARG cc=gcc -ARG cxx=g++ -ARG cmake_args= - -# Workaround Ubuntu broken ASan -RUN sysctl vm.mmap_rnd_bits=28 - -# Build. -ENV CC="$cc" CXX="$cxx" CMAKE_GENERATOR="Ninja Multi-Config" CMAKE_EXPORT_COMPILE_COMMANDS=on -RUN ls -lR src -RUN cmake -B build -S . "$cmake_args" -RUN cmake --build build --config Release --verbose -RUN cmake --build build --config Release --target all_verify_interface_header_sets -RUN cmake --install build --config Release --prefix /opt/beman.exemplar -RUN cmake --build build --config Debug --verbose -RUN cmake --build build --config Debug --target all_verify_interface_header_sets -RUN cmake --install build --config Debug --prefix /opt/beman.exemplar -RUN find /opt/beman.exemplar -type f diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index dfc7998..e6eff09 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -12,63 +12,90 @@ on: jobs: test: - runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - cfg: - - { id: ubuntu-gcc-werror, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_FLAGS='-Werror=all -Werror=extra'"} - - { id: ubuntu-gcc-aubsan, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_FLAGS=-fsanitize=address -fsanitize=undefined"} - - { id: ubuntu-gcc-tsan, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_FLAGS=-fsanitize=thread"} - - { id: ubuntu-gcc-static, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: ""} - - { id: ubuntu-gcc-dynamic, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DBUILD_SHARED_LIBS=on"} - - { id: ubuntu-clang-static, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: ""} - - { id: ubuntu-clang-dynamic, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: "-DBUILD_SHARED_LIBS=on"} - - { id: ubuntu-gcc-static-cxx20, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=on"} - - { id: ubuntu-gcc-static-cxx23, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_STANDARD_REQUIRED=on"} - - { id: ubuntu-gcc-static-cxx26, platform: ubuntu, cc: gcc, cpp: g++, cmake_args: "-DCMAKE_CXX_STANDARD=26 -DCMAKE_CXX_STANDARD_REQUIRED=on"} - - { id: ubuntu-clang-static-cxx20, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: "-DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=on"} - - { id: ubuntu-clang-static-cxx23, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: "-DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_STANDARD_REQUIRED=on"} - - { id: ubuntu-clang-static-cxx26, platform: ubuntu, cc: clang, cpp: clang++, cmake_args: "-DCMAKE_CXX_STANDARD=26 -DCMAKE_CXX_STANDARD_REQUIRED=on"} + platform: [ubuntu-latest] + compiler: + - cpp: g++ + c: gcc + - cpp: clang++ + c: clang + cmake_args: + - description: "Static default" + args: "" + - description: "Dynamic default" + args: "-DBUILD_SHARED_LIBS=on" + - description: "static C++20" + args: "-DCMAKE_CXX_STANDARD=20" + - description: "static C++23" + args: "-DCMAKE_CXX_STANDARD=23" + - description: "static C++26" + args: "-DCMAKE_CXX_STANDARD=26" + include: + - platform: ubuntu-latest + compiler: + cpp: g++ + c: gcc + cmake_args: + description: "Werror" + cmake_args: "-DCMAKE_CXX_FLAGS='-Werror=all -Werror=extra'" + - platform: ubuntu-latest + compiler: + cpp: g++ + c: gcc + cmake_args: + description: "A-San" + cmake_args: "-DCMAKE_CXX_FLAGS=-fsanitize=address -fsanitize=undefined" + - platform: ubuntu-latest + compiler: + cpp: g++ + c: gcc + cmake_args: + description: "T-San" + cmake_args: "-DCMAKE_CXX_FLAGS=-fsanitize=thread" + name: "Bulid & Test: ${{ matrix.compiler.c }} ${{ matrix.cmake_args.description }}" + runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 - # GitHub runners have updated the Ubuntu Linux Kernel to use strong ASLR, - # but LLVM is not configured for this change, and thus the address - # sanitizer breaks. - # - # The next image is supposed to fix this, so if the Ubuntu image has been - # updated, this work around is no longer required. - - name: get runner image version - id: runner-image-version + - name: Install Ninja + uses: lukka/get-cmake@latest + with: + cmakeVersion: "~3.25.0" + ninjaVersion: "^1.11.1" + - name: Print installed softwares run: | - echo "image-version=$(echo $ImageVersion)" >> "$GITHUB_OUTPUT" - working-directory: . - - name: modify number of bits to use for ASLR entropy - if: ${{ steps.runner-image-version.outputs.ImageVersion }} == '20240310.1.0' + clang++ --version + g++ --version + cmake --version + ninja --version + - name: Build Release run: | - sudo sysctl -a | grep vm.mmap.rnd - sudo sysctl -w vm.mmap_rnd_bits=28 - working-directory: . - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - push: false - load: true - tags: ${{ matrix.cfg.id }} - file: .ci/docker/${{ matrix.cfg.platform }}.Dockerfile - build-args: | - cc=${{ matrix.cfg.cc }} - cxx=${{ matrix.cfg.cpp }} - cmake_args=${{ matrix.cfg.cmake_args }} - cache-from: type=gha - cache-to: type=gha,mode=max - - name: Run tests + cmake -B build -S . "${{ matrix.cmake_args.args }}" + cmake --build build --config Release --verbose + cmake --build build --config Release --target all_verify_interface_header_sets + cmake --install build --config Release --prefix /opt/beman.exemplar + find /opt/beman.exemplar -type f + env: + CC: ${{ matrix.compiler.c }} + CXX: ${{ matrix.compiler.cpp }} + CMAKE_GENERATOR: "Ninja Multi-Config" + - name: Test Release + run: ctest --test-dir build --build-config Release + - name: Build Debug run: | - docker run ${{ matrix.cfg.id }} ctest --test-dir build -C Release - docker run ${{ matrix.cfg.id }} ctest --test-dir build -C Debug + cmake -B build -S . "${{ matrix.cmake_args.args }}" + cmake --build build --config Debug --verbose + cmake --build build --config Debug --target all_verify_interface_header_sets + cmake --install build --config Debug --prefix /opt/beman.exemplar + find /opt/beman.exemplar -type f + env: + CC: ${{ matrix.compiler.c }} + CXX: ${{ matrix.compiler.cpp }} + CMAKE_GENERATOR: "Ninja Multi-Config" + - name: Test Release + run: ctest --test-dir build --build-config Debug create-issue-when-fault: runs-on: ubuntu-latest