diff --git a/.gitea/workflows/all-builds.yml b/.gitea/workflows/all-builds.yml new file mode 100644 index 0000000..06e8982 --- /dev/null +++ b/.gitea/workflows/all-builds.yml @@ -0,0 +1,332 @@ +name: All Builds + +on: + push: + pull_request: + workflow_dispatch: + +env: + QT_VERSION: 6.6.0 + +jobs: + Qtk: + env: + CONFIG: -DQTK_SUBMODULES=ON -DQTK_DEBUG=OFF -DQTK_CCACHE=OFF -DQTK_GUI=ON -DQTK_PLUGINS=OFF -DQTK_EXAMPLE=ON + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ $CONFIG + flags: -j $(nproc) + - os: windows-latest + cmake: -DCMAKE_PREFIX_PATH=D:/a/qtk/qtk/Qt/$QT_VERSION/mingw81_64/ $CONFIG + flags: '' + - os: macos-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ $CONFIG + flags: -j $(nproc) + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Install Debian packaging dependencies + if: matrix.os == 'ubuntu-latest' + run: | + apt update -y + apt install libxcb-cursor0 python3 -y + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ env.QT_VERSION }} + + # Windows + + - name: Chocolatey Action + if: matrix.os == 'windows-latest' + uses: crazy-max/ghaction-chocolatey@v2 + with: + args: install pkgconfiglite --checksum e87b5ea3c9142256af60f2d5b917aa63b571e6a0 --checksum-type sha1 + + - name: Configure Qtk Application + shell: bash + run: cmake -B build/ ${{ matrix.cmake }} + + - name: Build Qtk Application + shell: bash + run: cmake --build build/ --config Release --target qtk_gui ${{ matrix.flags }} + + - name: Build Qtk Example + if: matrix.os != 'windows-latest' + shell: bash + run: cmake --build build/ --config Release --target qtk_example ${{ matrix.flags }} + + # Packaging + + - name: Install Qtk Application + shell: bash + run: cmake --install build/ --config Release --component qtk_gui + + - name: Package Qtk Application + shell: bash + run: cmake --build build/ --target package --config Release + + - name: Package Qtk (DEB) + if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + cd build + cpack -C Release -G DEB + + - name: Upload package artifacts (DEB) + if: matrix.os == 'ubuntu-latest' + uses: actions/upload-artifact@v3 + with: + name: qtk-gui-${{ matrix.os }} + path: | + build/packages/*.deb + + - name: Package Qtk (WIN) + if: matrix.os == 'windows-latest' + shell: bash + run: | + cd build + cpack -C Release -G NSIS + + - name: Upload package artifacts (WIN) + if: matrix.os == 'windows-latest' + uses: actions/upload-artifact@v3 + with: + name: qtk-gui-${{ matrix.os }} + path: | + build/packages/*.exe + + - name: Package Qtk (OSX) + if: matrix.os == 'macos-latest' + shell: bash + run: | + cd build + cpack -C Release -G TGZ + + - name: Upload package artifacts (OSX) + if: matrix.os == 'macos-latest' + uses: actions/upload-artifact@v3 + with: + name: qtk-gui-${{ matrix.os }} + path: | + build/packages/*.tar.gz + + - name: Upload Qtk install directory + uses: actions/upload-artifact@v3 + with: + name: qtk-gui-${{ matrix.os }}-install + path: install/* + +# TODO: Enable after trimming resources. +# - name: Package Qtk Application Sources +# if: matrix.os != 'macos-latest' +# shell: bash +# run: | +# cmake --build build/ --target package_source +# +# - name: Upload package artifacts +# uses: actions/upload-artifact@v3 +# with: +# name: qtk-${{ matrix.os }}-packages +# path: | +# build/packages/* +# !build/packages/_CPack_Packages/* + + Qtk-Library: + env: + CONFIG: -DQTK_SUBMODULES=ON -DQTK_DEBUG=OFF -DQTK_CCACHE=OFF -DQTK_GUI=OFF -DQTK_PLUGINS=OFF -DQTK_EXAMPLE=OFF + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ $CONFIG + flags: -j $(nproc) + - os: windows-latest + cmake: -DCMAKE_PREFIX_PATH=D:/a/qtk/qtk/Qt/$QT_VERSION/mingw81_64/ $CONFIG + flags: '' + - os: macos-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ $CONFIG + flags: -j $(nproc) + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ env.QT_VERSION }} + + # Windows + + - name: Chocolatey Action + if: matrix.os == 'windows-latest' + uses: crazy-max/ghaction-chocolatey@v2 + with: + args: install pkgconfiglite --checksum e87b5ea3c9142256af60f2d5b917aa63b571e6a0 --checksum-type sha1 + + - name: Configure Qtk Library + shell: bash + run: cmake -B build/ ${{ matrix.cmake }} + + - name: Build Qtk Library + shell: bash + run: cmake --build build/ --config Release --target qtk_library -- ${{ matrix.flags }} + + # Packaging + + - name: Install Qtk Library + shell: bash + run: cmake --install build/ --config Release --prefix=$(pwd)/install --component qtk_library + + - name: Package Qtk Library + shell: bash + run: cmake --build build/ --target package --config Release + + - name: Package Qtk Library (DEB) + if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + cd build + cpack -C Release -G DEB + + - name: Upload package artifacts (DEB) + if: matrix.os == 'ubuntu-latest' + uses: actions/upload-artifact@v3 + with: + name: libqtk-${{ matrix.os }} + path: | + build/packages/*.deb + + - name: Package Qtk Library (WIN) + if: matrix.os == 'windows-latest' + shell: bash + run: | + cd build + cpack -C Release -G NSIS + + - name: Upload package artifacts (WIN) + if: matrix.os == 'windows-latest' + uses: actions/upload-artifact@v3 + with: + name: qtk-${{ matrix.os }} + path: | + build/packages/*.exe + + - name: Package Qtk Library (OSX) + if: matrix.os == 'macos-latest' + shell: bash + run: | + cd build + cpack -C Release -G TGZ + + - name: Upload package artifacts (OSX) + if: matrix.os == 'macos-latest' + uses: actions/upload-artifact@v3 + with: + name: qtk-${{ matrix.os }} + path: | + build/packages/*.tar.gz + + - name: Upload libqtk install + uses: actions/upload-artifact@v3 + if: always() + with: + name: libqtk-${{ matrix.os }}-install + path: install/* + + Qtk-Plugins: + env: + CONFIG: -DQTK_SUBMODULES=ON -DQTK_DEBUG=OFF -DQTK_CCACHE=OFF -DQTK_GUI=OFF -DQTK_PLUGINS=ON -DQTK_EXAMPLE=OFF + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ $CONFIG + flags: -j $(nproc) + - os: windows-latest + cmake: -DCMAKE_PREFIX_PATH=D:/a/qtk/qtk/Qt/$QT_VERSION/mingw81_64/ $CONFIG + flags: '' + - os: macos-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ $CONFIG + flags: -j $(nproc) + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ env.QT_VERSION }} + + - name: Chocolatey Action + if: matrix.os == 'windows-latest' + uses: crazy-max/ghaction-chocolatey@v2 + with: + args: install pkgconfiglite --checksum e87b5ea3c9142256af60f2d5b917aa63b571e6a0 --checksum-type sha1 + + - name: Configure Qtk Plugins + shell: bash + run: cmake -B build/ ${{ matrix.cmake }} + + - name: Build Qtk Plugins + shell: bash + run: cmake --build build/ --config Release --target qtk_plugins -- ${{ matrix.flags }} + + # Packaging + + - name: Install Qtk Plugins + shell: bash + run: cmake --install build/ --config Release --component qtk_plugins + + Qtk-Assimp-Targets: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + include: + - os: ubuntu-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ + - os: macos-latest + cmake: -DCMAKE_PREFIX_PATH=/home/runner/work/qtk/Qt/$QT_VERSION/gcc_64/ + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: ${{ env.QT_VERSION }} + + - name: Install Assimp MacOS + if: matrix.os == 'macos-latest' + shell: bash + run: | + brew install assimp + + - name: Install Assimp Ubuntu + if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + apt install libassimp-dev + + - name: Configure Qtk + shell: bash + run: cmake -B build/ ${{ matrix.cmake }} -DQTK_CCACHE=OFF -DQTK_ASSIMP_NEW_INTERFACE=ON + + - name: Build Qtk + shell: bash + run: cmake --build build/ --config Release diff --git a/.gitea/workflows/linting.yml b/.gitea/workflows/linting.yml new file mode 100644 index 0000000..d5db369 --- /dev/null +++ b/.gitea/workflows/linting.yml @@ -0,0 +1,71 @@ +name: Linting + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + Tidy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install Assimp Ubuntu + run: apt install libassimp-dev python3 + + - name: Install Qt + uses: jurplel/install-qt-action@v2 + with: + version: '6.5.0' + + - name: Build Qtk + run: | + cmake -B build -DQTK_SUBMODULES=OFF -DQTK_CCACHE=OFF -DQTK_PLUGINS=OFF -DQTK_GUI=ON + cmake --build build --target qtk_gui -- -j $(nproc) + + - uses: cpp-linter/cpp-linter-action@v2 + id: linter + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + # Use clang-tools 14 + version: '14' + # Don't use clang-format with this action + # + Set to `file` to use .clang-format (Qtk formats with clang 15) + style: '' + # Use .clang-tidy file + tidy-checks: '' + # Check the entire repo for source files to tidy + files-changed-only: false + # Ignore qtk build and external assimp directories + ignore: '.github|build|extern/assimp/assimp' + # Point to compile_commands.json produced by build + database: 'build' + # Use thread comments as feedback + thread-comments: true + # Show file annotations on GH + file-annotations: true + + - name: Fail CI if checks don't pass + if: steps.linter.outputs.checks-failed != 0 + run: exit 1 + + Format: + runs-on: ubuntu-latest + strategy: + matrix: + path: + - 'src' + - 'app' + steps: + - uses: actions/checkout@v3 + + - name: Install Assimp Ubuntu + run: apt install docker + + - name: clang-format Check + uses: jidicula/clang-format-action@v4.9.0 + with: + clang-format-version: '15' + check-path: ${{ matrix.path }}