From fc800ff4879951d32cb0317ce93c9a7ce8771f9b Mon Sep 17 00:00:00 2001 From: Bruno Alexandre Rosa <1791393+brunoalr@users.noreply.github.com> Date: Sat, 17 May 2025 23:24:14 -0300 Subject: [PATCH] ci: use Ninja on Linux and macOS builds (#5939) * ci: use Ninja on linux and macos * ci: simplify parallelism --- .ci/Arch/Dockerfile | 1 + .ci/Debian11/Dockerfile | 1 + .ci/Debian12/Dockerfile | 5 +++-- .ci/Fedora41/Dockerfile | 1 + .ci/Fedora42/Dockerfile | 1 + .ci/Ubuntu22.04/Dockerfile | 1 + .ci/Ubuntu24.04/Dockerfile | 5 +++-- .ci/compile.sh | 24 ++---------------------- .ci/docker.sh | 1 + .github/workflows/desktop-build.yml | 20 +++++++++----------- 10 files changed, 23 insertions(+), 37 deletions(-) diff --git a/.ci/Arch/Dockerfile b/.ci/Arch/Dockerfile index ed46e08a9..36cf5c4ae 100644 --- a/.ci/Arch/Dockerfile +++ b/.ci/Arch/Dockerfile @@ -7,6 +7,7 @@ RUN pacman --sync --refresh --sysupgrade --needed --noconfirm \ git \ gtest \ mariadb-libs \ + ninja \ protobuf \ qt6-base \ qt6-imageformats \ diff --git a/.ci/Debian11/Dockerfile b/.ci/Debian11/Dockerfile index 8c4fbe724..b994863bf 100644 --- a/.ci/Debian11/Dockerfile +++ b/.ci/Debian11/Dockerfile @@ -16,6 +16,7 @@ RUN apt-get update && \ libqt5sql5-mysql \ libqt5svg5-dev \ libqt5websockets5-dev \ + ninja-build \ protobuf-compiler \ qt5-image-formats-plugins \ qtmultimedia5-dev \ diff --git a/.ci/Debian12/Dockerfile b/.ci/Debian12/Dockerfile index 21c4ffa29..202405b84 100644 --- a/.ci/Debian12/Dockerfile +++ b/.ci/Debian12/Dockerfile @@ -15,13 +15,14 @@ RUN apt-get update && \ libprotobuf-dev \ libqt6multimedia6 \ libqt6sql6-mysql \ - qt6-svg-dev \ - qt6-websockets-dev \ + ninja-build \ protobuf-compiler \ qt6-image-formats-plugins \ qt6-l10n-tools \ qt6-multimedia-dev \ + qt6-svg-dev \ qt6-tools-dev \ qt6-tools-dev-tools \ + qt6-websockets-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* diff --git a/.ci/Fedora41/Dockerfile b/.ci/Fedora41/Dockerfile index ab23a6052..fc9e86c2e 100644 --- a/.ci/Fedora41/Dockerfile +++ b/.ci/Fedora41/Dockerfile @@ -6,6 +6,7 @@ RUN dnf install -y \ gcc-c++ \ git \ mariadb-devel \ + ninja-build \ protobuf-devel \ qt6-{qttools,qtsvg,qtmultimedia,qtwebsockets}-devel \ qt6-qtimageformats \ diff --git a/.ci/Fedora42/Dockerfile b/.ci/Fedora42/Dockerfile index cf56ff604..ee4a856f2 100644 --- a/.ci/Fedora42/Dockerfile +++ b/.ci/Fedora42/Dockerfile @@ -6,6 +6,7 @@ RUN dnf install -y \ gcc-c++ \ git \ mariadb-devel \ + ninja-build \ protobuf-devel \ qt6-{qttools,qtsvg,qtmultimedia,qtwebsockets}-devel \ qt6-qtimageformats \ diff --git a/.ci/Ubuntu22.04/Dockerfile b/.ci/Ubuntu22.04/Dockerfile index 260f449cb..ff2e6e43b 100644 --- a/.ci/Ubuntu22.04/Dockerfile +++ b/.ci/Ubuntu22.04/Dockerfile @@ -17,6 +17,7 @@ RUN apt-get update && \ libqt6sql6-mysql \ libqt6svg6-dev \ libqt6websockets6-dev \ + ninja-build \ protobuf-compiler \ qt6-image-formats-plugins \ qt6-l10n-tools \ diff --git a/.ci/Ubuntu24.04/Dockerfile b/.ci/Ubuntu24.04/Dockerfile index d203690e1..809b2e43a 100644 --- a/.ci/Ubuntu24.04/Dockerfile +++ b/.ci/Ubuntu24.04/Dockerfile @@ -15,13 +15,14 @@ RUN apt-get update && \ libprotobuf-dev \ libqt6multimedia6 \ libqt6sql6-mysql \ - qt6-svg-dev \ - qt6-websockets-dev \ + ninja-build \ protobuf-compiler \ qt6-image-formats-plugins \ qt6-l10n-tools \ qt6-multimedia-dev \ + qt6-svg-dev \ qt6-tools-dev \ qt6-tools-dev-tools \ + qt6-websockets-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* diff --git a/.ci/compile.sh b/.ci/compile.sh index 1588c0d5f..6f51bc476 100755 --- a/.ci/compile.sh +++ b/.ci/compile.sh @@ -11,9 +11,8 @@ # --debug or --release sets the build type ie CMAKE_BUILD_TYPE # --ccache [] uses ccache and shows stats, optionally provide size # --dir sets the name of the build dir, default is "build" -# --parallel sets how many cores cmake should build with in parallel -# uses env: BUILDTYPE MAKE_INSTALL MAKE_PACKAGE PACKAGE_TYPE PACKAGE_SUFFIX MAKE_SERVER MAKE_TEST USE_CCACHE CCACHE_SIZE BUILD_DIR PARALLEL_COUNT -# (correspond to args: --debug/--release --install --package --suffix --server --test --ccache --dir --parallel ) +# uses env: BUILDTYPE MAKE_INSTALL MAKE_PACKAGE PACKAGE_TYPE PACKAGE_SUFFIX MAKE_SERVER MAKE_TEST USE_CCACHE CCACHE_SIZE BUILD_DIR CMAKE_GENERATOR +# (correspond to args: --debug/--release --install --package --suffix --server --test --ccache --dir ) # exitcode: 1 for failure, 3 for invalid arguments # Read arguments @@ -76,15 +75,6 @@ while [[ $# != 0 ]]; do BUILD_DIR="$1" shift ;; - '--parallel') - shift - if [[ $# == 0 ]]; then - echo "::error file=$0::--parallel expects an argument" - exit 3 - fi - PARALLEL_COUNT="$1" - shift - ;; *) echo "::error file=$0::unrecognized option: $1" exit 3 @@ -126,16 +116,6 @@ fi # Add cmake --build flags buildflags=(--config "$BUILDTYPE") -if [[ $PARALLEL_COUNT ]]; then - if [[ $(cmake --build /not_a_dir --parallel 2>&1 | head -1) =~ parallel ]]; then - # workaround for bionic having an old cmake - echo "this version of cmake does not support --parallel, using native build tool -j instead" - buildflags+=(-- -j "$PARALLEL_COUNT") - # note, no normal build flags should be added after this - else - buildflags+=(--parallel "$PARALLEL_COUNT") - fi -fi function ccachestatsverbose() { # note, verbose only works on newer ccache, discard the error diff --git a/.ci/docker.sh b/.ci/docker.sh index c6ec1b774..e6a900cb5 100644 --- a/.ci/docker.sh +++ b/.ci/docker.sh @@ -147,6 +147,7 @@ function RUN () if [[ $CCACHE_DIR ]]; then args+=(--mount "type=bind,source=$CCACHE_DIR,target=/.ccache") args+=(--env "CCACHE_DIR=/.ccache") + args+=(--env "CMAKE_GENERATOR="Ninja"") fi docker run "${args[@]}" $RUN_ARGS "$IMAGE_NAME" bash "$BUILD_SCRIPT" $RUN_OPTS "$@" return $? diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml index 7d7652141..59e4d5005 100644 --- a/.github/workflows/desktop-build.yml +++ b/.github/workflows/desktop-build.yml @@ -129,6 +129,7 @@ jobs: # Cache size over the entire repo is 10Gi: # https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy CCACHE_SIZE: 500M + CMAKE_GENERATOR: 'Ninja' steps: - name: Checkout @@ -156,9 +157,11 @@ jobs: - name: Build debug and test if: matrix.test != 'skip' shell: bash + env: + CMAKE_GENERATOR: '${{env.CMAKE_GENERATOR}}' run: | source .ci/docker.sh - RUN --server --debug --test --ccache "$CCACHE_SIZE" --parallel 4 + RUN --server --debug --test --ccache "$CCACHE_SIZE" - name: Build release package id: build @@ -168,10 +171,11 @@ jobs: BUILD_DIR: build SUFFIX: '-${{matrix.distro}}${{matrix.version}}' type: '${{matrix.package}}' + CMAKE_GENERATOR: '${{env.CMAKE_GENERATOR}}' run: | source .ci/docker.sh RUN --server --release --package "$type" --dir "$BUILD_DIR" \ - --ccache "$CCACHE_SIZE" --parallel 4 + --ccache "$CCACHE_SIZE" .ci/name_build.sh - name: Upload artifact @@ -202,7 +206,6 @@ jobs: os: macos-13 xcode: "14.3.1" type: Release - core_count: 4 make_package: 1 - target: 14 @@ -210,7 +213,6 @@ jobs: os: macos-14 xcode: "15.4" type: Release - core_count: 3 make_package: 1 - target: 15 @@ -218,7 +220,6 @@ jobs: os: macos-15 xcode: "16.2" type: Release - core_count: 3 make_package: 1 - target: 15 @@ -226,7 +227,6 @@ jobs: os: macos-15 xcode: "16.2" type: Debug - core_count: 3 name: macOS ${{matrix.target}}${{ matrix.soc == 'Intel' && ' Intel' || '' }}${{ matrix.type == 'Debug' && ' Debug' || '' }} needs: configure @@ -235,6 +235,7 @@ jobs: env: DEVELOPER_DIR: /Applications/Xcode_${{matrix.xcode}}.app/Contents/Developer + CMAKE_GENERATOR: 'Ninja' steps: - name: Checkout @@ -262,9 +263,7 @@ jobs: MACOS_CERTIFICATE_PWD: ${{ secrets.PROD_MACOS_CERTIFICATE_PWD }} MACOS_CERTIFICATE_NAME: ${{ secrets.PROD_MACOS_CERTIFICATE_NAME }} MACOS_CI_KEYCHAIN_PWD: ${{ secrets.PROD_MACOS_CI_KEYCHAIN_PWD }} - # macOS runner have 3 cores usually - only the macos-13 image has 4: - # https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories - # https://github.com/actions/runner-images?tab=readme-ov-file#available-images + CMAKE_GENERATOR: '${{env.CMAKE_GENERATOR}}' run: | if [[ -n "$MACOS_CERTIFICATE_NAME" ]] then @@ -276,7 +275,7 @@ jobs: security import certificate.p12 -k build.keychain -P "$MACOS_CERTIFICATE_PWD" -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_CI_KEYCHAIN_PWD" build.keychain fi - .ci/compile.sh --server --parallel ${{matrix.core_count}} + .ci/compile.sh --server - name: Sign app bundle if: matrix.make_package @@ -394,7 +393,6 @@ jobs: env: PACKAGE_SUFFIX: '-Win${{matrix.target}}' CMAKE_GENERATOR: '${{env.CMAKE_GENERATOR}}' - CMAKE_GENERATOR_PLATFORM: 'x64' QTDIR: '${{github.workspace}}\Qt\${{matrix.qt_version}}\win64_${{matrix.qt_arch}}' VCPKG_DISABLE_METRICS: 1 VCPKG_BINARY_SOURCES: 'clear;files,${{ steps.vcpkg-cache.outputs.path }},readwrite'