diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index ce378acd8..c43e6316c 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -9,19 +9,20 @@ on: env: GTEST_OUTPUT: xml:./ jobs: - what-to-build: + what-to-make: runs-on: ubuntu-22.04 outputs: - build-cli: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.cli-changed == '1' }} - build-code: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.code-changed == '1' }} - build-daemon: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.daemon-changed == '1' }} - build-docs: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.docs-changed == '1' }} - build-gtk: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.gtk-changed == '1' }} - build-mac: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.mac-changed == '1' }} - build-qt: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.qt-changed == '1' }} - build-tests: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.tests-changed == '1' }} - build-utils: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.utils-changed == '1' }} - build-web: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.web-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-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' }} + make-web: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.web-changed == '1' }} + test-style: ${{ steps.check-main-push.outputs.is-main-push == '1' || steps.check-diffs.outputs.our-code-changed == '1' }} steps: - name: Check State id: check-state @@ -44,8 +45,10 @@ jobs: set +e git -C "${GITHUB_WORKSPACE}/src" diff --quiet origin/main -- CMakeLists.txt third-party libtransmission cli echo "::set-output name=cli-changed::$?" + git -C "${GITHUB_WORKSPACE}/src" diff --quiet origin/main -- CMakeLists.txt third-party libtransmission cli daemon gtk macos qt utils tests web + echo "::set-output name=any-code-changed::$?" git -C "${GITHUB_WORKSPACE}/src" diff --quiet origin/main -- CMakeLists.txt libtransmission cli daemon gtk macos qt utils tests web - echo "::set-output name=code-changed::$?" + echo "::set-output name=our-code-changed::$?" git -C "${GITHUB_WORKSPACE}/src" diff --quiet origin/main -- CMakeLists.txt third-party libtransmission daemon echo "::set-output name=daemon-changed::$?" git -C "${GITHUB_WORKSPACE}/src" diff --quiet origin/main -- docs @@ -66,8 +69,8 @@ jobs: code-style: runs-on: ubuntu-22.04 - needs: [ what-to-build ] - if: ${{ needs.what-to-build.outputs.build-code == 'true' }} + needs: [ what-to-make ] + if: ${{ needs.what-to-make.outputs.test-style == 'true' }} steps: - name: Show Configuration run: | @@ -104,8 +107,8 @@ jobs: sanitizer-tests: runs-on: ubuntu-22.04 - needs: [ what-to-build ] - if: ${{ needs.what-to-build.outputs.build-tests == 'true' }} + needs: [ what-to-make ] + if: ${{ needs.what-to-make.outputs.make-tests == 'true' }} steps: - name: Show Configuration run: | @@ -163,8 +166,8 @@ jobs: macos-11: runs-on: macos-11 - needs: [ what-to-build ] - if: ${{ needs.what-to-build.outputs.build-cli == 'true' || needs.what-to-build.outputs.build-daemon == 'true' || needs.what-to-build.outputs.build-gtk == 'true' || needs.what-to-build.outputs.build-mac == 'true' || needs.what-to-build.outputs.build-qt == 'true' || needs.what-to-build.outputs.build-tests == 'true' || needs.what-to-build.outputs.build-utils == 'true' }} + 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: | @@ -174,10 +177,10 @@ jobs: - name: Get Dependencies run: brew install cmake gettext libdeflate libevent libnatpmp libpsl miniupnpc ninja - name: Get Dependencies (GTK) - if: ${{ needs.what-to-build.outputs.build-gtk == 'true' }} + if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }} run: brew install gtkmm3 - name: Get Dependencies (Qt) - if: ${{ needs.what-to-build.outputs.build-qt == 'true' }} + if: ${{ needs.what-to-make.outputs.make-qt == 'true' }} run: brew install qt@5 - name: Get Source uses: actions/checkout@v3 @@ -195,10 +198,83 @@ jobs: -DCMAKE_OSX_ARCHITECTURES='x86_64' \ -DCMAKE_OSX_DEPLOYMENT_TARGET='10.10' \ -DCMAKE_PREFIX_PATH=`brew --prefix`/opt/qt@5 \ + -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' }} \ + -DENABLE_WEB=OFF \ + -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 --build-config RelWithDebInfo --output-on-failure + - name: Install + run: cmake --build obj --config RelWithDebInfo --target install/strip + - uses: actions/upload-artifact@v3 + with: + name: binaries-${{ github.job }} + path: pfx/**/* + + alpine-musl: + needs: [ what-to-build ] + runs-on: ubuntu-22.04 + container: + image: radupopescu/musl-builder + if: ${{ needs.what-to-build.outputs.build-cli == 'true' || needs.what-to-build.outputs.build-daemon == 'true' || needs.what-to-build.outputs.build-gtk == 'true' || needs.what-to-build.outputs.build-qt == 'true' || needs.what-to-build.outputs.build-tests == 'true' || needs.what-to-build.outputs.build-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 \ + g++ \ + gettext \ + git \ + curl-dev \ + fmt-dev \ + libevent-dev \ + libpsl \ + miniupnpc-dev \ + ninja \ + pkgconfig \ + xz + - name: Get Dependencies (GTK) + if: ${{ needs.what-to-build.outputs.build-gtk == 'true' }} + run: apk add --upgrade glibmm-dev gtkmm3-dev + - name: Get Dependencies (Qt) + if: ${{ needs.what-to-build.outputs.build-qt == 'true' }} + run: apk add --upgrade qt5-qtbase-dev qt5-qttools-dev + - name: Get Source + uses: actions/checkout@v3 + with: + path: src + submodules: recursive + - name: Configure + run: | + cmake \ + -S src \ + -B obj \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=pfx \ + -DCMAKE_PREFIX_PATH=`brew --prefix`/opt/qt@5 \ -DENABLE_CLI=${{ (needs.what-to-build.outputs.build-cli == 'true') && 'ON' || 'OFF' }} \ -DENABLE_DAEMON=${{ (needs.what-to-build.outputs.build-daemon == 'true') && 'ON' || 'OFF' }} \ -DENABLE_GTK=${{ (needs.what-to-build.outputs.build-gtk == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_MAC=${{ (needs.what-to-build.outputs.build-mac == 'true') && 'ON' || 'OFF' }} \ + -DENABLE_MAC=OFF \ -DENABLE_QT=${{ (needs.what-to-build.outputs.build-qt == 'true') && 'ON' || 'OFF' }} \ -DENABLE_TESTS=OFF \ -DENABLE_UTILS=${{ (needs.what-to-build.outputs.build-utils == 'true') && 'ON' || 'OFF' }} \ @@ -220,8 +296,8 @@ jobs: make-source-tarball: runs-on: ubuntu-22.04 - needs: [ what-to-build ] - if: ${{ needs.what-to-build.outputs.build-code == 'true' }} + needs: [ what-to-make ] + if: ${{ needs.what-to-make.outputs.make-source-tarball == 'true' }} steps: - name: Show Configuration run: | @@ -257,8 +333,8 @@ jobs: path: obj/transmission*.tar.* macos-11-from-tarball: - needs: [ make-source-tarball, what-to-build ] - if: ${{ needs.what-to-build.outputs.build-cli == 'true' || needs.what-to-build.outputs.build-daemon == 'true' || needs.what-to-build.outputs.build-gtk == 'true' || needs.what-to-build.outputs.build-mac == 'true' || needs.what-to-build.outputs.build-qt == 'true' || needs.what-to-build.outputs.build-tests == 'true' || needs.what-to-build.outputs.build-utils == 'true' }} + 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-11 steps: - name: Show Configuration @@ -269,10 +345,10 @@ jobs: - name: Get Dependencies run: brew install cmake gettext libdeflate libevent libnatpmp libpsl miniupnpc ninja - name: Get Dependencies (GTK) - if: ${{ needs.what-to-build.outputs.build-gtk == 'true' }} + if: ${{ needs.what-to-make.outputs.make-gtk == 'true' }} run: brew install gtkmm3 - name: Get Dependencies (Qt) - if: ${{ needs.what-to-build.outputs.build-qt == 'true' }} + if: ${{ needs.what-to-make.outputs.make-qt == 'true' }} run: brew install qt@5 - name: Get Source uses: actions/download-artifact@v3 @@ -291,19 +367,19 @@ jobs: -DCMAKE_OSX_ARCHITECTURES='x86_64' \ -DCMAKE_OSX_DEPLOYMENT_TARGET='10.10' \ -DCMAKE_PREFIX_PATH=`brew --prefix`/opt/qt@5 \ - -DENABLE_CLI=${{ (needs.what-to-build.outputs.build-cli == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_DAEMON=${{ (needs.what-to-build.outputs.build-daemon == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_GTK=${{ (needs.what-to-build.outputs.build-gtk == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_MAC=${{ (needs.what-to-build.outputs.build-mac == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_QT=${{ (needs.what-to-build.outputs.build-qt == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_TESTS=${{ (needs.what-to-build.outputs.build-tests == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_UTILS=${{ (needs.what-to-build.outputs.build-utils == 'true') && 'ON' || 'OFF' }} \ + -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' }} \ -DENABLE_WEB=OFF \ -DRUN_CLANG_TIDY=OFF - name: Make run: cmake --build obj --config RelWithDebInfo - name: Test - if: ${{ needs.what-to-build.outputs.build-tests == 'true' }} + if: ${{ needs.what-to-make.outputs.make-tests == 'true' }} env: TMPDIR: /private/tmp run: cmake -E chdir obj ctest --build-config RelWithDebInfo --output-on-failure @@ -315,8 +391,8 @@ jobs: path: pfx/**/* debian-11-from-tarball: - needs: [ make-source-tarball, what-to-build ] - if: ${{ needs.what-to-build.outputs.build-cli == 'true' || needs.what-to-build.outputs.build-daemon == 'true' || needs.what-to-build.outputs.build-gtk == 'true' || needs.what-to-build.outputs.build-mac == 'true' || needs.what-to-build.outputs.build-qt == 'true' || needs.what-to-build.outputs.build-tests == 'true' || needs.what-to-build.outputs.build-utils == 'true' }} + 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 container: image: debian:11-slim @@ -347,10 +423,10 @@ jobs: pkg-config \ xz-utils - name: Get Dependencies (GTK) - if: ${{ needs.what-to-build.outputs.build-gtk == 'true' }} + 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-build.outputs.build-qt == 'true' }} + if: ${{ needs.what-to-make.outputs.make-qt == 'true' }} run: apt-get install -y --no-install-recommends qtbase5-dev qttools5-dev - name: Get Source uses: actions/download-artifact@v3 @@ -366,19 +442,19 @@ jobs: -G Ninja \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=pfx \ - -DENABLE_CLI=${{ (needs.what-to-build.outputs.build-cli == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_DAEMON=${{ (needs.what-to-build.outputs.build-daemon == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_GTK=${{ (needs.what-to-build.outputs.build-gtk == 'true') && 'ON' || 'OFF' }} \ + -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-build.outputs.build-qt == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_TESTS=${{ (needs.what-to-build.outputs.build-tests == 'true') && 'ON' || 'OFF' }} \ - -DENABLE_UTILS=${{ (needs.what-to-build.outputs.build-utils == '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' }} \ -DENABLE_WEB=OFF \ -DRUN_CLANG_TIDY=OFF - name: Build run: cmake --build obj --config RelWithDebInfo - name: Test - if: ${{ needs.what-to-build.outputs.build-tests == 'true' }} + if: ${{ needs.what-to-make.outputs.make-tests == 'true' }} run: cmake -E chdir obj ctest --build-config RelWithDebInfo --output-on-failure - name: Install run: cmake --build obj --config RelWithDebInfo --target install/strip