diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..69e90e26 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,120 @@ +# SPDX-FileCopyrightText: 2023 Klarälvdalens Datakonsult AB, a KDAB Group company +# +# SPDX-License-Identifier: MIT + +name: CI + +on: + push: + branches: + - master + - kdreports-2.2 + pull_request: + branches: + - master + - kdreports-2.2 + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-22.04 + - windows-2022 + - macos-13 + + build_type: + - Debug + - Release + + link_type: + - static + - dynamic + + config: + - qt_version: "5.15" + - qt_version: "6.6.0" + + include: + - os: ubuntu-22.04 + build_type: Release + link_type: dynamic + config: + qt_version: "6.6.0" + apt_pgks: + - llvm + pip_pgks: + - shiboken6-generator==6.6.0 pyside6==6.6.0 + + steps: + - name: Install Qt with options and default aqtversion + uses: jurplel/install-qt-action@v3 + with: + aqtversion: null # use whatever the default is + modules: ${{ matrix.config.modules }} + version: ${{ matrix.config.qt_version }} + cache: true + + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Install dependencies on Ubuntu (${{ join(matrix.config.apt_pgks, ' ') }}) + if: ${{ runner.os == 'Linux' && matrix.config.apt_pgks }} + run: | + sudo apt update -qq + echo ${{ join(matrix.config.apt_pgks, ' ') }} | xargs sudo apt install -y + + - name: Install Python dependencies (${{ join(matrix.config.pip_pgks, ' ') }}) + if: ${{ matrix.config.pip_pgks }} + run: echo ${{ join(matrix.config.pip_pgks, ' ') }} | xargs pip install + + - name: Hackery due Shiboken hardcoded paths + if: ${{ matrix.config.pip_pgks }} + run: | + sudo mkdir -p /opt/rh/gcc-toolset-10/root/usr/bin/ + sudo cp /usr/bin/g++-10 /opt/rh/gcc-toolset-10/root/usr/bin/c++ + sudo mkdir -p /opt/rh/gcc-toolset-10/root/usr/lib/gcc/x86_64-linux-gnu/10/ + sudo cp /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus /opt/rh/gcc-toolset-10/root/usr/lib/gcc/x86_64-linux-gnu/10/ + + - name: Install ninja-build tool (must be after Qt due PATH changes) + uses: turtlesec-no/get-ninja@main + + - name: Make sure MSVC is found when Ninja generator is in use + uses: ilammy/msvc-dev-cmd@v1 + + - name: Configure project + run: > + cmake -S . -B ./build -G Ninja + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + --warn-uninitialized + -Werror=dev + -DKDReports_QT6=${{ startsWith(matrix.config.qt_version, '6.') }} + -DKDReports_PYTHON_BINDINGS=${{ matrix.config.pip_pgks }} + -DPython3_FIND_VIRTUALENV=ONLY + -DKDReports_TESTS=${{ matrix.build_type == 'Debug' }} + -DKDReports_STATIC=${{ matrix.link_type == 'static' }} + -DKDReports_EXAMPLES=${{ matrix.build_type == 'Debug' }} + -DKDReports_DOCS=${{ matrix.build_type == 'Debug' && runner.os == 'Linux' }} + + - name: Build Project + run: cmake --build ./build + + - name: Run tests on Linux (offscreen) + id: ctest_linux + if: ${{ matrix.build_type == 'Debug' && runner.os == 'Linux' }} + run: ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure + env: + QT_QPA_PLATFORM: offscreen + + - name: Run tests on Windown/macOS + id: ctest_non_linux + if: ${{ matrix.build_type == 'Debug' && runner.os != 'Linux' }} + run: ctest --test-dir ./build -C ${{ matrix.build_type }} --output-on-failure + + - name: Read tests log when it fails + uses: andstor/file-reader-action@v1 + if: ${{ steps.ctest_non_linux.conclusion == 'failure' || steps.ctest_linux.conclusion == 'failure' }} + with: + path: "./build/Testing/Temporary/LastTest.log" diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 00000000..d608cfdb --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,101 @@ +# SPDX-FileCopyrightText: 2023 Klarälvdalens Datakonsult AB, a KDAB Group company +# +# SPDX-License-Identifier: MIT + +name: CI + +on: + schedule: + - cron: '0 3 * * *' + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + os: + - ubuntu-22.04 + - windows-2022 + - macos-13 + + config: + - name: ci-python-qt6 + qt_version: "6.6.0" + apt_pgks: + - llvm + + include: + - os: ubuntu-22.04 + config: + name: ci-clang-tidy-qt5 + cmake_arg: '-DCMAKE_CXX_CLANG_TIDY=clang-tidy' + qt_version: "5.15" + + - os: ubuntu-22.04 + config: + name: clazy + cmake_arg: '-DCMAKE_CXX_COMPILER=clazy' + qt_version: "5.15" + apt_pgks: + - clazy + + steps: + - name: Install Qt ${{ matrix.config.qt_version }} with options and default aqtversion + uses: jurplel/install-qt-action@v3 + with: + version: ${{ matrix.config.qt_version }} + cache: true + + - name: Install ninja-build tool (must be after Qt due PATH changes) + uses: turtlesec-no/get-ninja@main + + - name: Install dependencies on Ubuntu (${{ join(matrix.config.apt_pgks, ' ') }}) + if: ${{ runner.os == 'Linux' && matrix.config.apt_pgks }} + run: | + sudo apt update -qq + echo ${{ join(matrix.config.apt_pgks, ' ') }} | xargs sudo apt install -y + + - uses: actions/checkout@v4 + #with: + #ref: '2.0' # schedule.cron do not allow branch setting + + - uses: actions/setup-python@v4 + with: + cache: 'pip' + cache-dependency-path: '.github/workflows/pip-requirements.txt' + python-version: '3.9' + + - run: pip3.9 install -r .github/workflows/pip-requirements.txt + + - name: Make sure MSVC is found when Ninja generator is in use + if: ${{ runner.os == 'Windows' }} + uses: ilammy/msvc-dev-cmd@v1 + + - name: Hackery due Shiboken hardcoded paths + if: ${{ runner.os == 'Linux' }} + run: | + sudo mkdir -p /opt/rh/gcc-toolset-10/root/usr/bin/ + sudo cp /usr/bin/g++-10 /opt/rh/gcc-toolset-10/root/usr/bin/c++ + sudo mkdir -p /opt/rh/gcc-toolset-10/root/usr/lib/gcc/x86_64-linux-gnu/10/ + sudo cp /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus /opt/rh/gcc-toolset-10/root/usr/lib/gcc/x86_64-linux-gnu/10/ + + - name: Configure project + run: > + cmake -S . -B ./build -G Ninja ${{ matrix.config.cmake_arg }} + -DCMAKE_BUILD_TYPE=Release + --warn-uninitialized + -Werror=dev + -DKDReports_QT6=${{ startsWith(matrix.config.qt_version, '6.') }} + -DKDReports_PYTHON_BINDINGS=${{ matrix.config.pip_pgks }} + -DPython3_FIND_VIRTUALENV=ONLY + + - name: Build Project + id: ctest + run: cmake --build ./build + + - name: Read tests log when it fails + uses: andstor/file-reader-action@v1 + if: ${{ steps.ctest.conclusion == 'failure' }} + with: + path: "./build/Testing/Temporary/LastTest.log" diff --git a/.github/workflows/pip-requirements.txt b/.github/workflows/pip-requirements.txt new file mode 100644 index 00000000..e8bae0df --- /dev/null +++ b/.github/workflows/pip-requirements.txt @@ -0,0 +1,2 @@ +shiboken6-generator == 6.6.0 +pyside6 == 6.6.0