Add WebAPI for downloading torrent metadata #242
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI - Ubuntu | |
on: [pull_request, push] | |
permissions: | |
actions: write | |
security-events: write | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: ${{ github.head_ref != '' }} | |
jobs: | |
ci: | |
name: Build | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
libt_version: ["2.0.10", "1.2.19"] | |
qbt_gui: ["GUI=ON", "GUI=OFF"] | |
qt_version: ["6.5.2"] | |
env: | |
boost_path: "${{ github.workspace }}/../boost" | |
harden_flags: "-D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS" | |
libtorrent_path: "${{ github.workspace }}/../libtorrent" | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
sudo apt update | |
sudo apt install \ | |
build-essential cmake ninja-build \ | |
libssl-dev libxkbcommon-x11-dev libxcb-cursor-dev zlib1g-dev | |
- name: Setup ccache | |
uses: Chocobo1/setup-ccache-action@v1 | |
with: | |
store_cache: ${{ github.ref == 'refs/heads/master' }} | |
update_packager_index: false | |
ccache_options: | | |
max_size=2G | |
- name: Install boost | |
env: | |
BOOST_MAJOR_VERSION: "1" | |
BOOST_MINOR_VERSION: "76" | |
BOOST_PATCH_VERSION: "0" | |
run: | | |
boost_url="https://boostorg.jfrog.io/artifactory/main/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 }}" | |
- name: Install Qt | |
uses: jurplel/install-qt-action@v4 | |
with: | |
version: ${{ matrix.qt_version }} | |
archives: icu qtbase qtdeclarative qtsvg qttools | |
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 }} | |
CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }}" \ | |
cmake \ | |
-B build \ | |
-G "Ninja" \ | |
-DBUILD_SHARED_LIBS=OFF \ | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | |
-DBOOST_ROOT="${{ env.boost_path }}" \ | |
-Ddeprecated-functions=OFF | |
cmake --build build | |
sudo cmake --install build | |
# to avoid scanning 3rdparty codebases, initialize it just before building qbt | |
- name: Initialize CodeQL | |
uses: github/codeql-action/init@v3 | |
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') | |
with: | |
config-file: ./.github/workflows/helper/codeql/cpp.yaml | |
languages: cpp | |
- name: Build qBittorrent | |
run: | | |
CXXFLAGS="$CXXFLAGS ${{ env.harden_flags }} -DQT_FORCE_ASSERTS -Werror" \ | |
LDFLAGS="$LDFLAGS -gz" \ | |
cmake \ | |
-B build \ | |
-G "Ninja" \ | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ | |
-DBOOST_ROOT="${{ env.boost_path }}" \ | |
-DCMAKE_INSTALL_PREFIX="/usr" \ | |
-DTESTING=ON \ | |
-DVERBOSE_CONFIGURE=ON \ | |
-D${{ matrix.qbt_gui }} | |
cmake --build build --target qbt_update_translations | |
cmake --build build | |
cmake --build build --target check | |
DESTDIR="qbittorrent" cmake --install build | |
- name: Run CodeQL analysis | |
uses: github/codeql-action/analyze@v3 | |
if: startsWith(matrix.libt_version, 2) && (matrix.qbt_gui == 'GUI=ON') | |
with: | |
category: ${{ github.base_ref || github.ref_name }} | |
- name: Prepare build artifacts | |
run: | | |
mkdir 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: Install AppImage | |
run: | | |
sudo apt install libfuse2 | |
curl \ | |
-L \ | |
-Z \ | |
-O https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-static-x86_64.AppImage \ | |
-O https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-static-x86_64.AppImage \ | |
-O https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage | |
chmod +x \ | |
linuxdeploy-static-x86_64.AppImage \ | |
linuxdeploy-plugin-qt-static-x86_64.AppImage \ | |
linuxdeploy-plugin-appimage-x86_64.AppImage | |
- name: Prepare files for AppImage | |
if: matrix.qbt_gui == 'GUI=OFF' | |
run: | | |
mkdir -p qbittorrent/usr/share/applications | |
cp .github/workflows/helper/appimage/org.qbittorrent.qBittorrent.desktop qbittorrent/usr/share/applications/org.qbittorrent.qBittorrent.desktop | |
mkdir -p qbittorrent/usr/share/icons/hicolor/scalable/apps | |
cp dist/unix/menuicons/scalable/apps/qbittorrent.svg qbittorrent/usr/share/icons/hicolor/scalable/apps/qbittorrent.svg | |
- name: Package AppImage | |
run: | | |
./linuxdeploy-static-x86_64.AppImage --appdir qbittorrent --plugin qt | |
rm qbittorrent/apprun-hooks/* | |
cp .github/workflows/helper/appimage/export_vars.sh qbittorrent/apprun-hooks/export_vars.sh | |
NO_APPSTREAM=1 \ | |
OUTPUT=upload/qbittorrent-CI_Ubuntu_x86_64.AppImage \ | |
./linuxdeploy-static-x86_64.AppImage --appdir qbittorrent --output appimage | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: qBittorrent-CI_Ubuntu-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }}_Qt-${{ matrix.qt_version }} | |
path: upload |