diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6f6e082..b7d56f0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,83 +8,39 @@ on: release: types: [ created ] -env: - REFERENCE_CONFIG: 'Ubuntu gcc13' # configuration used for coverage etc - jobs: build: - name: "${{ matrix.configurations.name }} | ${{ matrix.cmake-build-type }}" - environment: configure coverage - runs-on: ${{ matrix.configurations.os }} + name: "${{ matrix.compiler.cc }} | ${{ matrix.cmake-build-type }}" + needs: buildAndPublishDocker + runs-on: "ubuntu-latest" + container: + image: "ghcr.io/fair-acc/gr-digitizers-build-container:latest" strategy: fail-fast: false matrix: - configurations: - - name: Ubuntu gcc13 - os: ubuntu-22.04 - compiler: gcc13 - - name: Ubuntu Latest clang17 - os: ubuntu-22.04 - compiler: clang17 - - name: Ubuntu Latest emscripten - os: ubuntu-22.04 - compiler: emscripten + compiler: + - cc: gcc-14 + cxx: g++-14 + - cc: clang-18, + cxx: clang++-18 + cmake_flags: "-DCMAKE_LINKER=/usr/bin/clang-17" + - cmake_wrapper: emcmake + cc: emcc + cmake_flags: "-DENABLE_COVERAGE=OFF -DCMAKE_CROSSCOMPILING_EMULATOR=${SYSTEM_NODE}" cmake-build-type: [ Release, Debug ] - env: - BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Cache - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-fetchContent-cache with: - path: ${{runner.workspace}}/build/_deps - key: ${{ runner.os }}-${{ matrix.configurations.compiler }}-${{ matrix.cmake-build-type }}-${{ hashFiles('CMakeLists.txt') }} - - - name: Install gcovr - # packaged gcovr is too old for gcc13 - shell: bash - if: matrix.configurations.name == env.REFERENCE_CONFIG && matrix.cmake-build-type == 'Debug' - run: | - python3 -m pip install gcovr --user --no-warn-script-location - gcovr --version - - - name: Install gcc-13 - if: matrix.configurations.compiler == 'gcc13' - run: | - sudo apt-get install -y gcc-13 g++-13 # gcovr # packaged gcovr is too old for gcc13 - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 110 --slave /usr/bin/g++ g++ /usr/bin/g++-13 --slave /usr/bin/gcov gcov /usr/bin/gcov-13 - - - name: Install clang-17 - if: matrix.configurations.compiler == 'clang17' - run: | - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - - sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main' - sudo apt update - sudo apt upgrade -y # update clang14 to fix packaging conflicts - sudo apt install -y clang-17 libc++-17-dev libc++abi-17-dev - sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-17 110 - - - name: Install emscripten - if: matrix.configurations.compiler == 'emscripten' - shell: bash - run: | - cd - git clone --depth=1 https://github.com/emscripten-core/emsdk.git - cd emsdk - # Download and install the latest SDK tools. - ./emsdk install releases-bf3c159888633d232c0507f4c76cc156a43c32dc-64bit - # Make the "latest" SDK "active" for the current user. (writes .emscripten file) - ./emsdk activate releases-bf3c159888633d232c0507f4c76cc156a43c32dc-64bit - - - name: Install sonar-scanner and build-wrapper - if: matrix.configurations.compiler == 'gcc13' && matrix.cmake-build-type == 'Debug' - uses: SonarSource/sonarcloud-github-c-cpp@v2 + path: "/__w/gr-digitizers/build/_deps" + key: "${{ runner.os }}-${{ matrix.compiler }}-${{ matrix.cmake-build-type }}-${{ hashFiles('CMakeLists.txt') }}" - name: "Install timing system dependencies: etherbone" if: matrix.configurations.compiler != 'emscripten' @@ -120,50 +76,58 @@ jobs: sudo apt update sudo apt install -y udev libusb-1.0-0-dev libps3000a libps4000a libps5000a libps6000 libps6000a libx11-dev libgl1-mesa-dev libsdl2-dev || true # ignore udev errors in post install because of udev in container - - name: Configure CMake - if: matrix.configurations.compiler != 'emscripten' + - name: Configure + if: matrix.compiler.cmake_wrapper == null shell: bash + env: + CC: "${{ matrix.compiler.cc }}" + CXX: "${{ matrix.compiler.cxx }}" + CMAKE_EXPORT_COMPILE_COMMANDS: "ON" run: | - cmake -S . -B ../build -DENABLE_PICOSCOPE=TRUE -DENABLE_TIMING=TRUE -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -DENABLE_COVERAGE=${{ matrix.configurations.compiler == 'gcc13' && matrix.cmake-build-type == 'Debug'}} + cmake -S . -B ../build -DDISABLE_EXTERNAL_DEPS_WARNINGS=ON -DENABLE_PICOSCOPE=TRUE -DENABLE_TIMING=TRUE -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -DENABLE_COVERAGE=${{ matrix.configurations.compiler == 'gcc-14' && matrix.cmake-build-type == 'Debug'}} ${{ matrix.compiler.cmake_flags } - name: Configure CMake Emscripten - if: matrix.configurations.compiler == 'emscripten' + if: matrix.compiler.cmake_wrapper == 'emcmake' shell: bash run: | - source ~/emsdk/emsdk_env.sh - emcmake cmake -S . -B ../build -DENABLE_PICOSCOPE=FALSE -DENABLE_TIMING=FALSE -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} -DENABLE_COVERAGE=OFF + export SYSTEM_NODE=`which node` # use system node instead of old version distributed with emsdk for threading support + $EMSDK_HOME/emsdk activate $EMSDK_VERSION + source $EMSDK_HOME/emsdk_env.sh + ${{ matrix.compiler.cmake_wrapper }} cmake -S . -B ../build -DDISABLE_EXTERNAL_DEPS_WARNINGS=ON -DENABLE_PICOSCOPE=FALSE -DENABLE_TIMING=FALSE -DENABLE_COVERAGE=OFF -DCMAKE_BUILD_TYPE=${{ matrix.cmake-build-type }} ${{ matrix.compiler.cmake_flags }} - name: Build - if: matrix.configurations.compiler != 'gcc13' || matrix.cmake-build-type != 'Debug' shell: bash run: | - test -f ~/emsdk/emsdk_env.sh && source ~/emsdk/emsdk_env.sh + test -f $EMSDK_HOME/emsdk_env.sh && source $EMSDK_HOME/emsdk_env.sh cmake --build ../build - - name: Build with Coverage and SonarCube - if: matrix.configurations.compiler == 'gcc13' && matrix.cmake-build-type == 'Debug' - shell: bash - run: build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} cmake --build ../build - - name: execute tests - if: matrix.configurations.compiler != 'gcc13' || matrix.cmake-build-type != 'Debug' - working-directory: ${{runner.workspace}}/build + if: matrix.compiler.cc != 'gcc-14' || matrix.cmake-build-type != 'Debug' shell: bash run: ctest --output-on-failure - name: execute tests with coverage - if: matrix.configurations.compiler == 'gcc13' && matrix.cmake-build-type == 'Debug' - working-directory: ${{runner.workspace}}/build + if: matrix.compiler.cc == 'gcc-14' && matrix.cmake-build-type == 'Debug' + env: + DISABLE_SENSITIVE_TESTS: 1 # disables tests which are sensitive to execution speed and will not run with instrumented code shell: bash run: cmake --build . --target coverage + - name: execute native main binary + if: matrix.compiler.cmake_wrapper == null + shell: bash + run: ./core/src/main + + - name: execute wasm main binary with nodejs + if: matrix.compiler.cmake_wrapper != null + shell: bash + run: node --experimental-wasm-threads ./core/src/main.js + - name: Run sonar-scanner - if: matrix.configurations.compiler == 'gcc13' && matrix.cmake-build-type == 'Debug' + if: matrix.compiler.cc == 'gcc-14' && matrix.cmake-build-type == 'Debug' shell: bash env: + SONAR_HOST_URL: https://sonarcloud.io GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: | - test -f ~/emsdk/emsdk_env.sh && source ~/emsdk/emsdk_env.sh - sonar-scanner --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}" - # Consult https://docs.sonarcloud.io/advanced-setup/ci-based-analysis/sonarscanner-cli/ for more information and options + run: sonar-scanner