diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index ab5b603b4..000000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,280 +0,0 @@ -name: CI - Main - -# Cache is used for all Windows and macOS dependencies (size approx. 1230 * 2 + 1850 = 4310 MiB) -# Cache is not used for Ubuntu builds, because it already has all dependencies except -# the appropriate libtorrent version, which only takes 3-5 minutes to build from source anyway - -on: [pull_request, push] - -env: - VCPKG_COMMIT: 8dddc6c899ce6fdbeab38b525a31e7f23cb2d5bb - -jobs: - ubuntu: - name: Ubuntu - runs-on: ubuntu-20.04 - - strategy: - matrix: - qbt_gui: ["GUI=ON", "GUI=OFF"] - libt_version: ["v2.0.4", "v1.2.14"] - fail-fast: false - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Setup ccache - uses: hendrikmuhs/ccache-action@v1 - - - name: Install dependencies - run: | - sudo apt update - sudo apt install \ - build-essential cmake git ninja-build pkg-config \ - libssl-dev libgeoip-dev zlib1g-dev \ - libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev - # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old... - - # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints - # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage - - name: Install Qt - run: | - sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal - sudo apt install \ - qt515base qt515svg qt515tools - - - name: Install libtorrent - run: | - git clone --branch ${{ matrix.libt_version }} --depth 1 https://github.com/arvidn/libtorrent.git - cd libtorrent - git submodule update --init --recursive - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - cmake \ - -B build \ - -G "Ninja" \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - -Ddeprecated-functions=OFF \ - --graphviz=cmake-build-dir/target_graph.dot - cmake --build build - sudo cmake --install build --prefix /usr/local - - - name: Build qBittorrent - run: | - export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" - cmake \ - -B build \ - -G "Ninja" \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - -D${{ matrix.qbt_gui }} \ - -DVERBOSE_CONFIGURE=ON \ - --graphviz=build/target_graph.dot - cmake --build build - - - name: Install qBittorrent - run: sudo cmake --install build --prefix /usr/local - - - name: Upload build artifacts - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_ubuntu-20.04-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }} - path: | - build/compile_commands.json - build/install_manifest.txt - build/target_graph.dot - build/qbittorrent - build/qbittorrent-nox - libtorrent/cmake-build-dir/compile_commands.json - libtorrent/cmake-build-dir/target_graph.dot - - windows: - name: Windows - runs-on: windows-2019 - - env: - VCPKG_DEST_WIN: C:\qbt_tools\vcpkg - - defaults: - run: - shell: pwsh - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) - - name: Install build tools - run: | - choco install ninja - - - name: Setup vcpkg - uses: lukka/run-vcpkg@v7 - with: - vcpkgDirectory: ${{ env.VCPKG_DEST_WIN }} - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} - setupOnly: true - - # Tell vcpkg to only build Release variants of the dependencies - - name: Configure vcpkg triplet overlay - run: | - New-Item ` - -Path ${{ github.workspace }} ` - -Name "triplets_overlay" ` - -ItemType Directory - Copy-Item ` - ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake ` - ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake - Add-Content ` - ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake ` - -Value "set(VCPKG_BUILD_TYPE release)" - - # clear buildtrees after each package installation to reduce disk space requirements - - name: Install dependencies - run: | - $packages = ` - "boost-circular-buffer:x64-windows-static-release", - "libtorrent:x64-windows-static-release", - "qt5-base:x64-windows-static-release", - "qt5-svg:x64-windows-static-release", - "qt5-tools:x64-windows-static-release", - "qt5-winextras:x64-windows-static-release" - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --no-dry-run - foreach($package in $packages) - { - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --clean-after-build - } - - # NOTE: this is necessary to correctly find and use cl.exe with the Ninja generator for now - - name: Setup devcmd - uses: ilammy/msvc-dev-cmd@v1 - - - name: Build qBittorrent - shell: cmd - run: | - cmake ^ - -B build ^ - -G "Ninja" ^ - -DCMAKE_BUILD_TYPE=RelWithDebInfo ^ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ^ - -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_WIN }}\scripts\buildsystems\vcpkg.cmake ^ - -DVCPKG_TARGET_TRIPLET=x64-windows-static-release ^ - -DVERBOSE_CONFIGURE=ON ^ - -DMSVC_RUNTIME_DYNAMIC=OFF ^ - --graphviz=build\target_graph.dot - cmake --build build - - - name: Upload build artifacts - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_Windows-x64 - path: | - build/compile_commands.json - build/target_graph.dot - build/qbittorrent.exe - build/qbittorrent.pdb - dist/windows/qt.conf - - macos: - name: macOS - runs-on: macos-10.15 - - strategy: - matrix: - qbt_gui: ["GUI=ON", "GUI=OFF"] - fail-fast: false - - env: - VCPKG_DEST_MACOS: /Users/runner/qbt_tools/vcpkg - - defaults: - run: - shell: pwsh - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) - # - automake is needed for the installation the vcpkg installation of fontconfig, a dependency of qt5-base - - name: Install build tools - shell: bash - run: | - brew install automake ninja - - - name: Setup vcpkg - uses: lukka/run-vcpkg@v7 - with: - vcpkgDirectory: ${{ env.VCPKG_DEST_MACOS }} - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} - setupOnly: true - - - name: Configure vcpkg triplet overlay - run: | - New-Item ` - -Path ${{ github.workspace }} ` - -Name "triplets_overlay" ` - -ItemType Directory - Copy-Item ` - ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-osx.cmake ` - ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake - Add-Content ` - ${{ github.workspace }}/triplets_overlay/x64-osx-release.cmake ` - -Value "set(VCPKG_BUILD_TYPE release)","set(VCPKG_OSX_DEPLOYMENT_TARGET 10.15)" - - # NOTE: Avoids a libtorrent ABI issue. See https://github.com/arvidn/libtorrent/issues/4965 - - name: Adjust "C++ standard" cmake flag - run: | - (Get-Content ` - -path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake).Replace( ` - '${FEATURE_OPTIONS}', '${FEATURE_OPTIONS} -DCMAKE_CXX_STANDARD=17') ` - | Set-Content -Path ${{ env.RUNVCPKG_VCPKG_ROOT }}/ports/libtorrent/portfile.cmake - - - name: Install dependencies - run: | - $packages = ` - "boost-circular-buffer:x64-osx-release", - "libtorrent:x64-osx-release", - "qt5-base:x64-osx-release", - "qt5-svg:x64-osx-release", - "qt5-tools:x64-osx-release", - "qt5-macextras:x64-osx-release" - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg upgrade ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --no-dry-run - foreach($package in $packages) - { - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg install $package ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --clean-after-build - } - - - name: Build qBittorrent - shell: bash - run: | - cmake \ - -B build \ - -G "Ninja" \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ - -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_MACOS }}/scripts/buildsystems/vcpkg.cmake \ - -DVCPKG_TARGET_TRIPLET=x64-osx-release \ - -D${{ matrix.qbt_gui }} \ - -DVERBOSE_CONFIGURE=ON \ - --graphviz=build/target_graph.dot - cmake --build build - - - name: Upload build artifacts - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }} - path: | - build/compile_commands.json - build/target_graph.dot - build/qbittorrent.app - build/qbittorrent-nox.app diff --git a/.github/workflows/file_health.yaml b/.github/workflows/ci_file_health.yaml similarity index 81% rename from .github/workflows/file_health.yaml rename to .github/workflows/ci_file_health.yaml index 04bd6ed72..07bd98ec2 100644 --- a/.github/workflows/file_health.yaml +++ b/.github/workflows/ci_file_health.yaml @@ -3,8 +3,8 @@ name: CI - File health on: [pull_request, push] jobs: - check_file_health: - name: Check file health + ci: + name: Check runs-on: ubuntu-latest steps: - name: Checkout repository @@ -15,6 +15,6 @@ jobs: sudo apt update sudo apt install zsh - - name: Run script + - name: Check files run: | ./.github/workflows/file_health.sh diff --git a/.github/workflows/ci_macos.yaml b/.github/workflows/ci_macos.yaml new file mode 100644 index 000000000..ba4a582a9 --- /dev/null +++ b/.github/workflows/ci_macos.yaml @@ -0,0 +1,73 @@ +name: CI - macOS +on: [pull_request, push] + +jobs: + ci: + name: Build + runs-on: macos-10.15 + + strategy: + matrix: + libt_version: ["v2.0.4", "v1.2.14"] + qbt_gui: ["GUI=ON", "GUI=OFF"] + fail-fast: false + + env: + openssl_root: /usr/local/opt/openssl@1.1 + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Setup ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{ runner.os }} + + - name: Install dependencies + run: | + brew update > /dev/null + brew install \ + cmake ninja \ + boost openssl@1.1 qt@5 zlib + brew link --force \ + qt@5 + # workaround for cmake + Qt + sudo ln -s /usr/local/opt/qt@5/mkspecs /usr/local/mkspecs + sudo ln -s /usr/local/opt/qt@5/plugins /usr/local/plugins + + - name: Install libtorrent + run: | + git clone --branch ${{ matrix.libt_version }} --depth 1 https://github.com/arvidn/libtorrent.git + cd libtorrent + git submodule update --init --recursive + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake \ + -B build \ + -G "Ninja" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_CXX_STANDARD=17 \ + -Ddeprecated-functions=OFF \ + -DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" + cmake --build build + sudo cmake --install build + + - name: Build qBittorrent + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake \ + -B build \ + -G "Ninja" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -D${{ matrix.qbt_gui }} \ + -DVERBOSE_CONFIGURE=ON \ + -DOPENSSL_ROOT_DIR="${{ env.openssl_root }}" + cmake --build build + + - name: Upload build artifacts + uses: actions/upload-artifact@v2 + with: + name: qBittorrent-CI_macOS_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }} + path: | + build/qbittorrent.app + build/qbittorrent-nox.app diff --git a/.github/workflows/ci_ubuntu.yaml b/.github/workflows/ci_ubuntu.yaml new file mode 100644 index 000000000..9a6597554 --- /dev/null +++ b/.github/workflows/ci_ubuntu.yaml @@ -0,0 +1,84 @@ +name: CI - Ubuntu +on: [pull_request, push] + +jobs: + ci: + name: Build + runs-on: ubuntu-20.04 + + strategy: + matrix: + libt_version: ["v2.0.4", "v1.2.14"] + qbt_gui: ["GUI=ON", "GUI=OFF"] + fail-fast: false + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Setup ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{ runner.os }} + + - name: Install dependencies + run: | + sudo apt update + sudo apt install \ + build-essential cmake git ninja-build pkg-config \ + libssl-dev libgeoip-dev zlib1g-dev \ + libboost-dev libboost-chrono-dev libboost-random-dev libboost-system-dev + # sudo apt install libqt5svg5-dev qtbase5-dev qttools5-dev # the Qt version in the standard repositories is too old... + + # this will be installed under /opt/qt515. CMake will still find it automatically without additional hints + # to speed up the process, only the required components are installed rather than the full qt515-meta-full metapackage + - name: Install Qt + run: | + sudo add-apt-repository ppa:beineri/opt-qt-5.15.2-focal + sudo apt install \ + qt515base qt515svg qt515tools + + - name: Install libtorrent + run: | + git clone --branch ${{ matrix.libt_version }} --depth 1 https://github.com/arvidn/libtorrent.git + cd libtorrent + git submodule update --init --recursive + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake \ + -B build \ + -G "Ninja" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -Ddeprecated-functions=OFF \ + --graphviz=cmake-build-dir/target_graph.dot + cmake --build build + sudo cmake --install build + + - name: Build qBittorrent + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake \ + -B build \ + -G "Ninja" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -D${{ matrix.qbt_gui }} \ + -DVERBOSE_CONFIGURE=ON \ + --graphviz=build/target_graph.dot + cmake --build build + + - name: Install qBittorrent + run: sudo cmake --install build + + - name: Upload build artifacts + uses: actions/upload-artifact@v2 + with: + name: qBittorrent-CI_ubuntu-20.04-x64_${{ matrix.qbt_gui }}_libtorrent-${{ matrix.libt_version }} + path: | + build/compile_commands.json + build/install_manifest.txt + build/target_graph.dot + build/qbittorrent + build/qbittorrent-nox + libtorrent/cmake-build-dir/compile_commands.json + libtorrent/cmake-build-dir/target_graph.dot diff --git a/.github/workflows/webui_ci.yaml b/.github/workflows/ci_webui.yaml similarity index 93% rename from .github/workflows/webui_ci.yaml rename to .github/workflows/ci_webui.yaml index 00498b00b..0c234b270 100644 --- a/.github/workflows/webui_ci.yaml +++ b/.github/workflows/ci_webui.yaml @@ -3,9 +3,10 @@ name: CI - WebUI on: [pull_request, push] jobs: - check_webui: - name: Check WebUI + ci: + name: Check runs-on: ubuntu-latest + defaults: run: working-directory: src/webui/www diff --git a/.github/workflows/ci_windows.yaml b/.github/workflows/ci_windows.yaml new file mode 100644 index 000000000..d38c38b0c --- /dev/null +++ b/.github/workflows/ci_windows.yaml @@ -0,0 +1,95 @@ +name: CI - Windows +on: [pull_request, push] + +jobs: + ci: + name: Build + runs-on: windows-2019 + + env: + VCPKG_COMMIT: 8dddc6c899ce6fdbeab38b525a31e7f23cb2d5bb + VCPKG_DEST_WIN: C:\qbt_tools\vcpkg + + defaults: + run: + shell: pwsh + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # - ninja is needed for building qBittorrent (because it's preferable, not a hard requirement) + - name: Install build tools + run: | + choco install ninja + + - name: Setup vcpkg + uses: lukka/run-vcpkg@v7 + with: + vcpkgDirectory: ${{ env.VCPKG_DEST_WIN }} + vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} + setupOnly: true + + # Tell vcpkg to only build Release variants of the dependencies + - name: Configure vcpkg triplet overlay + run: | + New-Item ` + -Path ${{ github.workspace }} ` + -Name "triplets_overlay" ` + -ItemType Directory + Copy-Item ` + ${{ env.RUNVCPKG_VCPKG_ROOT }}/triplets/x64-windows-static.cmake ` + ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake + Add-Content ` + ${{ github.workspace }}/triplets_overlay/x64-windows-static-release.cmake ` + -Value "set(VCPKG_BUILD_TYPE release)" + + # clear buildtrees after each package installation to reduce disk space requirements + - name: Install dependencies + run: | + $packages = ` + "boost-circular-buffer:x64-windows-static-release", + "libtorrent:x64-windows-static-release", + "qt5-base:x64-windows-static-release", + "qt5-svg:x64-windows-static-release", + "qt5-tools:x64-windows-static-release", + "qt5-winextras:x64-windows-static-release" + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe upgrade ` + --overlay-triplets=${{ github.workspace }}/triplets_overlay ` + --no-dry-run + foreach($package in $packages) + { + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package ` + --overlay-triplets=${{ github.workspace }}/triplets_overlay ` + --clean-after-build + } + + # NOTE: this is necessary to correctly find and use cl.exe with the Ninja generator for now + - name: Setup devcmd + uses: ilammy/msvc-dev-cmd@v1 + + - name: Build qBittorrent + shell: cmd + run: | + cmake ^ + -B build ^ + -G "Ninja" ^ + -DCMAKE_BUILD_TYPE=RelWithDebInfo ^ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ^ + -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_DEST_WIN }}\scripts\buildsystems\vcpkg.cmake ^ + -DVCPKG_TARGET_TRIPLET=x64-windows-static-release ^ + -DVERBOSE_CONFIGURE=ON ^ + -DMSVC_RUNTIME_DYNAMIC=OFF ^ + --graphviz=build\target_graph.dot + cmake --build build + + - name: Upload build artifacts + uses: actions/upload-artifact@v2 + with: + name: qBittorrent-CI_Windows-x64 + path: | + build/compile_commands.json + build/target_graph.dot + build/qbittorrent.exe + build/qbittorrent.pdb + dist/windows/qt.conf