diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 79df9e671..000000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,240 +0,0 @@ -name: GitHub Actions CI - -# 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: e4ce66eecfd3e5cca5eac06c971921bf8e37cf88 - VCPKG_DEST_MACOS: /Users/runner/qbt_tools/vcpkg - VCPKG_DEST_WIN: C:\qbt_tools\vcpkg - LIBTORRENT_VERSION_TAG: v1.2.12 - -jobs: - - ci_ubuntu: - name: Ubuntu - - strategy: - matrix: - os: [ubuntu-20.04] - qbt_gui: ["GUI=ON", "GUI=OFF"] - fail-fast: false - - runs-on: ${{ matrix.os }} - - defaults: - run: - shell: bash - - steps: - - name: checkout repository - uses: actions/checkout@v2 - - - name: install all build dependencies except libtorrent from Ubuntu repos - 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 \ - libqt5svg5-dev qtbase5-dev qttools5-dev - - - name: install libtorrent from source - run: | - git clone https://github.com/arvidn/libtorrent && cd libtorrent - git checkout ${{ env.LIBTORRENT_VERSION_TAG }} - cmake -B cmake-build-dir -G "Ninja" \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -Ddeprecated-functions=OFF \ - --graphviz=cmake-build-dir/target_graph.dot - cmake --build cmake-build-dir - sudo cmake --install cmake-build-dir --prefix /usr/local - - - name: build qBittorrent - run: | - cmake -B build -G "Ninja" \ - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -D${{ matrix.qbt_gui }} \ - -DVERBOSE_CONFIGURE=ON \ - --graphviz=build/target_graph.dot - cmake --build build - - - name: upload artifact as zip - uses: actions/upload-artifact@v2 - with: - name: qBittorrent-CI_${{ matrix.os }}-x64_${{ matrix.qbt_gui }} - path: | - build/compile_commands.json - build/target_graph.dot - build/qbittorrent - build/qbittorrent-nox - libtorrent/cmake-build-dir/compile_commands.json - libtorrent/cmake-build-dir/target_graph.dot - - ci_windows: - name: Windows + vcpkg - - runs-on: windows-2019 - - defaults: - run: - shell: pwsh - - steps: - - name: checkout repository - uses: actions/checkout@v2 - - # - ninja is needed for building qBittorrent (because it's preferrable, not a hard requirement) - - name: install additional required packages with chocolatey - run: | - choco install ninja - - - name: setup vcpkg (cached, if possible) - uses: lukka/run-vcpkg@v4 - 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 for release builds only - 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 via vcpkg - 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 ` - --overlay-ports=${{ github.workspace }}/vcpkg ` - --no-dry-run - foreach($package in $packages) - { - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install $package ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --overlay-ports=${{ github.workspace }}/vcpkg ` - --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_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ^ - -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 artifact as zip - 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 - - ci_macos: - name: macOS + vcpkg - - strategy: - matrix: - qbt_gui: ["GUI=ON", "GUI=OFF"] - fail-fast: false - - runs-on: macos-10.15 - - defaults: - run: - shell: pwsh - - steps: - - name: checkout repository - uses: actions/checkout@v2 - - # - ninja is needed for building qBittorrent (because it's preferrable, not a hard requirement) - # - automake is needed for the installation the vcpkg installation of fontconfig, a dependency of qt5-base - - name: install additional required packages with homebrew - shell: bash - run: | - brew install automake ninja - - - name: setup vcpkg (cached, if possible) - uses: lukka/run-vcpkg@v4 - with: - vcpkgDirectory: ${{ env.VCPKG_DEST_MACOS }} - vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} - setupOnly: true - - - name: configure vcpkg triplet overlay for release builds only - 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)" - - - name: install dependencies via vcpkg - 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 ` - --overlay-ports=${{ github.workspace }}/vcpkg ` - --no-dry-run - foreach($package in $packages) - { - ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg install $package ` - --overlay-triplets=${{ github.workspace }}/triplets_overlay ` - --overlay-ports=${{ github.workspace }}/vcpkg ` - --clean-after-build - } - - - name: build qBittorrent - shell: bash - run: | - cmake -B build -G "Ninja" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -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 artifact as zip - 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/ci_file_health.yaml b/.github/workflows/ci_file_health.yaml new file mode 100644 index 000000000..07bd98ec2 --- /dev/null +++ b/.github/workflows/ci_file_health.yaml @@ -0,0 +1,20 @@ +name: CI - File health + +on: [pull_request, push] + +jobs: + ci: + name: Check + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install tools + run: | + sudo apt update + sudo apt install zsh + + - 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..a86844a03 --- /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: ["v1.2.12"] + 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..a696b4de2 --- /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: ["v1.2.12"] + 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/ci_webui.yaml b/.github/workflows/ci_webui.yaml new file mode 100644 index 000000000..0c234b270 --- /dev/null +++ b/.github/workflows/ci_webui.yaml @@ -0,0 +1,32 @@ +name: CI - WebUI + +on: [pull_request, push] + +jobs: + ci: + name: Check + runs-on: ubuntu-latest + + defaults: + run: + working-directory: src/webui/www + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Setup nodejs + uses: actions/setup-node@v2 + with: + node-version: 'lts/*' + + - name: Install tools + run: npm install + + - name: Lint code + run: npm run lint + + - name: Format code + run: | + npm run format + git diff --exit-code diff --git a/.github/workflows/ci_windows.yaml b/.github/workflows/ci_windows.yaml new file mode 100644 index 000000000..37e68342b --- /dev/null +++ b/.github/workflows/ci_windows.yaml @@ -0,0 +1,85 @@ +name: CI - Windows +on: [pull_request, push] + +jobs: + ci: + name: Build + runs-on: windows-2019 + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install build tools + run: | + choco install ninja + + # use the preinstalled vcpkg from image + # https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#package-management + - name: Setup vcpkg + uses: lukka/run-vcpkg@v7 + with: + vcpkgDirectory: C:/vcpkg + doNotUpdateVcpkg: true # the preinstalled vcpkg is updated regularly + 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 + ${{ env.RUNVCPKG_VCPKG_ROOT }}/vcpkg.exe install ` + --overlay-triplets="${{ github.workspace }}/triplets_overlay" ` + --clean-after-build ` + $packages + + # 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 + run: | + cmake ` + -B build ` + -G "Ninja" ` + -DCMAKE_BUILD_TYPE=RelWithDebInfo ` + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ` + -DCMAKE_TOOLCHAIN_FILE="${{ env.RUNVCPKG_VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" ` + -DMSVC_RUNTIME_DYNAMIC=OFF ` + -DVCPKG_TARGET_TRIPLET=x64-windows-static-release ` + -DVERBOSE_CONFIGURE=ON ` + --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/qbittorrent.exe + build/qbittorrent.pdb + build/target_graph.dot + dist/windows/qt.conf diff --git a/.github/workflows/file_health.yaml b/.github/workflows/file_health.yaml deleted file mode 100644 index aeadcf31e..000000000 --- a/.github/workflows/file_health.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: GitHub Actions file health check - -on: [pull_request, push] - -jobs: - check_file_health: - name: Check file health - - runs-on: ubuntu-20.04 - - steps: - - name: checkout repository - uses: actions/checkout@v2 - - - name: install zsh - run: | - sudo apt update - sudo apt install zsh - - - name: run check file health script - run: | - ./.github/workflows/file_health.sh diff --git a/.github/workflows/webui_ci.yaml b/.github/workflows/webui_ci.yaml deleted file mode 100644 index aa836523d..000000000 --- a/.github/workflows/webui_ci.yaml +++ /dev/null @@ -1,31 +0,0 @@ -name: WebUI CI - -on: [pull_request, push] - -jobs: - check_webui: - name: Check WebUI - runs-on: ubuntu-20.04 - defaults: - run: - working-directory: src/webui/www - - steps: - - name: checkout repository - uses: actions/checkout@v2 - - - name: setup nodejs - uses: actions/setup-node@v2 - with: - node-version: '14' - - - name: install tools - run: npm install - - - name: lint code - run: npm run lint - - - name: format code - run: | - npm run format - git diff --exit-code