diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56096750..d1cbf010 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,976 +8,6 @@ on: jobs: - build-opensuse: - name: Build openSUSE - if: github.repository != 'strawberrymusicplayer/strawberry-private' - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - opensuse_version: [ 'tumbleweed', 'leap:15.5', 'leap:15.6' ] - qt_version: [ '5', '6' ] - container: - image: opensuse/${{matrix.opensuse_version}} - steps: - - name: Add devel tools building repo - if: matrix.opensuse_version != 'tumbleweed' - run: zypper -n ar -c -f -n 'devel-tools-building' https://download.opensuse.org/repositories/devel:tools:building/$(echo "${{matrix.opensuse_version}}" | cut -d ':' -f 2)/ devel-tools-building - - name: Add tagparser repo - if: matrix.opensuse_version == 'tumbleweed' - run: zypper -n ar -c -f -n 'repo-tagparser' https://download.opensuse.org/repositories/home:/mkittler/openSUSE_Tumbleweed/ repo-tagparser - - name: Refresh repositories - run: zypper -n --gpg-auto-import-keys ref - - name: Upgrade packages - if: matrix.opensuse_version == 'tumbleweed' - run: zypper -n --gpg-auto-import-keys dup - - name: Upgrade packages - if: matrix.opensuse_version != 'tumbleweed' - run: zypper -n --gpg-auto-import-keys up - - name: Install gcc - if: matrix.opensuse_version == 'tumbleweed' - run: zypper -n --gpg-auto-import-keys in gcc gcc-c++ - - name: Install gcc 13 - if: matrix.opensuse_version != 'tumbleweed' - run: zypper -n --gpg-auto-import-keys in gcc13 gcc13-c++ - - name: Install packages - run: > - zypper -n --gpg-auto-import-keys in - lsb-release - rpm-build - git - tar - make - cmake - gettext-tools - openssh-clients - rsync - glibc-devel - libboost_headers-devel - boost-devel - glib2-devel - glib2-tools - dbus-1-devel - alsa-devel - libnotify-devel - protobuf-devel - sqlite3-devel - libpulse-devel - gstreamer-devel - gstreamer-plugins-base-devel - vlc-devel - taglib-devel - libicu-devel - libcdio-devel - libgpod-devel - libmtp-devel - libchromaprint-devel - fftw3-devel - libebur128-devel - desktop-file-utils - update-desktop-files - appstream-glib - hicolor-icon-theme - - name: Install Qt 5 - if: matrix.qt_version == '5' - run: > - zypper -n --gpg-auto-import-keys in - libQt5Core-devel - libQt5Gui-devel - libQt5Widgets-devel - libQt5Concurrent-devel - libQt5Network-devel - libQt5Sql-devel - libQt5DBus-devel - libQt5Test-devel - libqt5-qtbase-common-devel - libQt5Sql5-sqlite - libqt5-linguist-devel - libqt5-qtx11extras-devel - - name: Install Qt 6 - if: matrix.qt_version == '6' - run: > - zypper -n --gpg-auto-import-keys in - qt6-core-devel - qt6-gui-devel - qt6-widgets-devel - qt6-concurrent-devel - qt6-network-devel - qt6-sql-devel - qt6-dbus-devel - qt6-test-devel - qt6-base-common-devel - qt6-sql-sqlite - qt6-linguist-devel - - name: Install tagparser - if: matrix.opensuse_version == 'tumbleweed' - run: zypper -n --gpg-auto-import-keys in tagparser-devel - - name: Install kdsingleapplication-devel - if: matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '5' - run: zypper -n --gpg-auto-import-keys in kdsingleapplication-devel - - name: Install kdsingleapplication-qt6-devel - if: matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' - run: zypper -n --gpg-auto-import-keys in kdsingleapplication-qt6-devel - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON -DUSE_TAGLIB=ON -DQT_VERSION_MAJOR=${{matrix.qt_version}} - - name: Create source tarball - working-directory: build - run: ../dist/scripts/maketarball.sh - - name: Create RPM build sources directories - run: mkdir -p ~/rpmbuild/SOURCES /usr/src/packages/SOURCES - - name: Copy source tarball - working-directory: build - run: cp strawberry-*.tar.xz /usr/src/packages/SOURCES/ - - name: Build RPM (Tumbleweed) - if: matrix.opensuse_version == 'tumbleweed' - working-directory: build - run: rpmbuild -ba ../dist/unix/strawberry.spec - - name: Build RPM (Leap) - if: matrix.opensuse_version != 'tumbleweed' - working-directory: build - env: - CC: gcc-13 - CXX: g++-13 - run: rpmbuild -ba ../dist/unix/strawberry.spec - - name: Set subdir - id: set-subdir - run: echo "subdir=$(echo ${{matrix.opensuse_version}} | sed 's/leap:/lp/g' | sed 's/\.//g')" > $GITHUB_OUTPUT - - name: Upload source - if: matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == '6' - uses: actions/upload-artifact@v4 - with: - name: source - path: | - /usr/src/packages/SOURCES/*.xz - - name: Upload rpm - if: matrix.opensuse_version != 'tumbleweed' && matrix.qt_version == '6' - uses: actions/upload-artifact@v4 - with: - name: opensuse-${{steps.set-subdir.outputs.subdir}} - path: | - /usr/src/packages/SRPMS/*.rpm - /usr/src/packages/RPMS/x86_64/*.rpm - - - build-fedora: - name: Build Fedora - if: github.repository != 'strawberrymusicplayer/strawberry-private' - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - fedora_version: [ '38', '39', '40', '41' ] - container: - image: fedora:${{matrix.fedora_version}} - steps: - - name: Update repositories - run: dnf -y update - - name: Upgrade packages - run: dnf -y upgrade - - name: Install dependencies - run: > - dnf -y --skip-broken install - @development-tools - redhat-lsb-core - which - git - glibc - gcc-c++ - rpmdevtools - make - cmake - pkgconfig - glib - man - tar - gettext - openssh - rsync - boost-devel - dbus-devel - protobuf-devel - protobuf-compiler - sqlite-devel - alsa-lib-devel - pulseaudio-libs-devel - libnotify-devel - libicu-devel - qt6-qtbase-devel - qt6-qtbase-private-devel - qt6-qttools-devel - gstreamer1-devel - gstreamer1-plugins-base-devel - taglib-devel - libcdio-devel - libgpod-devel - libmtp-devel - libchromaprint-devel - libebur128-devel - fftw-devel - desktop-file-utils - libappstream-glib - hicolor-icon-theme - kdsingleapplication-qt6-devel - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - - name: Create source tarball - working-directory: build - run: ../dist/scripts/maketarball.sh - - name: Create RPM build sources directories - working-directory: build - run: mkdir -p ~/rpmbuild/SOURCES /usr/src/packages/SOURCES - - name: Copy source tarball - working-directory: build - run: cp strawberry-*.tar.xz ~/rpmbuild/SOURCES/ - - name: Build RPM - env: - RPM_BUILD_NCPUS: "2" - working-directory: build - run: rpmbuild -ba ../dist/unix/strawberry.spec - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: fedora-${{matrix.fedora_version}} - path: | - /github/home/rpmbuild/SRPMS/*.rpm - /github/home/rpmbuild/RPMS/x86_64/*.rpm - - - build-openmandriva: - name: Build OpenMandriva - if: github.repository != 'strawberrymusicplayer/strawberry-private' && false - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - openmandriva_version: [ "cooker" ] - container: - image: openmandriva/${{matrix.openmandriva_version}} - steps: - - name: Update distro - run: dnf distro-sync --assumeyes - - name: Install dependencies - run: > - dnf install -y - which - glibc - gcc-c++ - git - gnutar - make - cmake - glib - gettext - lsb-release - rpmdevtools - rpm-build - rsync - glibc-devel - boost-devel - dbus-devel - protobuf-devel - protobuf-compiler - sqlite-devel - libasound-devel - pulseaudio-devel - libGL-devel - libgst-plugins-base1.0-devel - taglib-devel - chromaprint-devel - libebur128-devel - fftw-devel - icu-devel - libcdio-devel - libgpod-devel - libmtp-devel - lib64Qt6Core-devel - lib64Qt6Concurrent-devel - lib64Qt6Network-devel - lib64Qt6Sql-devel - lib64Qt6DBus-devel - lib64Qt6Gui-devel - lib64Qt6Widgets-devel - lib64Qt6Test-devel - qt6-cmake - qt6-qtbase-tools - qt6-qttools-linguist - desktop-file-utils - appstream - appstream-util - hicolor-icon-theme - - name: Remove files - run: rm -rf /usr/lib64/qt6/lib/cmake/Qt6Sql/{Qt6QMYSQL*,Qt6QODBCD*,Qt6QPSQL*,Qt6QIBase*} - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - - name: Create source tarball - working-directory: build - run: ../dist/scripts/maketarball.sh - - name: Create RPM build sources directories - working-directory: build - run: mkdir -p ~/rpmbuild/SOURCES /usr/src/packages/SOURCES - - name: Copy source tarball - working-directory: build - run: cp strawberry-*.tar.xz ~/rpmbuild/SOURCES/ - - name: Build RPM - env: - RPM_BUILD_NCPUS: "2" - working-directory: build - run: rpmbuild -ba ../dist/unix/strawberry.spec - - name: Upload artifacts - if: matrix.openmandriva_version != 'cooker' - uses: actions/upload-artifact@v4 - with: - name: openmandriva-${{matrix.openmandriva_version}} - path: | - /github/home/rpmbuild/SRPMS/*.rpm - /github/home/rpmbuild/RPMS/x86_64/*.rpm - - - build-mageia: - name: Build Mageia - if: github.repository != 'strawberrymusicplayer/strawberry-private' - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - mageia_version: [ '9' ] - container: - image: mageia:${{matrix.mageia_version}} - steps: - - name: Set media - run: | - urpmi.removemedia "Core Release" - urpmi.removemedia "Core Updates" - urpmi.addmedia "Core Release" "https://mirrors.kernel.org/mageia/distrib/${{matrix.mageia_version}}/x86_64/media/core/release/" - urpmi.addmedia "Core Updates" "https://mirrors.kernel.org/mageia/distrib/${{matrix.mageia_version}}/x86_64/media/core/updates/" - - name: Update repositories - run: urpmi.update -a - - name: Upgrade packages - run: urpmi --auto --auto-update - - name: Install dependencies - run: > - urpmi --auto --force urpmi-debuginfo-install - git - glibc - gcc-c++ - binutils - make - cmake - man - tar - rpmdevtools - gettext - rsync - lib64boost-devel - lib64protobuf-devel - lib64sqlite3-devel - lib64alsa2-devel - lib64pulseaudio-devel - lib64gstreamer1.0-devel - lib64gstreamer-plugins-base1.0-devel - lib64cdio-devel - lib64gpod-devel - lib64mtp-devel - lib64taglib-devel - lib64chromaprint-devel - lib64ebur128-devel - lib64icu-devel - lib64fftw-devel - lib64dbus-devel - lib64appstream-devel - lib64qt6core-devel - lib64qt6gui-devel - lib64qt6widgets-devel - lib64qt6network-devel - lib64qt6concurrent-devel - lib64qt6sql-devel - lib64qt6dbus-devel - lib64qt6help-devel - lib64qt6test-devel - protobuf-compiler - desktop-file-utils - appstream-util - hicolor-icon-theme - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - - name: Create source tarball - working-directory: build - run: ../dist/scripts/maketarball.sh - - name: Create RPM build sources directories - working-directory: build - run: mkdir -p ~/rpmbuild/SOURCES /usr/src/packages/SOURCES - - name: Copy source tarball - working-directory: build - run: cp strawberry-*.tar.xz ~/rpmbuild/SOURCES/ - - name: Build RPM - env: - RPM_BUILD_NCPUS: "2" - working-directory: build - run: rpmbuild -ba ../dist/unix/strawberry.spec - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: mageia-${{matrix.mageia_version}} - path: | - /github/home/rpmbuild/SRPMS/*.rpm - /github/home/rpmbuild/RPMS/x86_64/*.rpm - - - build-debian: - name: Build Debian - if: github.repository != 'strawberrymusicplayer/strawberry-private' - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - debian_version: [ 'bullseye', 'bookworm', 'trixie' ] - container: - image: debian:${{matrix.debian_version}} - steps: - - name: Update packages - run: apt update -y - - name: Upgrade packages - run: apt upgrade -y - - name: Install packages - env: - DEBIAN_FRONTEND: noninteractive - run: > - apt install -y - build-essential - dh-make - git - make - cmake - gcc - g++ - pkg-config - fakeroot - gettext - lsb-release - dpkg-dev - libglib2.0-dev - libdbus-1-dev - libboost-dev - libprotobuf-dev - protobuf-compiler - libsqlite3-dev - libasound2-dev - libpulse-dev - libtag1-dev - libicu-dev - libgstreamer1.0-dev - libgstreamer-plugins-base1.0-dev - gstreamer1.0-alsa - gstreamer1.0-pulseaudio - libchromaprint-dev - libebur128-dev - libfftw3-dev - libcdio-dev - libmtp-dev - libgpod-dev - - name: Install Qt 5 - if: matrix.debian_version == 'bullseye' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y qtbase5-dev qtbase5-dev-tools qttools5-dev qttools5-dev-tools libqt5x11extras5-dev - - name: Install Qt 6 - if: matrix.debian_version != 'bullseye' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - - name: make deb - run: dpkg-buildpackage -b -d -uc -us -nc -j2 - - name: Copy deb - run: cp ../*.deb . - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: debian-${{matrix.debian_version}} - path: "*.deb" - - - build-ubuntu: - name: Build Ubuntu - if: github.repository != 'strawberrymusicplayer/strawberry-private' - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - ubuntu_version: [ 'focal', 'jammy', 'mantic', 'noble' ] - container: - image: ubuntu:${{matrix.ubuntu_version}} - steps: - - name: Update packages - run: apt update -y - - name: Upgrade packages - run: apt upgrade -y - - name: Install packages - env: - DEBIAN_FRONTEND: noninteractive - run: > - apt install -y - build-essential - dh-make - git - make - cmake - pkg-config - gcc - g++ - fakeroot - wget - curl - gettext - lsb-release - dpkg-dev - libglib2.0-dev - libboost-dev - libdbus-1-dev - libprotobuf-dev - protobuf-compiler - libsqlite3-dev - libasound2-dev - libpulse-dev - libtag1-dev - libicu-dev - libgstreamer1.0-dev - libgstreamer-plugins-base1.0-dev - libgstreamer-plugins-good1.0-dev - gstreamer1.0-alsa - gstreamer1.0-pulseaudio - libchromaprint-dev - libebur128-dev - libfftw3-dev - libcdio-dev - libmtp-dev - libgpod-dev - - name: Install Qt 5 - if: matrix.ubuntu_version == 'focal' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y qtbase5-dev qtbase5-dev-tools qttools5-dev qttools5-dev-tools libqt5x11extras5-dev - - name: Install Qt 6 - if: matrix.ubuntu_version != 'focal' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - - name: make deb - run: dpkg-buildpackage -b -d -uc -us -nc -j2 - - name: Copy deb - run: cp ../*.deb ../*.ddeb . - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: ubuntu-${{matrix.ubuntu_version}} - path: | - *.deb - *.ddeb - - - upload-ubuntu-ppa: - name: Upload Ubuntu PPA - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false && (github.event_name == 'release' || (github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci'))) - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - ubuntu_version: [ 'focal', 'jammy', 'mantic', 'noble' ] - container: - image: ubuntu:${{matrix.ubuntu_version}} - steps: - - name: Update packages - run: apt update -y - - name: Upgrade packages - run: apt upgrade -y - - name: Install packages - env: - DEBIAN_FRONTEND: noninteractive - run: > - apt install -y - git - build-essential - dh-make - make - cmake - pkg-config - gcc - g++ - fakeroot - gettext - lsb-release - gpg - dput - dpkg-dev - libglib2.0-dev - libboost-dev - libdbus-1-dev - libprotobuf-dev - libsqlite3-dev - libasound2-dev - libpulse-dev - libtag1-dev - libicu-dev - libgstreamer1.0-dev - libgstreamer-plugins-base1.0-dev - libgstreamer-plugins-good1.0-dev - libchromaprint-dev - libebur128-dev - libfftw3-dev - libcdio-dev - libmtp-dev - libgpod-dev - gstreamer1.0-alsa - gstreamer1.0-pulseaudio - protobuf-compiler - - name: Install keyboxd - if: matrix.ubuntu_version == 'noble' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y keyboxd - - name: Install Qt 5 - if: matrix.ubuntu_version == 'focal' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y qtbase5-dev qtbase5-dev-tools qttools5-dev qttools5-dev-tools libqt5x11extras5-dev - - name: Install Qt 6 - if: matrix.ubuntu_version != 'focal' - env: - DEBIAN_FRONTEND: noninteractive - run: apt install -y qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - name: Add safe git directory - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Create Build Environment - run: cmake -E make_directory build - - name: Configure CMake - run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - - name: Delete build directory - run: rm -rf build - - name: Import Ubuntu PPA GPG private key - uses: crazy-max/ghaction-import-gpg@v6 - with: - gpg_private_key: ${{secrets.UBUNTU_PPA_GPG_PRIVATE_KEY}} - - name: dpkg-buildpackage - run: dpkg-buildpackage -S -d -k573D197B5EA20EDF - - name: Upload Unstable PPA - if: github.event_name == 'push' - run: dput ppa:jonaski/strawberry-unstable ../*_source.changes - - name: Upload Stable PPA - if: github.event_name == 'release' - run: dput ppa:jonaski/strawberry ../*_source.changes - - - build-macos-public: - name: Build macOS Public - if: github.repository != 'strawberrymusicplayer/strawberry-private' - - strategy: - fail-fast: false - matrix: - runner: [ 'macos-11' ] - buildtype: [ 'release' ] - - runs-on: ${{ matrix.runner }} - - steps: - - - name: Set arch - shell: bash - run: echo "arch=$(uname -m)" >> $GITHUB_ENV - - - name: Set buildtype - run: echo "buildtype=$(echo ${{matrix.buildtype}} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV - - - name: Set cmake buildtype - run: echo "cmake_buildtype=$(echo ${{env.buildtype}} | awk '{print toupper(substr($0,0,1))tolower(substr($0,2))}')" >> $GITHUB_ENV - - - name: Uninstall homebrew - run: | - curl -sfLO https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh - chmod +x ./uninstall.sh - sudo ./uninstall.sh --force - rm -f uninstall.sh - - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - - name: Import certificate file - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false - uses: apple-actions/import-codesign-certs@v2 - with: - p12-file-base64: ${{ secrets.APPLE_DEVELOPER_ID_CERTIFICATE }} - p12-password: ${{ secrets.APPLE_DEVELOPER_ID_CERTIFICATE_PASSWORD }} - - - name: Download macOS dependencies - run: curl -f -O -L https://github.com/strawberrymusicplayer/strawberry-macos-dependencies/releases/latest/download/strawberry-macos-${{env.arch}}-${{env.buildtype}}.tar.xz - - - name: Extract macOS dependencies - run: sudo tar -C / -xf strawberry-macos-${{env.arch}}-${{env.buildtype}}.tar.xz - - - name: Set prefix path - run: echo "prefix_path=/opt/strawberry_macos_${{env.arch}}_${{env.buildtype}}" >> $GITHUB_ENV - - - name: Update PATH - run: echo "${{env.prefix_path}}/bin" >> $GITHUB_PATH - - - name: Create Build Environment - run: cmake -E make_directory build - - - name: Configure CMake - env: - MACOSX_DEPLOYMENT_TARGET: 11.0 - PKG_CONFIG_PATH: ${{env.prefix_path}}/lib/pkgconfig - LDFLAGS: -L${{env.prefix_path}}/lib -Wl,-rpath,${{env.prefix_path}}/lib - run: > - cmake - --log-level="DEBUG" - -S . - -B build - -DCMAKE_BUILD_TYPE="${{env.cmake_buildtype}}" - -DCMAKE_PREFIX_PATH="${{env.prefix_path}}/lib/cmake" - -DBUILD_WITH_QT6=ON - -DBUILD_WERROR=OFF - -DUSE_BUNDLE=ON - -DENABLE_DBUS=OFF - -DICU_ROOT="${{env.prefix_path}}" - -DFFTW3_DIR="${{env.prefix_path}}" - -DAPPLE_DEVELOPER_ID=$(test '${{github.repository}}' = 'strawberrymusicplayer/strawberry' && test '${{github.event.pull_request.base.repo.full_name}}' = '${{github.event.pull_request.head.repo.full_name}}' && echo "383J84DVB6" || echo "") - - - name: Build - run: cmake --build build --config Release --parallel 4 - - - name: Install - working-directory: build - run: make install - - - name: Deploy - env: - GIO_EXTRA_MODULES: ${{env.prefix_path}}/lib/gio/modules - GST_PLUGIN_SCANNER: ${{env.prefix_path}}/libexec/gstreamer-1.0/gst-plugin-scanner - GST_PLUGIN_PATH: ${{env.prefix_path}}/lib/gstreamer-1.0 - LIBSOUP_LIBRARY_PATH: ${{env.prefix_path}}/lib/libsoup-3.0.0.dylib - working-directory: build - run: make deploy - - - name: Manually Codesign - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false - working-directory: build - run: codesign -s 383J84DVB6 -f strawberry.app/Contents/Frameworks/{libsoup-3.0.0.dylib,libnghttp2.14.dylib,libpsl.5.dylib,libpcre2-16.0.dylib,libpng16.16.dylib,libzstd.1.dylib} strawberry.app/Contents/Frameworks/png.framework/png strawberry.app - - - name: Deploy check - working-directory: build - run: make deploycheck - - - name: Verify code-signing - if: github.repository == 'strawberrymusicplayer/strawberry' && github.event.pull_request.head.repo.fork == false - working-directory: build - run: codesign --deep -v strawberry.app - - - name: Create DMG - working-directory: build - run: make dmg - - - name: SSH key setup - if: github.repository == 'strawberrymusicplayer/strawberry' && (github.event_name == 'release' || (github.event_name == 'push' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos'))) - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{ secrets.SSH_KEY }} - - - name: Set Upload path - id: set-upload-path - if: github.repository == 'strawberrymusicplayer/strawberry' && (github.event_name == 'release' || (github.event_name == 'push' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' || github.ref == 'refs/heads/macos'))) - run: | - if [ "${{github.event_name}}" = "release" ]; then - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_OUTPUT - else - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_OUTPUT - fi - - - name: Create server path - if: steps.set-upload-path.outputs.upload_path != '' - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{steps.set-upload-path.outputs.upload_path}} - - - name: rsync - if: steps.set-upload-path.outputs.upload_path != '' - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{steps.set-upload-path.outputs.upload_path}}/ - - - build-macos-private: - name: Build macOS Private - if: github.repository == 'strawberrymusicplayer/strawberry-private' - - strategy: - fail-fast: false - matrix: - runner: [ 'macos-arm64' ] - buildtype: [ 'release' ] - - runs-on: ${{ matrix.runner }} - - steps: - - - name: Set arch - shell: bash - run: echo "arch=$(uname -m)" >> $GITHUB_ENV - - - name: Set buildtype - run: echo "buildtype=$(echo ${{matrix.buildtype}} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV - - - name: Set cmake buildtype - run: echo "cmake_buildtype=$(echo ${{env.buildtype}} | awk '{print toupper(substr($0,0,1))tolower(substr($0,2))}')" >> $GITHUB_ENV - - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - - name: Unlock keychain - run: security unlock-keychain -p ${{ secrets.MACOS_KEYCHAIN_PASSWORD }} - - - name: Set prefix path - run: echo "prefix_path=/opt/strawberry_macos_${{env.arch}}_${{env.buildtype}}" >> $GITHUB_ENV - - - name: Update PATH - run: echo "${{env.prefix_path}}/bin" >> $GITHUB_PATH - - - name: Create Build Environment - run: cmake -E make_directory build - - - name: Configure CMake - env: - MACOSX_DEPLOYMENT_TARGET: 11.0 - PKG_CONFIG_PATH: ${{env.prefix_path}}/lib/pkgconfig - LDFLAGS: -L${{env.prefix_path}}/lib -Wl,-rpath,${{env.prefix_path}}/lib - run: > - cmake - --log-level="DEBUG" - -S . - -B build - -DCMAKE_BUILD_TYPE="${{env.cmake_buildtype}}" - -DCMAKE_PREFIX_PATH="${{env.prefix_path}}/lib/cmake" - -DBUILD_WITH_QT6=ON - -DBUILD_WERROR=OFF - -DUSE_BUNDLE=ON - -DENABLE_DBUS=OFF - -DICU_ROOT="${{env.prefix_path}}" - -DFFTW3_DIR="${{env.prefix_path}}" - -DAPPLE_DEVELOPER_ID="383J84DVB6" - - - name: Build - run: cmake --build build --config Release --parallel 4 - - - name: Install - working-directory: build - run: make install - - - name: Deploy - env: - GIO_EXTRA_MODULES: ${{env.prefix_path}}/lib/gio/modules - GST_PLUGIN_SCANNER: ${{env.prefix_path}}/libexec/gstreamer-1.0/gst-plugin-scanner - GST_PLUGIN_PATH: ${{env.prefix_path}}/lib/gstreamer-1.0 - LIBSOUP_LIBRARY_PATH: ${{env.prefix_path}}/lib/libsoup-3.0.0.dylib - working-directory: build - run: make deploy - - - name: Manually Codesign - working-directory: build - run: codesign -s 383J84DVB6 -f strawberry.app/Contents/Frameworks/png.framework/png strawberry.app - - - name: Deploy check - working-directory: build - run: make deploycheck - - - name: Verify code-signing - working-directory: build - run: codesign --deep -v strawberry.app - - - name: Create DMG - working-directory: build - run: make dmg - - - name: Set Upload path - id: set-upload-path - run: | - if [ "${{github.event_name}}" = "release" ]; then - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/stable_releases/macos" >> $GITHUB_OUTPUT - else - echo "upload_path=${{secrets.DOWNLOADS_PATH}}/development_releases/macos" >> $GITHUB_OUTPUT - fi - - - name: Create server path - run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{steps.set-upload-path.outputs.upload_path}} - - - name: rsync - run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{steps.set-upload-path.outputs.upload_path}}/ - - build-windows-mingw: name: Build Windows MinGW if: github.repository != 'strawberrymusicplayer/strawberry-private' @@ -985,8 +15,8 @@ jobs: strategy: fail-fast: false matrix: - arch: [ 'i686', 'x86_64' ] - buildtype: [ 'debug', 'release' ] + arch: [ 'x86_64' ] + buildtype: [ 'debug' ] container: image: jonaski/strawberry-mxe-${{matrix.arch}}-${{matrix.buildtype}} steps: @@ -1138,9 +168,16 @@ jobs: exit 1 fi + - name: NSI SetCompressor + if: matrix.buildtype == 'debug' + working-directory: build + run: | + sed -i 's,^SetCompressor /SOLID lzma,SetCompressor lzma,g' strawberry.nsi + grep SetCompressor strawberry.nsi + - name: Build Windows installer working-directory: build - run: makensis strawberry.nsi + run: makensis -V4 strawberry.nsi - name: Upload artifacts uses: actions/upload-artifact@v4 @@ -1148,396 +185,3 @@ jobs: name: windows-mingw-${{matrix.arch}}-${{matrix.buildtype}} path: build/StrawberrySetup*.exe - - build-windows-msvc: - name: Build Windows MSVC - if: github.repository != 'strawberrymusicplayer/strawberry-private' - runs-on: windows-2022 - strategy: - fail-fast: false - matrix: - arch: [ 'x86', 'x86_64' ] - buildtype: [ 'debug', 'release' ] - steps: - - - name: Set prefix path - shell: bash - run: | - echo "prefix_path_backslash=c:\strawberry_msvc_${{matrix.arch}}_${{matrix.buildtype}}" >> $GITHUB_ENV - echo "prefix_path_forwardslash=c:/strawberry_msvc_${{matrix.arch}}_${{matrix.buildtype}}" >> $GITHUB_ENV - echo "prefix_path_unix=/c/strawberry_msvc_${{matrix.arch}}_${{matrix.buildtype}}" >> $GITHUB_ENV - - - name: Set cmake buildtype - shell: bash - run: echo "cmake_buildtype=$(echo ${{matrix.buildtype}} | sed 's/.*/\u&/')" >> $GITHUB_ENV - - - name: Create downloads directory - shell: cmd - run: mkdir downloads - - - name: Download Windows MSVC dependencies - shell: cmd - working-directory: downloads - run: curl -f -O -L https://github.com/strawberrymusicplayer/strawberry-msvc-dependencies/releases/latest/download/strawberry-msvc-${{matrix.arch}}-${{matrix.buildtype}}.tar.xz - - - name: Extract Windows MSVC dependencies - shell: bash - working-directory: downloads - run: tar -C /c -xf strawberry-msvc-${{matrix.arch}}-${{matrix.buildtype}}.tar.xz - - - name: Update PATH - run: echo "${{env.prefix_path_backslash}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - - name: Copy bin files - shell: bash - run: cp /c/strawberry/c/bin/{patch.exe,strip.exe,strings.exe,objdump.exe} ${{env.prefix_path_unix}}/bin - - - name: Delete conflicting files - shell: bash - run: rm -rf /c/msys64 /c/mingw32 /c/mingw64 /c/strawberry/c "/c/program files/OpenSSL" "/c/program files/postgresql" - - - name: Delete conflicting icu - shell: bash - run: | - find "/c/program files (x86)/windows kits/" -iname 'icu*.lib' -delete - find "/c/program files (x86)/windows kits/" -iname 'icu*.h' -delete - - - name: Download NSIS LockedList plugin - shell: cmd - working-directory: downloads - run: curl -f -O -L https://nsis.sourceforge.io/mediawiki/images/d/d3/LockedList.zip - - - name: Extract NSIS LockedList plugin - shell: cmd - working-directory: downloads - run: 7z x LockedList.zip - - - name: Download NSIS Registry plugin - shell: cmd - working-directory: downloads - run: curl -f -O -L https://nsis.sourceforge.io/mediawiki/images/4/47/Registry.zip - - - name: Extract NSIS Registry plugin - shell: cmd - working-directory: downloads - run: 7z x Registry.zip - - - name: Download NSIS Inetc plugin - shell: cmd - working-directory: downloads - run: curl -f -O -L https://nsis.sourceforge.io/mediawiki/images/c/c9/Inetc.zip - - - name: Extract NSIS Inetc plugin - shell: cmd - working-directory: downloads - run: 7z x Inetc.zip - - - name: Install NSIS plugins - shell: cmd - working-directory: downloads - run: | - copy "Plugins\LockedList64.dll" "C:\Program Files (x86)\NSIS\Plugins\" - copy "Plugins\x86-unicode\LockedList.dll" "C:\Program Files (x86)\NSIS\Plugins\x86-unicode\" - copy "Desktop\Plugin\registry.dll" "C:\Program Files (x86)\NSIS\Plugins\" - copy "Desktop\Plugin\registry.dll" "C:\Program Files (x86)\NSIS\Plugins\x86-unicode\" - copy "Plugins\x86-unicode\INetC.dll" "C:\Program Files (x86)\NSIS\Plugins\x86-unicode\" - - - name: Setup MSVC Environment - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{matrix.arch}} - sdk: 10.0.20348.0 - vsversion: 2022 - toolset: 14.3 - - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - submodules: recursive - - - name: Add safe git directory - shell: bash - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - - name: Create Build Environment - shell: cmd - run: cmake -E make_directory build - - - name: Set ENABLE_WIN32_CONSOLE (debug) - if: matrix.build_type == 'debug' - shell: bash - run: echo "win32_console=ON" >> $GITHUB_ENV - - - name: Set ENABLE_WIN32_CONSOLE (release) - if: matrix.build_type == 'release' - shell: bash - run: echo "win32_console=OFF" >> $GITHUB_ENV - - - name: Run CMake - shell: cmd - run: > - cmake - -S . - -B build - -G "Ninja" - -DCMAKE_BUILD_TYPE="${{env.cmake_buildtype}}" - -DCMAKE_PREFIX_PATH="${{env.prefix_path_forwardslash}}/lib/cmake" - -DBUILD_WITH_QT6=ON - -DARCH="${{matrix.arch}}" - -DENABLE_WIN32_CONSOLE=${{env.win32_console}} - -DUSE_TAGLIB=ON - -DPKG_CONFIG_EXECUTABLE="${{env.prefix_path_forwardslash}}/bin/pkg-config.exe" - -DICU_ROOT="${{env.prefix_path_forwardslash}}" - -DFFTW3_DIR="${{env.prefix_path_forwardslash}}" - - - name: Run Make - shell: cmd - env: - CL: "/MP" - run: cmake --build build --config "${{env.cmake_buildtype}}" --parallel 4 - - - name: Copy extra binaries - shell: cmd - working-directory: build - run: | - copy ${{env.prefix_path_backslash}}\bin\libssl-3*.dll - copy ${{env.prefix_path_backslash}}\bin\libcrypto-3*.dll - copy ${{env.prefix_path_backslash}}\bin\soup-3.0-0.dll - copy ${{env.prefix_path_backslash}}\bin\gst-launch-1.0.exe - copy ${{env.prefix_path_backslash}}\bin\gst-play-1.0.exe - copy ${{env.prefix_path_backslash}}\bin\gst-discoverer-1.0.exe - copy ${{env.prefix_path_backslash}}\bin\sqlite3.exe - - - name: Create directories - shell: cmd - working-directory: build - run: | - mkdir gio-modules - mkdir platforms - mkdir styles - mkdir tls - mkdir sqldrivers - mkdir imageformats - mkdir gstreamer-plugins - mkdir nsisplugins - - - name: Copy GIO modules - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\lib\gio\modules\*.dll .\gio-modules\ - - - name: Copy Qt platform plugins - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\plugins\platforms\qwindows*.dll .\platforms\ - - - name: Copy Qt styles - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\plugins\styles\qmodernwindowsstyle*.dll .\styles\ - - - name: Copy Qt TLS plugins - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\plugins\tls\*.dll .\tls\ - - - name: Copy Qt SQL drivers - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\plugins\sqldrivers\qsqlite*.dll .\sqldrivers\ - - - name: Copy Qt imageformats plugins - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\plugins\imageformats\*.dll .\imageformats\ - - - name: Copy gstreamer plugins - shell: cmd - working-directory: build - run: copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\*.dll .\gstreamer-plugins\ - - - name: Download copydlldeps.sh - shell: bash - working-directory: build - run: curl -f -O -L https://raw.githubusercontent.com/strawberrymusicplayer/strawberry-mxe/master/tools/copydlldeps.sh - - - name: Copy dependencies - shell: bash - working-directory: build - run: > - ./copydlldeps.sh - -c - -d . - -F . - -F ./platforms - -F ./styles - -F ./tls - -F ./sqldrivers - -F ./imageformats - -F ./gio-modules - -F ./gstreamer-plugins - -R ${{env.prefix_path_unix}}/bin - - - name: Copy nsis files - shell: cmd - working-directory: build - run: | - copy ..\dist\windows\*.nsi . - copy ..\dist\windows\*.nsh . - copy ..\dist\windows\*.ico . - - - name: Copy COPYING license file - shell: cmd - working-directory: build - run: copy ..\COPYING . - - - name: List files - shell: cmd - working-directory: build - run: dir - - - name: Check that all files are included in nsi - shell: bash - working-directory: build - run: | - files_missing= - for i in $(ls -1 *.dll *.exe); do - nsi_file_entry=$(grep -i "^\s\+File\s\+\"$i\"$" strawberry.nsi || true) - if [ "${nsi_file_entry}" = "" ]; then - echo "File ${i} is missing File entry." - fi - nsi_file_delete_entry=$(grep -i "^\s\+Delete\s\+\"\$INSTDIR\\\\$i\"$" strawberry.nsi || true) - if [ "${nsi_file_delete_entry}" = "" ] ; then - echo "File ${i} is missing Delete entry." - fi - if [ "${nsi_file_entry}" = "" ] || [ "${nsi_file_delete_entry}" = "" ] ; then - if [ "${files_missing}" = "" ]; then - files_missing="${i}" - else - files_missing="${files_missing} $i" - fi - fi - done - if ! [ "${files_missing}" = "" ]; then - echo "Files missing in nsi: ${files_missing}" - exit 1 - fi - - - name: Create nsis installer - shell: cmd - working-directory: build - run: makensis strawberry.nsi - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: windows-msvc-${{matrix.arch}}-${{matrix.buildtype}} - path: build/StrawberrySetup*.exe - - - upload: - name: Upload - if: (success() || failure()) && github.repository == 'strawberrymusicplayer/strawberry' && (github.event_name == 'release' || (github.event_name == 'push' && github.event.pull_request.head.repo.fork == false && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci'))) - runs-on: ubuntu-latest - needs: - - build-opensuse - - build-fedora - - build-debian - - build-ubuntu - - build-windows-mingw - - build-windows-msvc - steps: - - name: Install packages - env: - DEBIAN_FRONTEND: noninteractive - run: sudo apt install -y git rsync - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - name: SSH key setup - uses: shimataro/ssh-key-action@v2 - with: - known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} - key: ${{secrets.SSH_KEY}} - - name: Upload - run: | - for i in $(find artifacts -type f); do - if [ "${{github.event_name}}" = "release" ]; then - upload_path="${{secrets.RELEASES_PATH}}/" - else - distro=$(echo "$i" | cut -d '/' -f 2) - if [ "$(echo "$i" | grep '-' || true)" = "" ]; then - upload_path="${{secrets.BUILDS_PATH}}/${distro}/" - else - distro_name=$(echo "${distro}" | cut -d '-' -f 1) - distro_version=$(echo "${distro}" | cut -d '-' -f 2) - upload_path="${{secrets.BUILDS_PATH}}/${distro_name}/${distro_version}/" - fi - fi - ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${upload_path} - rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var $i ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${upload_path}/ - done - - - attach: - name: Attach to release - if: (success() || failure()) && github.event_name == 'release' - runs-on: ubuntu-latest - needs: - - build-opensuse - - build-fedora - - build-mageia - - build-debian - - build-ubuntu - - build-windows-mingw - - build-windows-msvc - steps: - - name: Install packages - env: - DEBIAN_FRONTEND: noninteractive - run: sudo apt install -y git jq gh - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: Show release assets - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - run: gh release view "${{github.event.release.tag_name}}" --json assets | jq -r '.assets[].name' - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - name: Add artifacts to release - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - run: | - echo "Release version: ${{github.event.release.tag_name}}" - filenames=() - files=() - for i in $(find artifacts -type f); do - filename=$(basename $i) - if [[ ${filenames[@]} =~ ${filename} ]]; then - echo "Skipping duplicate file: ${filename}" - continue - fi - filenames+=("${filename}") - existing_asset=$(gh release view "${{github.event.release.tag_name}}" --json assets | jq -r '.assets[].name' | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) - if [ "${existing_asset}" = "" ]; then - echo "Adding file: ${filename}" - files+=("${i}") - else - echo "Release already has file: ${filename}" - fi - done - files_list="${files[@]}" - if ! [ "${files_list}" = "" ]; then - echo "Adding files to GitHub release" - gh release upload "${{github.event.release.tag_name}}" ${files_list} - fi