mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-17 06:01:33 -06:00
This change only affects forked repository. Previously ccache was only enabled on `master` branch regardless of the owner of the repository. This is not ideal for forked repository where the owner (mostly) wants to run the GHA CI to create binary for their own use and ccache couldn't be utilized. This change will enable ccache by default for all non-official repositories. PR #23558.
168 lines
6.0 KiB
YAML
168 lines
6.0 KiB
YAML
name: CI - macOS
|
|
|
|
on: [pull_request, push]
|
|
|
|
permissions: {}
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: ${{ github.head_ref != '' }}
|
|
|
|
jobs:
|
|
ci:
|
|
name: Build
|
|
runs-on: macos-latest
|
|
permissions:
|
|
actions: write
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
libt_version: ["2.0.11", "1.2.20"]
|
|
qbt_gui: ["GUI=ON", "GUI=OFF"]
|
|
qt_version: ["6.9.1"]
|
|
|
|
env:
|
|
boost_path: "${{ github.workspace }}/../boost"
|
|
libtorrent_path: "${{ github.workspace }}/../libtorrent"
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v5
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Install dependencies
|
|
uses: Wandalen/wretry.action@v3
|
|
env:
|
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: 1
|
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
|
with:
|
|
attempt_delay: 20000
|
|
attempt_limit: 6
|
|
command: |
|
|
brew update > /dev/null
|
|
brew install \
|
|
openssl@3 zlib
|
|
# preinstalled on the image: cmake ninja
|
|
|
|
- name: Setup ccache
|
|
uses: Chocobo1/setup-ccache-action@v1
|
|
with:
|
|
store_cache: ${{ (github.repository != 'qbittorrent/qBittorrent') || (github.ref == 'refs/heads/master') }}
|
|
update_packager_index: false
|
|
ccache_options: |
|
|
max_size=1G
|
|
|
|
- name: Install boost
|
|
env:
|
|
BOOST_MAJOR_VERSION: "1"
|
|
BOOST_MINOR_VERSION: "86"
|
|
BOOST_PATCH_VERSION: "0"
|
|
run: |
|
|
boost_url="https://archives.boost.io/release/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/source/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
|
|
boost_url2="https://sourceforge.net/projects/boost/files/boost/${{ env.BOOST_MAJOR_VERSION }}.${{ env.BOOST_MINOR_VERSION }}.${{ env.BOOST_PATCH_VERSION }}/boost_${{ env.BOOST_MAJOR_VERSION }}_${{ env.BOOST_MINOR_VERSION }}_${{ env.BOOST_PATCH_VERSION }}.tar.gz"
|
|
set +e
|
|
curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url"
|
|
tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
|
|
if [ "$_exitCode" -ne "0" ]; then
|
|
curl -L -o "${{ runner.temp }}/boost.tar.gz" "$boost_url2"
|
|
tar -xf "${{ runner.temp }}/boost.tar.gz" -C "${{ github.workspace }}/.."; _exitCode="$?"
|
|
fi
|
|
mv "${{ github.workspace }}/.."/boost_* "${{ env.boost_path }}"
|
|
cd "${{ env.boost_path }}"
|
|
./bootstrap.sh
|
|
./b2 stage --stagedir=./ --with-headers
|
|
|
|
- name: Install Qt
|
|
uses: jurplel/install-qt-action@v4
|
|
with:
|
|
version: ${{ matrix.qt_version }}
|
|
archives: qtbase qtdeclarative qtsvg qttools
|
|
# Not sure why Qt made a hard dependency on qtdeclarative, try removing it when Qt > 6.4.0
|
|
cache: true
|
|
|
|
- name: Install libtorrent
|
|
run: |
|
|
git clone \
|
|
--branch v${{ matrix.libt_version }} \
|
|
--depth 1 \
|
|
--recurse-submodules \
|
|
https://github.com/arvidn/libtorrent.git \
|
|
${{ env.libtorrent_path }}
|
|
cd ${{ env.libtorrent_path }}
|
|
cmake \
|
|
-B build \
|
|
-G "Ninja" \
|
|
-DBUILD_SHARED_LIBS=OFF \
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-DCMAKE_CXX_STANDARD=20 \
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
|
-Ddeprecated-functions=OFF
|
|
cmake --build build
|
|
sudo cmake --install build
|
|
|
|
- name: Build qBittorrent
|
|
run: |
|
|
CXXFLAGS="$CXXFLAGS -DQT_FORCE_ASSERTS -Werror -Wno-error=deprecated-declarations" \
|
|
LDFLAGS="$LDFLAGS -gz" \
|
|
cmake \
|
|
-B build \
|
|
-G "Ninja" \
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
|
-DBOOST_ROOT="${{ env.boost_path }}/lib/cmake" \
|
|
-DTESTING=ON \
|
|
-DVERBOSE_CONFIGURE=ON \
|
|
-D${{ matrix.qbt_gui }}
|
|
cmake --build build --target qbt_update_translations
|
|
cmake --build build
|
|
cmake --build build --target check
|
|
if [ "${{ matrix.qbt_gui }}" = "GUI=ON" ]; then
|
|
build/qbittorrent.app/Contents/MacOS/qbittorrent -v
|
|
else
|
|
build/qbittorrent-nox.app/Contents/MacOS/qbittorrent-nox -v
|
|
fi
|
|
|
|
- name: Prepare build artifacts
|
|
run: |
|
|
appName="qbittorrent"
|
|
if [ "${{ matrix.qbt_gui }}" = "GUI=OFF" ]; then
|
|
appName="qbittorrent-nox"
|
|
fi
|
|
pushd build
|
|
# packaging
|
|
macdeployqt "$appName.app" -no-strip
|
|
# code signing
|
|
xattr -cr "$appName.app"
|
|
codesign --force --sign - \
|
|
"$appName.app" \
|
|
"$appName.app/Contents/Frameworks"/* \
|
|
"$appName.app/Contents/MacOS/$appName"
|
|
codesign --verify --deep --strict -v "$appName.app"
|
|
# create .dmg
|
|
PACKAGE_RETRY=0
|
|
while [ "$PACKAGE_RETRY" -lt "3" ]; do
|
|
if hdiutil create -fs HFS+ -srcfolder "$appName.app" -volname "$appName" "$appName.dmg"; then
|
|
break
|
|
fi
|
|
sleep 5
|
|
PACKAGE_RETRY=$((PACKAGE_RETRY + 1))
|
|
echo "Retry $PACKAGE_RETRY..."
|
|
done
|
|
popd
|
|
# prepare upload folder
|
|
mkdir upload
|
|
cp "build/$appName.dmg" upload
|
|
mkdir upload/cmake
|
|
cp build/compile_commands.json upload/cmake
|
|
mkdir upload/cmake/libtorrent
|
|
cp ${{ env.libtorrent_path }}/build/compile_commands.json upload/cmake/libtorrent
|
|
|
|
- name: Upload build artifacts
|
|
uses: actions/upload-artifact@v5
|
|
with:
|
|
name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }}
|
|
path: upload
|