890 lines
36 KiB
YAML
890 lines
36 KiB
YAML
name: Sanity
|
|
on:
|
|
push:
|
|
branches:
|
|
- 'main'
|
|
pull_request:
|
|
branches:
|
|
- 'main'
|
|
env:
|
|
GTEST_OUTPUT: xml:./
|
|
jobs:
|
|
what-to-make:
|
|
runs-on: ubuntu-22.04
|
|
outputs:
|
|
make-android: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.android-changed == '1' }}
|
|
make-cli: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.cli-changed == '1' }}
|
|
make-daemon: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.daemon-changed == '1' }}
|
|
make-dist: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.dist-changed == '1' }}
|
|
make-docs: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.docs-changed == '1' }}
|
|
make-gtk: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.gtk-changed == '1' }}
|
|
make-mac: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.mac-changed == '1' }}
|
|
make-qt: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.qt-changed == '1' }}
|
|
make-source-tarball: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.any-code-changed == '1' }}
|
|
make-tests: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.tests-changed == '1' }}
|
|
make-utils: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.utils-changed == '1' || steps.check-diffs.outputs.tests-changed == '1' }}
|
|
make-web: 'false' # this is handled in the webapp workflow
|
|
test-style: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.our-code-changed == '1' }}
|
|
steps:
|
|
- name: Check Push to Main Branch
|
|
id: check-main-push
|
|
run: |
|
|
set -x
|
|
if [ "$GITHUB_EVENT_NAME" = 'push' ] && [ "$GITHUB_REF_NAME" = 'main' ]; then
|
|
echo is-main-push=1 >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo is-main-push=0 >> "$GITHUB_OUTPUT"
|
|
fi
|
|
- name: Get Source
|
|
id: get-source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
path: src
|
|
submodules: recursive
|
|
- name: Check for diffs
|
|
id: check-diffs
|
|
run: |
|
|
set +e
|
|
cd src
|
|
MERGE_BASE=`git merge-base origin/main HEAD`
|
|
function get_changes() { # name, paths...
|
|
local name="$1"
|
|
shift
|
|
git diff --exit-code "$MERGE_BASE" -- "$@"
|
|
echo "$name-changed=$?" >> "$GITHUB_OUTPUT"
|
|
}
|
|
get_changes android CMakeLists.txt cmake third-party libtransmission android
|
|
get_changes cli CMakeLists.txt cmake Transmission.xcodeproj third-party libtransmission cli
|
|
get_changes any-code CMakeLists.txt cmake Transmission.xcodeproj libtransmission cli daemon gtk macosx qt utils tests web third-party
|
|
get_changes our-code CMakeLists.txt cmake Transmission.xcodeproj libtransmission cli daemon gtk macosx qt utils tests web
|
|
get_changes daemon CMakeLists.txt cmake Transmission.xcodeproj third-party libtransmission daemon
|
|
get_changes dist dist release
|
|
get_changes docs docs
|
|
get_changes gtk CMakeLists.txt cmake third-party libtransmission gtk
|
|
get_changes mac CMakeLists.txt cmake Transmission.xcodeproj third-party libtransmission macosx
|
|
get_changes qt CMakeLists.txt cmake third-party libtransmission qt
|
|
get_changes tests CMakeLists.txt cmake third-party libtransmission utils tests
|
|
get_changes utils CMakeLists.txt cmake third-party libtransmission utils
|
|
get_changes web CMakeLists.txt cmake third-party libtransmission web
|
|
cat "$GITHUB_OUTPUT"
|
|
|
|
code-style:
|
|
runs-on: ubuntu-22.04
|
|
needs: [ what-to-make ]
|
|
if: ${{ needs.what-to-make.outputs.test-style == 'true' }}
|
|
env:
|
|
NODE_PATH: /usr/lib/nodejs:/usr/share/nodejs
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
|
sudo add-apt-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main"
|
|
sudo apt-get install -y clang-format-17 npm
|
|
- name: Check for style diffs
|
|
id: check-for-diffs
|
|
working-directory: .
|
|
run: |
|
|
./code_style.sh
|
|
set +e
|
|
git diff --exit-code > style.diff
|
|
echo "differs=$?" >> $GITHUB_OUTPUT
|
|
cat style.diff
|
|
set -e
|
|
- name: Upload Diffs
|
|
uses: actions/upload-artifact@v4
|
|
if: ${{ steps.check-for-diffs.outputs.differs == '1' }}
|
|
with:
|
|
name: code-style.diff
|
|
path: 'style.diff'
|
|
- name: Fail if diffs exist
|
|
if: ${{ steps.check-for-diffs.outputs.differs == '1' }}
|
|
run: |
|
|
echo "code style does not match expected."
|
|
cat style.diff
|
|
echo "When CI is done, the above patch will be uploaded as 'code-style.diff' to https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}/ ."
|
|
exit 1
|
|
|
|
# sanitizer-tests-ubuntu:
|
|
# runs-on: ubuntu-22.04
|
|
# needs: [ what-to-make ]
|
|
# if: ${{ needs.what-to-make.outputs.make-tests == 'true' }}
|
|
# env:
|
|
# NODE_PATH: /usr/lib/nodejs:/usr/share/nodejs
|
|
# steps:
|
|
# - name: Show Configuration
|
|
# run: |
|
|
# echo '${{ toJSON(needs) }}'
|
|
# echo '${{ toJSON(runner) }}'
|
|
# cat /etc/os-release
|
|
# - name: Get Dependencies
|
|
# run: |
|
|
# set -ex
|
|
# sudo apt-get update
|
|
# sudo apt-get install -y --no-install-recommends \
|
|
# ca-certificates \
|
|
# clang \
|
|
# cmake \
|
|
# gettext \
|
|
# libcurl4-openssl-dev \
|
|
# libdeflate-dev \
|
|
# libevent-dev \
|
|
# libfmt-dev \
|
|
# libminiupnpc-dev \
|
|
# libnatpmp-dev \
|
|
# libpsl-dev \
|
|
# libssl-dev \
|
|
# ninja-build \
|
|
# npm
|
|
# - name: Get Source
|
|
# uses: actions/checkout@v4
|
|
# with:
|
|
# submodules: recursive
|
|
# path: src
|
|
# - name: Configure
|
|
# run: |
|
|
# cmake \
|
|
# -S src \
|
|
# -B obj \
|
|
# -G Ninja \
|
|
# -DCMAKE_BUILD_TYPE=Debug \
|
|
# -DCMAKE_CXX_COMPILER='clang++' \
|
|
# -DCMAKE_CXX_FLAGS='-gdwarf-4 -fno-omit-frame-pointer -fsanitize=address,leak,undefined' \
|
|
# -DCMAKE_C_COMPILER='clang' \
|
|
# -DCMAKE_C_FLAGS='-gdwarf-4 -fno-omit-frame-pointer -fsanitize=address,leak,undefined' \
|
|
# -DCMAKE_INSTALL_PREFIX=pfx \
|
|
# -DENABLE_CLI=OFF \
|
|
# -DENABLE_DAEMON=OFF \
|
|
# -DENABLE_GTK=OFF \
|
|
# -DENABLE_MAC=OFF \
|
|
# -DENABLE_QT=OFF \
|
|
# -DENABLE_TESTS=ON \
|
|
# -DENABLE_UTILS=ON \
|
|
# -DREBUILD_WEB=OFF \
|
|
# -DRUN_CLANG_TIDY=OFF
|
|
# - name: Make
|
|
# run: cmake --build obj --config Debug --target libtransmission-test transmission-show
|
|
# - name: Test with sanitizers
|
|
# run: cmake -E chdir obj ctest -j $(nproc) --build-config Debug --output-on-failure
|
|
|
|
sanitizer-tests-macos:
|
|
runs-on: macos-14
|
|
needs: [ what-to-make ]
|
|
if: ${{ needs.what-to-make.outputs.make-tests == 'true' }}
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
sw_vers
|
|
- name: Get Dependencies
|
|
run: |
|
|
brew install cmake gettext libdeflate libevent libpsl miniupnpc ninja node pkg-config
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
path: src
|
|
- name: Configure
|
|
run: |
|
|
cmake \
|
|
-S src \
|
|
-B obj \
|
|
-G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DCMAKE_CXX_FLAGS='-gdwarf-4 -fno-omit-frame-pointer -fsanitize=address,undefined' \
|
|
-DCMAKE_C_FLAGS='-gdwarf-4 -fno-omit-frame-pointer -fsanitize=address,undefined' \
|
|
-DCMAKE_INSTALL_PREFIX=pfx \
|
|
-DENABLE_CLI=OFF \
|
|
-DENABLE_DAEMON=OFF \
|
|
-DENABLE_GTK=OFF \
|
|
-DENABLE_MAC=OFF \
|
|
-DENABLE_QT=OFF \
|
|
-DENABLE_TESTS=ON \
|
|
-DENABLE_UTILS=ON \
|
|
-DREBUILD_WEB=OFF \
|
|
-DRUN_CLANG_TIDY=OFF
|
|
- name: Make
|
|
run: cmake --build obj --config Debug --target libtransmission-test transmission-show
|
|
- name: Test with sanitizers
|
|
run: cmake -E chdir obj ctest -j $(nproc) --build-config Debug --output-on-failure
|
|
|
|
clang-tidy-libtransmission:
|
|
runs-on: ubuntu-22.04
|
|
needs: [ what-to-make ]
|
|
if: ${{ needs.what-to-make.outputs.test-style == 'true' }}
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
clang \
|
|
clang-tidy \
|
|
cmake \
|
|
gettext \
|
|
libcurl4-openssl-dev \
|
|
libdeflate-dev \
|
|
libevent-dev \
|
|
libfmt-dev \
|
|
libminiupnpc-dev \
|
|
libnatpmp-dev \
|
|
libpsl-dev \
|
|
libssl-dev \
|
|
ninja-build \
|
|
npm
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
path: src
|
|
- name: Configure
|
|
run: |
|
|
cmake \
|
|
-S src \
|
|
-B obj \
|
|
-G Ninja \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DCMAKE_CXX_COMPILER='clang++' \
|
|
-DCMAKE_C_COMPILER='clang' \
|
|
-DCMAKE_INSTALL_PREFIX=pfx \
|
|
-DRUN_CLANG_TIDY=ON
|
|
- name: Make
|
|
run: cmake --build obj --config Debug --target libtransmission.a 2>&1 | tee makelog
|
|
- name: Test for warnings
|
|
run: |
|
|
if grep 'warning:' makelog; then exit 1; fi
|
|
|
|
macos-12:
|
|
runs-on: macos-12
|
|
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' || needs.what-to-make.outputs.make-mac == 'true' || needs.what-to-make.outputs.make-qt == 'true' || needs.what-to-make.outputs.make-tests == '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 cmake gettext libdeflate libevent libpsl miniupnpc ninja node pkg-config
|
|
- name: Get Dependencies (GTK)
|
|
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
|
|
run: brew install gtkmm3
|
|
- name: Get Dependencies (Qt)
|
|
if: ${{ needs.what-to-make.outputs.make-qt == 'true' }}
|
|
run: brew install qt
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: src
|
|
submodules: recursive
|
|
- name: Configure
|
|
run: |
|
|
cmake \
|
|
-S src \
|
|
-B obj \
|
|
-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' }} \
|
|
-DENABLE_GTK=${{ (needs.what-to-make.outputs.make-gtk == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_MAC=${{ (needs.what-to-make.outputs.make-mac == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-qt == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_TESTS=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
|
|
- 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/**/*
|
|
|
|
alpine-musl:
|
|
needs: [ what-to-make ]
|
|
runs-on: ubuntu-22.04
|
|
container:
|
|
image: alpine:latest
|
|
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' || needs.what-to-make.outputs.make-qt == 'true' || needs.what-to-make.outputs.make-tests == 'true' || needs.what-to-make.outputs.make-utils == 'true' }}
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
apk update
|
|
apk add \
|
|
ca-certificates \
|
|
cmake \
|
|
curl-dev \
|
|
fmt-dev \
|
|
g++ \
|
|
gettext-dev \
|
|
git \
|
|
libevent-dev \
|
|
libpsl \
|
|
linux-headers \
|
|
miniupnpc-dev \
|
|
ninja \
|
|
npm \
|
|
pkgconfig \
|
|
xz
|
|
- name: Get Dependencies (GTK)
|
|
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
|
|
run: apk add --upgrade glibmm-dev gtkmm3-dev
|
|
- name: Get Dependencies (Qt)
|
|
if: ${{ needs.what-to-make.outputs.make-qt == 'true' }}
|
|
run: apk add --upgrade qt5-qtbase-dev qt5-qtsvg-dev qt5-qttools-dev
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: src
|
|
submodules: recursive
|
|
- name: Configure
|
|
run: |
|
|
cmake \
|
|
-S src \
|
|
-B obj \
|
|
-G Ninja \
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
|
-DCMAKE_INSTALL_PREFIX=pfx \
|
|
-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=${{ (needs.what-to-make.outputs.make-gtk == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_MAC=OFF \
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-qt == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_TESTS=ON \
|
|
-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
|
|
- 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 $(nproc) --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/**/*
|
|
|
|
windows:
|
|
needs: [ what-to-make ]
|
|
runs-on: windows-2022
|
|
if: ${{ needs.what-to-make.outputs.make-cli == 'true' || needs.what-to-make.outputs.make-daemon == 'true' || needs.what-to-make.outputs.make-dist == 'true' || needs.what-to-make.outputs.make-qt == 'true' || needs.what-to-make.outputs.make-tests == 'true' || needs.what-to-make.outputs.make-utils == 'true' }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
arch: [x64, x86]
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
- name: Get Build Tools
|
|
run: |
|
|
$DepsPrefix = (Join-Path (Get-Item .).Root.Name "${{ matrix.arch }}-prefix")
|
|
"DEPS_PREFIX=${DepsPrefix}" | Out-File $Env:GITHUB_ENV -Append
|
|
(Join-Path $DepsPrefix bin) | Out-File $Env:GITHUB_PATH -Append
|
|
|
|
choco install `
|
|
jom `
|
|
nasm `
|
|
nodejs
|
|
& "C:\Program Files\OpenSSL\unins000.exe" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- | Out-Host
|
|
(Join-Path $Env:ProgramFiles NASM) | Out-File $Env:GITHUB_PATH -Append
|
|
(Join-Path (Get-Item -Path "${Env:ProgramFiles(x86)}\WiX Toolset v3.*")[0].FullName bin) | Out-File $Env:GITHUB_PATH -Append
|
|
|
|
Install-Module -Name Pscx -RequiredVersion 4.0.0-beta4 -AllowPrerelease -Force
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: src
|
|
submodules: recursive
|
|
- name: Get Cache Key
|
|
id: cache-key
|
|
run: |
|
|
try {
|
|
$DepsHash = & (Join-Path . src release windows main.ps1) -Mode DepsHash -BuildArch ${{ matrix.arch }}
|
|
"hash=${DepsHash}" | Out-File $Env:GITHUB_OUTPUT -Append
|
|
} catch {
|
|
Write-Error ("{1}{0}{2}{0}{3}" -f [Environment]::NewLine, $_.ToString(), $_.InvocationInfo.PositionMessage, $_.ScriptStackTrace) -ErrorAction Continue
|
|
exit 1
|
|
}
|
|
- name: Get Cache
|
|
uses: actions/cache@v4
|
|
id: cache
|
|
with:
|
|
path: ${{ env.DEPS_PREFIX }}
|
|
key: ${{ github.job }}-${{ matrix.arch }}-${{ steps.cache-key.outputs.hash }}
|
|
- name: Build Dependencies
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
try {
|
|
& (Join-Path . src release windows main.ps1) -Mode Build -BuildArch ${{ matrix.arch }} -BuildPart Deps
|
|
} catch {
|
|
Write-Error ("{1}{0}{2}{0}{3}" -f [Environment]::NewLine, $_.ToString(), $_.InvocationInfo.PositionMessage, $_.ScriptStackTrace) -ErrorAction Continue
|
|
exit 1
|
|
}
|
|
- name: Configure
|
|
run: |
|
|
Import-VisualStudioVars -VisualStudioVersion 2022 -Architecture ${{ matrix.arch }}
|
|
cmake `
|
|
-S src `
|
|
-B obj `
|
|
-G Ninja `
|
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
|
|
-DCMAKE_INSTALL_PREFIX=pfx `
|
|
-DCMAKE_PREFIX_PATH="${Env:DEPS_PREFIX}" `
|
|
-DENABLE_CLI=${{ (needs.what-to-make.outputs.make-cli == 'true') && 'ON' || 'OFF' }} `
|
|
-DENABLE_DAEMON=${{ (needs.what-to-make.outputs.make-daemon == 'true' || needs.what-to-make.outputs.make-dist == 'true') && 'ON' || 'OFF' }} `
|
|
-DENABLE_GTK=OFF `
|
|
-DENABLE_MAC=OFF `
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-dist == 'true' || needs.what-to-make.outputs.make-qt == 'true') && 'ON' || 'OFF' }} `
|
|
-DENABLE_TESTS=ON `
|
|
-DENABLE_UTILS=ON `
|
|
-DREBUILD_WEB=${{ (needs.what-to-make.outputs.make-web == 'true') && 'ON' || 'OFF' }} `
|
|
-DENABLE_WERROR=ON `
|
|
-DRUN_CLANG_TIDY=OFF
|
|
- name: Make
|
|
run: |
|
|
Import-VisualStudioVars -VisualStudioVersion 2022 -Architecture ${{ matrix.arch }}
|
|
cmake --build obj --config RelWithDebInfo
|
|
- name: Test
|
|
if: ${{ needs.what-to-make.outputs.make-tests == 'true' }}
|
|
run: cmake -E chdir obj ctest -j $(nproc) --build-config RelWithDebInfo --output-on-failure --timeout 600
|
|
- name: Install
|
|
run: cmake --build obj --config RelWithDebInfo --target install
|
|
- name: Package
|
|
if: ${{ needs.what-to-make.outputs.make-dist == 'true' || (needs.what-to-make.outputs.make-daemon == 'true' && needs.what-to-make.outputs.make-qt == 'true') }}
|
|
run: |
|
|
Import-VisualStudioVars -VisualStudioVersion 2022 -Architecture ${{ matrix.arch }}
|
|
cmake --build obj --config RelWithDebInfo --target pack-msi
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: binaries-${{ github.job }}-${{ matrix.arch }}
|
|
path: pfx/**/*
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: binaries-${{ github.job }}-${{ matrix.arch }}-msi
|
|
path: obj/dist/msi/*.msi
|
|
|
|
make-source-tarball:
|
|
runs-on: ubuntu-22.04
|
|
needs: [ what-to-make ]
|
|
if: ${{ needs.what-to-make.outputs.make-source-tarball == 'true' }}
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
cmake \
|
|
libcurl4-openssl-dev \
|
|
libssl-dev \
|
|
ninja-build
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: src
|
|
submodules: recursive
|
|
- name: Configure
|
|
run: |
|
|
cmake \
|
|
-S src \
|
|
-B obj \
|
|
-G Ninja
|
|
- name: Create source tarball
|
|
run: cmake --build obj --target package_source
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: source-tarball
|
|
path: obj/transmission*.tar.*
|
|
|
|
macos-12-from-tarball:
|
|
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' || needs.what-to-make.outputs.make-mac == 'true' || 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-12
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
sw_vers
|
|
- name: Get Dependencies
|
|
run: |
|
|
brew install cmake gettext ninja node pkg-config
|
|
- name: Get Dependencies (GTK)
|
|
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
|
|
run: brew install gtkmm3
|
|
- name: Get Dependencies (Qt)
|
|
if: ${{ needs.what-to-make.outputs.make-qt == 'true' }}
|
|
run: brew install qt
|
|
- 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' \
|
|
-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' }} \
|
|
-DENABLE_GTK=${{ (needs.what-to-make.outputs.make-gtk == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_MAC=${{ (needs.what-to-make.outputs.make-mac == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-qt == 'true') && 'ON' || '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/**/*
|
|
|
|
debian-11-from-tarball:
|
|
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' || 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: ubuntu-22.04
|
|
env:
|
|
NODE_PATH: /usr/lib/nodejs:/usr/share/nodejs
|
|
container:
|
|
image: debian:11-slim
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
cmake \
|
|
g++ \
|
|
gettext \
|
|
libcurl4-openssl-dev \
|
|
libdeflate-dev \
|
|
libevent-dev \
|
|
libfmt-dev \
|
|
libminiupnpc-dev \
|
|
libnatpmp-dev \
|
|
libpsl-dev \
|
|
libssl-dev \
|
|
ninja-build \
|
|
npm \
|
|
pkg-config \
|
|
xz-utils
|
|
- name: Get Dependencies (GTK)
|
|
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
|
|
run: apt-get install -y --no-install-recommends libglibmm-2.4-dev libgtkmm-3.0-dev
|
|
- name: Get Dependencies (Qt)
|
|
if: ${{ needs.what-to-make.outputs.make-qt == 'true' }}
|
|
run: apt-get install -y --no-install-recommends qtbase5-dev libqt5svg5-dev qttools5-dev
|
|
- 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 \
|
|
-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=${{ (needs.what-to-make.outputs.make-gtk == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_MAC=OFF \
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-qt == 'true') && 'ON' || '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
|
|
- name: Build
|
|
run: cmake --build obj --config RelWithDebInfo
|
|
- name: Test
|
|
if: ${{ needs.what-to-make.outputs.make-tests == 'true' }}
|
|
run: cmake -E chdir obj ctest -j $(nproc) --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/**/*
|
|
|
|
fedora-39-from-tarball:
|
|
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' || 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: ubuntu-22.04
|
|
env:
|
|
NODE_PATH: /usr/lib/nodejs:/usr/share/nodejs
|
|
container:
|
|
image: fedora:39
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
dnf install -y \
|
|
ca-certificates \
|
|
cmake \
|
|
fmt-devel \
|
|
gcc-c++ \
|
|
gettext \
|
|
libcurl-devel \
|
|
libdeflate-devel \
|
|
libevent-devel \
|
|
libnatpmp-devel \
|
|
libpsl-devel \
|
|
miniupnpc-devel \
|
|
ninja-build \
|
|
npm \
|
|
openssl-devel \
|
|
pkgconf-pkg-config \
|
|
xz
|
|
- name: Get Dependencies (GTK)
|
|
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
|
|
run: dnf install -y glibmm2.68-devel gtkmm4.0-devel
|
|
- name: Get Dependencies (Qt)
|
|
if: ${{ needs.what-to-make.outputs.make-qt == 'true' }}
|
|
run: dnf install -y qt6-qtbase-devel qt6-qtsvg-devel qt6-qttools-devel
|
|
- 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 \
|
|
-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=${{ (needs.what-to-make.outputs.make-gtk == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_MAC=OFF \
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-qt == 'true') && 'ON' || '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_DEPRECATED=ON \
|
|
-DENABLE_WERROR=OFF \
|
|
-DRUN_CLANG_TIDY=OFF
|
|
- name: Build
|
|
run: cmake --build obj --config RelWithDebInfo
|
|
- name: Test
|
|
if: ${{ needs.what-to-make.outputs.make-tests == 'true' }}
|
|
run: cmake -E chdir obj ctest -j $(nproc) --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/**/*
|
|
|
|
ubuntu-20-04-from-tarball:
|
|
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' || 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: ubuntu-20.04
|
|
steps:
|
|
- name: Show Configuration
|
|
run: |
|
|
echo '${{ toJSON(needs) }}'
|
|
echo '${{ toJSON(runner) }}'
|
|
cat /etc/os-release
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
appstream \
|
|
ca-certificates \
|
|
clang \
|
|
cmake \
|
|
gettext \
|
|
libcurl4-openssl-dev \
|
|
libdeflate-dev \
|
|
libevent-dev \
|
|
libfmt-dev \
|
|
libminiupnpc-dev \
|
|
libnatpmp-dev \
|
|
libpsl-dev \
|
|
libssl-dev \
|
|
ninja-build \
|
|
npm
|
|
- name: Get Dependencies (GTK)
|
|
if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }}
|
|
run: sudo apt-get install -y --no-install-recommends libglibmm-2.4-dev libgtkmm-3.0-dev
|
|
- name: Get Dependencies (Qt)
|
|
if: ${{ needs.what-to-make.outputs.make-qt == 'true' }}
|
|
run: sudo apt-get install -y --no-install-recommends qtbase5-dev libqt5svg5-dev qttools5-dev
|
|
- 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 \
|
|
-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=${{ (needs.what-to-make.outputs.make-gtk == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_MAC=OFF \
|
|
-DENABLE_QT=${{ (needs.what-to-make.outputs.make-qt == 'true') && 'ON' || 'OFF' }} \
|
|
-DENABLE_TESTS=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
|
|
- 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 $(nproc) --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/**/*
|
|
|
|
android:
|
|
needs: [ what-to-make ]
|
|
if: ${{ needs.what-to-make.outputs.make-android == 'true' }}
|
|
runs-on: ubuntu-22.04
|
|
env:
|
|
VCPKG_DEFAULT_TRIPLET: arm64-android
|
|
steps:
|
|
- name: Get Dependencies
|
|
run: |
|
|
set -ex
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
ninja-build
|
|
|
|
- name: Get Source
|
|
uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Set up JDK 17
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
java-version: '17'
|
|
distribution: 'temurin'
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/gradle-build-action@v3
|
|
with:
|
|
gradle-version: 7.6
|
|
|
|
- name: Setup Android SDK
|
|
uses: android-actions/setup-android@v3
|
|
|
|
- name: Install NDK
|
|
run: sdkmanager "ndk;26.1.10909125"
|
|
|
|
- name: Setup vcpkg
|
|
uses: lukka/run-vcpkg@v11
|
|
with:
|
|
vcpkgGitCommitId: 53bef8994c541b6561884a8395ea35715ece75db # 2024.01.12
|
|
|
|
- name: Install vcpkg packages
|
|
run: |
|
|
vcpkg install openssl curl
|
|
|
|
- name: Build Transmission
|
|
working-directory: ./android
|
|
run: |
|
|
gradle build
|