From 5a995aa335419f0fcd6f84818534f66bca55bd6e Mon Sep 17 00:00:00 2001 From: Dzmitry Neviadomski Date: Wed, 26 Nov 2025 01:52:34 +0300 Subject: [PATCH] Update macos actions (#7845) * ci: move macos-13 actions to macos-14 We have some GitHub Actions which we try to run on the oldest version of macOS available. That's currently macos-13, but GitHub is deprecating it: > This is a scheduled macos-13 brownout. > The macOS-13 based runner images > are being deprecated. For more details, > see https://github.com/actions/runner-images/issues/13046. We last bumped this from macos-12 to macos-13 in 43f5ca8 #7275 * ci: do not specify architectures in macOS CI builds GitHub has is phasing out su pport for macOS x86_64 runners * ci: fold the macos-X-from-tarball jobs into a single job * ci: fold macos-26 and macos-14 jobs into a single job * Use macos-15-intel runners instead of macos-14 (arm64). If we test compilation two times, at least do it on different host archs. Also macOS 15 supports latest Xcode with macOS 26.1 SDK. * Make job names more meaningful * Fix indentation in macos-xcodebuild-universal --------- Co-authored-by: Charles Kerr --- .github/workflows/actions.yml | 191 ++++++++++------------------------ 1 file changed, 54 insertions(+), 137 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 33b50e8ac..4a1dcdcca 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -322,36 +322,46 @@ jobs: run: | if (Select-String -Path makelog -Pattern 'warning:') { exit 1 } - macos-26-project: - runs-on: macos-26 - needs: [ what-to-make ] - if: ${{ needs.what-to-make.outputs.make-cli == 'true' || - needs.what-to-make.outputs.make-daemon == 'true' || - needs.what-to-make.outputs.make-mac == 'true' || - needs.what-to-make.outputs.make-utils == 'true' }} - steps: - - name: Show Configuration - run: | - echo '${{ toJSON(needs) }}' - echo '${{ toJSON(runner) }}' - sw_vers - - name: Get Dependencies - run: brew install --formulae xcbeautify - - name: Get Source - uses: actions/checkout@v4 - with: - path: src - submodules: recursive - - name: Build - run: set -o pipefail && xcodebuild -project src/Transmission.xcodeproj -scheme Transmission -configuration 'Release - Debug' -derivedDataPath pfx ONLY_ACTIVE_ARCH=NO build | xcbeautify --renderer github-actions - - uses: actions/upload-artifact@v4 - with: - name: binaries-${{ github.job }} - path: pfx/Build/Products/**/Transmission.app* - - macos-26-arm64: + macos-xcodebuild-universal: runs-on: macos-26 needs: [ what-to-make ] + if: ${{ needs.what-to-make.outputs.make-cli == 'true' || + needs.what-to-make.outputs.make-daemon == 'true' || + needs.what-to-make.outputs.make-mac == 'true' || + needs.what-to-make.outputs.make-utils == 'true' }} + steps: + - name: Show Configuration + run: | + echo '${{ toJSON(needs) }}' + echo '${{ toJSON(runner) }}' + sw_vers + - name: Get Dependencies + run: brew install --formulae xcbeautify + - name: Get Source + uses: actions/checkout@v4 + with: + path: src + submodules: recursive + - name: Build + run: set -o pipefail && xcodebuild -project src/Transmission.xcodeproj -scheme Transmission -configuration 'Release - Debug' -derivedDataPath pfx ONLY_ACTIVE_ARCH=NO build | xcbeautify --renderer github-actions + - uses: actions/upload-artifact@v4 + with: + name: binaries-${{ github.job }} + path: pfx/Build/Products/**/Transmission.app* + + macos-cmake-universal: + strategy: + matrix: + os: [ + # This is the last and the only macOS Intel runner that GitHub Actions supports. + # Xref https://github.com/actions/runner-images/issues/13046 + macos-15-intel, + + # Tahoe preview. Added Sept 2025. + # Xref https://github.com/actions/runner-images/pull/13007 + macos-26 + ] + needs: [what-to-make] if: ${{ needs.what-to-make.outputs.make-cli == 'true' || needs.what-to-make.outputs.make-daemon == 'true' || needs.what-to-make.outputs.make-gtk == 'true' || @@ -359,6 +369,7 @@ jobs: needs.what-to-make.outputs.make-qt == 'true' || needs.what-to-make.outputs.make-tests == 'true' || needs.what-to-make.outputs.make-utils == 'true' }} + runs-on: ${{ matrix.os }} steps: - name: Show Configuration run: | @@ -386,7 +397,6 @@ jobs: -G Ninja \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=pfx \ - -DCMAKE_OSX_ARCHITECTURES='arm64' \ -DCMAKE_PREFIX_PATH=`brew --prefix`/opt/qt \ -DENABLE_CLI=${{ (needs.what-to-make.outputs.make-cli == 'true') && 'ON' || 'OFF' }} \ -DENABLE_DAEMON=${{ (needs.what-to-make.outputs.make-daemon == 'true') && 'ON' || 'OFF' }} \ @@ -410,51 +420,9 @@ jobs: run: cmake --build obj --config RelWithDebInfo --target install/strip - uses: actions/upload-artifact@v4 with: - name: binaries-${{ github.job }} + name: binaries-${{ matrix.os }}-cmake-universal path: pfx/**/* - # oldest GitHub build support on macOS (Transmission supports macOS 11.0 and newer) - macos-13: - runs-on: macos-13 - needs: [ what-to-make ] - if: ${{ needs.what-to-make.outputs.make-mac == 'true' }} - steps: - - name: Show Configuration - run: | - echo '${{ toJSON(needs) }}' - echo '${{ toJSON(runner) }}' - sw_vers - - name: Get Dependencies - run: brew install --formulae cmake gettext libdeflate libevent libpsl miniupnpc ninja node pkgconf crc32c - - name: Get Source - uses: actions/checkout@v4 - with: - path: src - submodules: recursive - # oldest GitHub build support for Xcode (Transmission supports Xcode 12.5.1 and newer) - - name: Set Xcode to 14.1 - run: | - # https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md#xcode - sudo xcode-select --switch /Applications/Xcode_14.1.app - - name: Configure - run: | - cmake \ - -S src \ - -B obj \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_INSTALL_PREFIX=pfx \ - -DCMAKE_OSX_ARCHITECTURES='x86_64' \ - -DENABLE_GTK=OFF \ - -DENABLE_MAC=${{ (needs.what-to-make.outputs.make-mac == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_QT=OFF \ - -DENABLE_TESTS=OFF \ - -DENABLE_WERROR=ON \ - -DRUN_CLANG_TIDY=OFF \ - -DUSE_SYSTEM_CRC32C=ON - - name: Make - run: cmake --build obj --config RelWithDebInfo - alpine-musl: needs: [ what-to-make ] runs-on: ubuntu-22.04 @@ -636,69 +604,19 @@ jobs: name: source-tarball path: obj/transmission*.tar.* - macos-26-universal-from-tarball: - needs: [ make-source-tarball, what-to-make ] - if: ${{ needs.what-to-make.outputs.make-mac == 'true' }} - runs-on: macos-26 - steps: - - name: Show Configuration - run: | - echo '${{ toJSON(needs) }}' - echo '${{ toJSON(runner) }}' - sw_vers - - name: Get Dependencies - run: brew install --formulae cmake ninja node pkgconf - - name: Get Source - uses: actions/download-artifact@v4 - with: - name: source-tarball - - name: Extract Source - run: mkdir src && tar xf transmission*.tar.* -C src --strip-components 1 - - name: Configure - run: | - cmake \ - -S src \ - -B obj \ - -G Ninja \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_INSTALL_PREFIX=pfx \ - -DCMAKE_OSX_ARCHITECTURES='x86_64;arm64' \ - -DCMAKE_DISABLE_FIND_PACKAGE_Intl=ON \ - -DENABLE_CLI=${{ (needs.what-to-make.outputs.make-cli == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_DAEMON=${{ (needs.what-to-make.outputs.make-daemon == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_GTK=OFF \ - -DENABLE_MAC=${{ (needs.what-to-make.outputs.make-mac == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_QT=OFF \ - -DENABLE_TESTS=${{ (needs.what-to-make.outputs.make-tests == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_UTILS=${{ (needs.what-to-make.outputs.make-utils == 'true') && 'ON' || 'OFF' }} \ - -DREBUILD_WEB=${{ (needs.what-to-make.outputs.make-web == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_WERROR=ON \ - -DRUN_CLANG_TIDY=OFF \ - -DUSE_SYSTEM_EVENT2=OFF \ - -DUSE_SYSTEM_DEFLATE=OFF \ - -DUSE_SYSTEM_DHT=OFF \ - -DUSE_SYSTEM_MINIUPNPC=OFF \ - -DUSE_SYSTEM_NATPMP=OFF \ - -DUSE_SYSTEM_UTP=OFF \ - -DUSE_SYSTEM_B64=OFF \ - -DUSE_SYSTEM_PSL=OFF - - name: Make - run: cmake --build obj --config RelWithDebInfo - - name: Test - if: ${{ needs.what-to-make.outputs.make-tests == 'true' }} - env: - TMPDIR: /private/tmp - run: cmake -E chdir obj ctest -j $(sysctl -n hw.logicalcpu) --build-config RelWithDebInfo --output-on-failure - - name: Install - run: cmake --build obj --config RelWithDebInfo --target install/strip - - uses: actions/upload-artifact@v4 - with: - name: binaries-${{ github.job }} - path: pfx/**/* + macos-from-tarball: + strategy: + matrix: + os: [ + # This is the last and the only macOS Intel runner that GitHub Actions supports. + # Xref https://github.com/actions/runner-images/issues/13046 + macos-15-intel, - # Oldest GitHub support for CLI, GTK and QT on Mac - macos-13-x86_64-from-tarball: - needs: [ make-source-tarball, what-to-make ] + # Tahoe preview. Added Sept 2025. + # Xref https://github.com/actions/runner-images/pull/13007 + macos-26 + ] + needs: [make-source-tarball, what-to-make] if: ${{ needs.what-to-make.outputs.make-cli == 'true' || needs.what-to-make.outputs.make-daemon == 'true' || needs.what-to-make.outputs.make-gtk == 'true' || @@ -706,7 +624,7 @@ jobs: needs.what-to-make.outputs.make-qt == 'true' || needs.what-to-make.outputs.make-tests == 'true' || needs.what-to-make.outputs.make-utils == 'true' }} - runs-on: macos-13 + runs-on: ${{ matrix.os }} steps: - name: Show Configuration run: | @@ -735,7 +653,6 @@ jobs: -G Ninja \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=pfx \ - -DCMAKE_OSX_ARCHITECTURES='x86_64' \ -DCMAKE_PREFIX_PATH=`brew --prefix`/opt/qt \ -DENABLE_CLI=${{ (needs.what-to-make.outputs.make-cli == 'true') && 'ON' || 'OFF' }} \ -DENABLE_DAEMON=${{ (needs.what-to-make.outputs.make-daemon == 'true') && 'ON' || 'OFF' }} \ @@ -766,7 +683,7 @@ jobs: run: cmake --build obj --config RelWithDebInfo --target install/strip - uses: actions/upload-artifact@v4 with: - name: binaries-${{ github.job }} + name: binaries-${{ matrix.os }}-from-tarball path: pfx/**/* debian-11-from-tarball: