name: Build on: [push, pull_request] jobs: build-opensuse: name: Build openSUSE runs-on: ubuntu-latest strategy: fail-fast: false matrix: opensuse_version: [ 'tumbleweed', 'leap:15.4', 'leap:15.5' ] qt_version: [ 'qt5', 'qt6' ] container: image: opensuse/${{matrix.opensuse_version}} steps: - 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: Install gcc if: matrix.opensuse_version == 'tumbleweed' run: zypper -n --gpg-auto-import-keys in gcc gcc-c++ - name: Install gcc10 if: matrix.opensuse_version != 'tumbleweed' run: zypper -n --gpg-auto-import-keys in gcc10 gcc10-c++ - name: Install packages run: > zypper -n --gpg-auto-import-keys in lsb-release rpm-build git tar make cmake gettext-tools rsync glibc-devel libboost_headers-devel boost-devel glib2-devel glib2-tools dbus-1-devel alsa-devel libnotify-devel libgnutls-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 desktop-file-utils update-desktop-files appstream-glib hicolor-icon-theme - name: Install Qt 5 if: matrix.qt_version == 'qt5' 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 == 'qt6' 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: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - 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 - 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-10 CXX: g++-10 run: rpmbuild -ba ../dist/unix/strawberry.spec - name: Set opensuse subdir run: echo "opensuse_subdir=$(echo ${{matrix.opensuse_version}} | sed 's/leap:/lp/g' | sed 's/\.//g')" > $GITHUB_ENV - name: Upload artifacts if: matrix.opensuse_version != 'tumbleweed' uses: actions/upload-artifact@v3 with: name: opensuse-${{env.opensuse_subdir}} path: | /usr/src/packages/SOURCES/*.xz /usr/src/packages/SRPMS/*.rpm /usr/src/packages/RPMS/x86_64/*.rpm - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/source ${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}} - name: rsync source if: (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version == 'tumbleweed' && matrix.qt_version == 'qt6' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SOURCES/*.xz ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/source/ - name: rsync rpms if: (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') && matrix.opensuse_version != 'tumbleweed' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /usr/src/packages/SRPMS/*.rpm /usr/src/packages/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/opensuse/${{env.opensuse_subdir}}/ build-fedora: name: Build Fedora runs-on: ubuntu-latest strategy: fail-fast: false matrix: fedora_version: [ '37', '38', '39' ] container: image: fedora:${{matrix.fedora_version}} steps: - name: Fix /etc/dnf/dnf.conf if: matrix.fedora_version == '39' run: | dnf_conf_main=$(grep '^\[main\]$' /etc/dnf/dnf.conf 2>/dev/null || true) if [ "${dnf_conf_main}" = "" ]; then echo "[main]" > /etc/dnf/dnf.conf echo "gpgcheck=True" >> /etc/dnf/dnf.conf echo "installonly_limit=3" >> /etc/dnf/dnf.conf echo "clean_requirements_on_remove=True" >> /etc/dnf/dnf.conf echo "best=False" >> /etc/dnf/dnf.conf echo "skip_if_unavailable=True" >> /etc/dnf/dnf.conf echo "tsflags=nodocs" >> /etc/dnf/dnf.conf fi - name: Update repositories run: dnf update -y - name: Upgrade packages run: dnf upgrade -y - name: Install dependencies run: > dnf install -y @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 gnutls-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 fftw-devel desktop-file-utils libappstream-glib hicolor-icon-theme - name: Remove dangling Qt 6 SQL CMake files run: rm -rf /usr/lib64/cmake/Qt6Sql/{Qt6QMYSQL*,Qt6QODBCD*,Qt6QPSQL*} - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - 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@v3 with: name: fedora-${{matrix.fedora_version}} path: | /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/fedora/${{matrix.fedora_version}} - name: rsync if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/fedora/${{matrix.fedora_version}}/ build-openmandriva: name: Build OpenMandriva runs-on: ubuntu-latest strategy: fail-fast: false matrix: openmandriva_version: [ "cooker" ] container: image: openmandriva/${{matrix.openmandriva_version}} steps: - name: Update repositories run: dnf update -y - name: Upgrade packages run: dnf upgrade -y - name: Install dependencies run: > dnf install -y 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 gnutls-devel lib64GL-devel libgst-plugins-base1.0-devel taglib-devel chromaprint-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 desktop-file-utils appstream appstream-util hicolor-icon-theme - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - 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@v3 with: name: openmandriva-${{matrix.openmandriva_version}} path: | /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - name: SSH key setup if: matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/openmandriva/${{matrix.openmandriva_version}} - name: rsync if: matrix.openmandriva_version != 'cooker' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci') run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/openmandriva/${{matrix.openmandriva_version}}/ build-mageia: name: Build Mageia runs-on: ubuntu-latest strategy: fail-fast: false matrix: mageia_version: [ '8' ] container: image: mageia:${{matrix.mageia_version}} steps: - name: Update repositories run: urpmi.update --auto -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 lib64icu-devel lib64gnutls-devel lib64fftw-devel lib64dbus-devel lib64appstream-devel protobuf-compiler desktop-file-utils appstream-util hicolor-icon-theme - name: Install Qt 5 if: matrix.mageia_version == '8' run: urpmi --auto --force urpmi-debuginfo-install lib64qt5core-devel lib64qt5gui-devel lib64qt5widgets-devel lib64qt5network-devel lib64qt5concurrent-devel lib64qt5sql-devel lib64qt5dbus-devel lib64qt5help-devel lib64qt5test-devel lib64qt5x11extras-devel - name: Install Qt 6 if: matrix.mageia_version == 'cauldron' run: urpmi --auto --force urpmi-debuginfo-install lib64qt6core-devel lib64qt6gui-devel lib64qt6widgets-devel lib64qt6network-devel lib64qt6concurrent-devel lib64qt6sql-devel lib64qt6dbus-devel lib64qt6help-devel lib64qt6test-devel - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - 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@v3 with: name: mageia-${{matrix.mageia_version}} path: /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/mageia/${{matrix.mageia_version}} - name: rsync if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var /github/home/rpmbuild/SRPMS/*.rpm /github/home/rpmbuild/RPMS/x86_64/*.rpm ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/mageia/${{matrix.mageia_version}}/ build-debian: name: Build Debian runs-on: ubuntu-latest strategy: fail-fast: false matrix: debian_version: [ 'bullseye', 'bookworm', 'trixie' ] container: image: debian:${{matrix.debian_version}} steps: - name: Update repositories run: apt update -y - name: Install packages env: DEBIAN_FRONTEND: noninteractive run: > apt install -y build-essential dh-make ssh git make cmake gcc g++ pkg-config fakeroot gettext lsb-release rsync dpkg-dev libglib2.0-dev libdbus-1-dev libboost-dev libprotobuf-dev protobuf-compiler libsqlite3-dev libgnutls28-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 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@v3 with: fetch-depth: 0 - 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@v3 with: name: debian-${{matrix.debian_version}} path: "*.deb" - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/debian/${{matrix.debian_version}} - name: rsync if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var *.deb ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/debian/${{matrix.debian_version}}/ build-ubuntu: name: Build Ubuntu runs-on: ubuntu-latest strategy: fail-fast: false matrix: ubuntu_version: [ 'focal', 'jammy', 'kinetic', 'lunar', 'mantic' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: - name: Update repositories run: apt update -y - name: Install packages env: DEBIAN_FRONTEND: noninteractive run: > apt install -y build-essential dh-make ssh git make cmake pkg-config gcc g++ fakeroot wget curl gettext lsb-release rsync dpkg-dev libglib2.0-dev libboost-dev libdbus-1-dev libprotobuf-dev protobuf-compiler libsqlite3-dev libgnutls28-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 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@v3 with: fetch-depth: 0 - 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@v3 with: name: ubuntu-${{matrix.ubuntu_version}} path: | *.deb *.ddeb - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/ubuntu/${{matrix.ubuntu_version}} - name: rsync if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var *.deb *.ddeb ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/ubuntu/${{matrix.ubuntu_version}}/ upload-ubuntu-ppa: name: Upload Ubuntu PPA if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' runs-on: ubuntu-latest strategy: fail-fast: false matrix: ubuntu_version: [ 'focal', 'jammy', 'kinetic', 'lunar', 'mantic' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: - name: Update repositories run: apt update -y - name: Install packages env: DEBIAN_FRONTEND: noninteractive run: > apt install -y git ssh 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 libgnutls28-dev libasound2-dev libpulse-dev libtag1-dev libicu-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libchromaprint-dev libfftw3-dev libcdio-dev libmtp-dev libgpod-dev gstreamer1.0-alsa gstreamer1.0-pulseaudio protobuf-compiler - 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@v3 with: fetch-depth: 0 - 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@v5 with: gpg_private_key: ${{secrets.UBUNTU_PPA_GPG_PRIVATE_KEY}} - name: dpkg-buildpackage run: dpkg-buildpackage -S -d -k573D197B5EA20EDF - name: Upload Unstable PPA run: dput ppa:jonaski/strawberry-unstable ../*_source.changes - name: Get release version run: echo "release_version=$(git describe --tags --exact-match ${GITHUB_SHA} 2>/dev/null | head -1)" >> $GITHUB_ENV - name: Upload Stable PPA if: env.release_version != '' run: dput ppa:jonaski/strawberry-stable ../*_source.changes build-freebsd: name: Build FreeBSD runs-on: macos-12 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Build FreeBSD id: build-freebsd uses: vmactions/freebsd-vm@v0.3.1 with: usesh: true mem: 4096 prepare: pkg install -y git cmake pkgconf gettext-tools boost-libs glib gnutls qt6-base qt6-tools sqlite gstreamer1 gstreamer1-plugins chromaprint protobuf protobuf-c taglib libcdio libmtp gdk-pixbuf2 libgpod fftw3 googletest iconv icu run: | git config --global --add safe.directory ${GITHUB_WORKSPACE} cmake -E make_directory build cmake -S . -B build -DCMAKE_BUILD_TYPE="Debug" cmake --build build --config Debug --parallel 4 cd .. rm -rf build build-macos-homebrew: name: Build macOS Homebrew runs-on: macos-11 steps: - name: Remove packages run: brew remove aliyun-cli ant aws-sam-cli azure-cli bazelisk bicep composer geckodriver ghostscript helm httpd imagemagick kotlin maven mongodb-community@5.0 mongodb-database-tools mongosh nginx php postgresql@14 ruby@2.7 rustup-init sbt selenium-server swiftformat switchaudio-osx chromedriver firefox google-chrome julia microsoft-edge r session-manager-plugin - name: Update packages run: brew update - name: Upgrade packages run: brew upgrade || true - name: Install packages run: | brew install pkg-config cmake ninja meson bison flex wget create-dmg gettext boost protobuf protobuf-c rsync brew install glib glib-openssl glib-utils glib-networking gdk-pixbuf gobject-introspection orc brew install libffi openssl gnutls sqlite fftw libmtp libplist libxml2 libsoup brew install libogg libvorbis flac wavpack opus speex mpg123 lame twolame taglib chromaprint libbs2b libcdio libopenmpt faad2 faac fdk-aac musepack game-music-emu brew install qt6 - name: Use modified gstreamer plugin formulas run: | wget https://files.strawberrymusicplayer.org/patches/gstreamer.rb wget https://files.strawberrymusicplayer.org/patches/gst-plugins-base.rb wget https://files.strawberrymusicplayer.org/patches/gst-plugins-good.rb wget https://files.strawberrymusicplayer.org/patches/gst-plugins-bad.rb wget https://files.strawberrymusicplayer.org/patches/gst-plugins-ugly.rb wget https://files.strawberrymusicplayer.org/patches/gst-libav.rb mv gstreamer.rb gst-plugins-{base,good,bad,ugly}.rb gst-libav.rb /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ - name: Build and install gstreamer env: HOMEBREW_NO_INSTALL_FROM_API: 1 run: brew reinstall --build-from-source gstreamer - name: Build and install gst-plugins-base env: HOMEBREW_NO_INSTALL_FROM_API: 1 run: brew reinstall --build-from-source gst-plugins-base - name: Build and install gst-plugins-good env: HOMEBREW_NO_INSTALL_FROM_API: 1 run: brew reinstall --build-from-source gst-plugins-good - name: Build and install gst-plugins-bad env: HOMEBREW_NO_INSTALL_FROM_API: 1 run: brew reinstall --build-from-source gst-plugins-bad - name: Build and install gst-plugins-ugly env: HOMEBREW_NO_INSTALL_FROM_API: 1 run: brew reinstall --build-from-source gst-plugins-ugly - name: Build and install gst-libav env: HOMEBREW_NO_INSTALL_FROM_API: 1 run: brew reinstall --build-from-source gst-libav - name: Build libgpod env: PERL_MM_USE_DEFAULT: 1 run: | git clone https://github.com/strawberrymusicplayer/strawberry-libgpod cd strawberry-libgpod mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j 4 sudo make install - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Create Build Environment run: cmake -E make_directory build - name: Configure CMake env: MACOSX_DEPLOYMENT_TARGET: 11.0 PKG_CONFIG_PATH: /usr/local/lib/pkgconfig GIO_EXTRA_MODULES: /usr/local/lib/gio/modules GST_PLUGIN_SCANNER: /usr/local/opt/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner GST_PLUGIN_PATH: /usr/local/lib/gstreamer-1.0 run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON -DBUILD_WERROR=OFF -DUSE_BUNDLE=ON -DCMAKE_PREFIX_PATH=/usr/local/opt/qt6/lib/cmake -DICU_ROOT=/usr/local/opt/icu4c -DENABLE_DBUS=OFF -DPROTOBUF_INCLUDE_DIRS=/usr/local/include - name: Build run: cmake --build build --config Release --parallel 4 - name: Install working-directory: build run: make install - name: Remove problematic files run: | sudo rm -rf /usr/local/opt/qt6/share/qt/plugins/virtualkeyboard /usr/local/opt/qt6/share/qt/plugins/platforminputcontexts sudo rm -f /usr/local/Cellar/qt/*/share/qt/plugins/imageformats/libqpdf.dylib - name: Manually copy files not handled by macdeployqt working-directory: build run: | mkdir -p strawberry.app/Contents/Frameworks/ cp /usr/local/lib/libsoup-3.0.0.dylib strawberry.app/Contents/Frameworks/ - name: Deploy working-directory: build run: make deploy - name: Deploy check working-directory: build run: make deploycheck - name: Create DMG working-directory: build run: make dmg - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: macos path: build/*.dmg - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/macos - name: rsync if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/*.dmg ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/macos/ build-macos-macports: name: Build macOS Macports runs-on: macos-11 steps: - name: Install macports run: | macports_version=$(wget -q -O- 'https://github.com/macports/macports-base' | sed -n 's,.*releases/tag/\([^"&;]*\)".*,\1,p' | sed 's/^v//g' | sort -V | tail -1) wget https://github.com/macports/macports-base/releases/download/v${macports_version}/MacPorts-${macports_version}-11-BigSur.pkg sudo installer -pkg ./MacPorts-${macports_version}-11-BigSur.pkg -target / - name: Uninstall homebrew run: | curl -sLO https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh chmod +x ./uninstall.sh sudo ./uninstall.sh --force - name: Update macports run: sudo /opt/local/bin/port -v selfupdate - name: Install packages run: sudo /opt/local/bin/port -N -p install wget gettext glib2 pkgconfig cmake boost protobuf-cpp sqlite3 gnutls chromaprint fftw taglib libcdio libmtp - name: Install gstreamer run: sudo /opt/local/bin/port -N -p install gstreamer1 gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good gstreamer1-gst-plugins-bad gstreamer1-gst-plugins-ugly gstreamer1-gst-libav - name: Install gst-plugins-bad run: sudo /opt/local/bin/port -N -p install gstreamer1-gst-plugins-bad +faac - name: Install qt6-qtbase run: sudo /opt/local/bin/port -N -p install qt6-qtbase - name: Install qt6-qttools run: sudo /opt/local/bin/port -N -p install qt6-qttools || true - name: Install qt6-sqlite-plugin run: sudo /opt/local/bin/port -N -p install qt6-sqlite-plugin - name: Install libgpod run: sudo /opt/local/bin/port -N -p install libgpod || true - name: Add /opt/local/bin to PATH run: echo "/opt/local/bin" >> $GITHUB_PATH - name: Install create-dmg shell: bash run: | mkdir -p ~/build cd ~/build git clone https://github.com/create-dmg/create-dmg cd create-dmg sudo make install - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Create Build Environment run: /opt/local/bin/cmake -E make_directory build - name: Configure CMake env: MACOSX_DEPLOYMENT_TARGET: 11.0 PKG_CONFIG_PATH: /opt/local/lib/pkgconfig GIO_EXTRA_MODULES: /opt/local/lib/gio/modules GST_PLUGIN_SCANNER: /opt/local/libexec/gstreamer-1.0/gst-plugin-scanner GST_PLUGIN_PATH: /opt/local/lib/gstreamer-1.0 run: /opt/local/libexec/qt6/bin/qt-cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_WITH_QT6=ON -DBUILD_WERROR=OFF -DUSE_BUNDLE=ON -DENABLE_DBUS=OFF - name: Build run: /opt/local/bin/cmake --build build --config Release --parallel 4 - name: Install working-directory: build run: make install - name: Fix macdeployqt and macdeploycheck working-directory: build run: | install_name_tool -change "@rpath/QtCore.framework/Versions/A/QtCore" "/opt/local/libexec/qt6/lib/QtCore.Framework/Versions/A/QtCore" 3rdparty/macdeployqt/macdeployqt install_name_tool -change "@rpath/QtCore.framework/Versions/A/QtCore" "/opt/local/libexec/qt6/lib/QtCore.Framework/Versions/A/QtCore" ext/macdeploycheck/macdeploycheck - name: Deploy working-directory: build run: make deploy - name: Deploy check working-directory: build run: make deploycheck - name: Create DMG working-directory: build run: make dmg build-windows-mingw: name: Build Windows MinGW runs-on: ubuntu-latest strategy: fail-fast: false matrix: arch: [ 'i686', 'x86_64' ] build_type: [ 'debug', 'release' ] container: image: jonaski/strawberry-mxe-${{matrix.arch}}-${{matrix.build_type}} steps: - name: Install rsync run: zypper -n --gpg-auto-import-keys in rsync - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - 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: Link MXE directory run: ln -s /strawberry-mxe ~/mxe-shared - name: Set ENABLE_WIN32_CONSOLE (debug) if: matrix.build_type == 'debug' run: echo "win32_console=ON" >> $GITHUB_ENV - name: Set ENABLE_WIN32_CONSOLE (release) if: matrix.build_type == 'release' run: echo "win32_console=OFF" >> $GITHUB_ENV - name: Run CMake env: PKG_CONFIG_PATH: /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/lib/pkgconfig run: > cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-${{matrix.arch}}-w64-mingw32-shared.cmake" -DCMAKE_BUILD_TYPE="${{matrix.build_type}}" -DCMAKE_PREFIX_PATH="/strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/qt6" -DBUILD_WITH_QT6=ON -DBUILD_WERROR=OFF -DARCH="${{matrix.arch}}" -DENABLE_WIN32_CONSOLE=${{env.win32_console}} -DENABLE_DBUS=OFF -DENABLE_LIBGPOD=OFF -DENABLE_LIBMTP=OFF -DENABLE_AUDIOCD=OFF -DProtobuf_PROTOC_EXECUTABLE="/strawberry-mxe/usr/x86_64-pc-linux-gnu/bin/protoc" - name: Run Make run: cmake --build build --config Release --parallel $(nproc) - name: Create directories working-directory: build run: mkdir -p gio-modules platforms sqldrivers tls imageformats styles gstreamer-plugins nsisplugins - name: Copy GIO modules working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/lib/gio/modules/{libgiognutls.dll,libgioopenssl.dll} ${GITHUB_WORKSPACE}/build/gio-modules/ - name: Copy Qt platform plugins working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/qt6/plugins/platforms/qwindows.dll ${GITHUB_WORKSPACE}/build/platforms/ - name: Copy Qt styles working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/qt6/plugins/styles/qwindowsvistastyle.dll ${GITHUB_WORKSPACE}/build/styles/ - name: Copy Qt TLS plugins working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/qt6/plugins/tls/{qschannelbackend.dll,qopensslbackend.dll} ${GITHUB_WORKSPACE}/build/tls/ - name: Copy Qt SQL drivers working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/qt6/plugins/sqldrivers/qsqlite.dll ${GITHUB_WORKSPACE}/build/sqldrivers/ - name: Copy Qt imageformats working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/qt6/plugins/imageformats/{qgif.dll,qico.dll,qjpeg.dll} ${GITHUB_WORKSPACE}/build/imageformats/ - name: Copy gstreamer plugins working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/gstreamer-1.0/{libgstaes.dll,libgstaiff.dll,libgstapetag.dll,libgstapp.dll,libgstasf.dll,libgstasfmux.dll,libgstaudioconvert.dll,libgstaudiofx.dll,libgstaudiomixer.dll,libgstaudioparsers.dll,libgstaudiorate.dll,libgstaudioresample.dll,libgstaudiotestsrc.dll,libgstautodetect.dll,libgstbs2b.dll,libgstcoreelements.dll,libgstdash.dll,libgstdirectsound.dll,libgstequalizer.dll,libgstfaac.dll,libgstfaad.dll,libgstfdkaac.dll,libgstflac.dll,libgstgio.dll,libgstgme.dll,libgsthls.dll,libgsticydemux.dll,libgstid3demux.dll,libgstid3tag.dll,libgstisomp4.dll,libgstlame.dll,libgstlibav.dll,libgstmpg123.dll,libgstmusepack.dll,libgstogg.dll,libgstopenmpt.dll,libgstopus.dll,libgstopusparse.dll,libgstpbtypes.dll,libgstplayback.dll,libgstreplaygain.dll,libgstrtp.dll,libgstrtsp.dll,libgstsoup.dll,libgstspectrum.dll,libgstspeex.dll,libgsttaglib.dll,libgsttcp.dll,libgsttwolame.dll,libgsttypefindfunctions.dll,libgstudp.dll,libgstvolume.dll,libgstvorbis.dll,libgstwasapi.dll,libgstwavenc.dll,libgstwavpack.dll,libgstwavparse.dll,libgstxingmux.dll} ${GITHUB_WORKSPACE}/build/gstreamer-plugins/ - name: Copy extra binaries working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/{sqlite3.exe,gst-launch-1.0.exe,gst-discoverer-1.0.exe,libsoup-3.0-0.dll,libnghttp2.dll} . - name: Copy extra binaries (debug) if: matrix.build_type == 'debug' working-directory: build run: cp /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared/bin/{gdb.exe,libreadline8.dll} . - name: Copy dependencies working-directory: build run: > /strawberry-mxe/tools/copydlldeps.sh -c -d . -F . -F ./platforms -F ./styles -F ./imageformats -F ./tls -F ./sqldrivers -F ./gstreamer-plugins -R /strawberry-mxe/usr/${{matrix.arch}}-w64-mingw32.shared - name: Strip binaries if: matrix.build_type == 'release' working-directory: build run: find . -type f \( -iname \*.dll -o -iname \*.exe \) -exec /strawberry-mxe/usr/bin/${{matrix.arch}}-w64-mingw32.shared-strip {} \; - name: Strip gdb.exe if: matrix.build_type == 'debug' working-directory: build run: /strawberry-mxe/usr/bin/${{matrix.arch}}-w64-mingw32.shared-strip gdb.exe - name: Copy nsis files working-directory: build run: cp ${GITHUB_WORKSPACE}/dist/windows/*.nsi ${GITHUB_WORKSPACE}/dist/windows/*.nsh ${GITHUB_WORKSPACE}/dist/windows/*.ico . - name: Copy COPYING license file working-directory: build run: cp ${GITHUB_WORKSPACE}/COPYING . - name: Check that all files are included in nsi 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 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: Build Windows installer working-directory: build run: makensis strawberry.nsi - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: windows-mingw path: build/StrawberrySetup*.exe - name: SSH key setup if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{ secrets.SSH_KEY }} - name: Create server path if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/windows/mingw - name: rsync if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var build/StrawberrySetup*.exe ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/windows/mingw/ build-windows-msvc: name: Build Windows MSVC runs-on: windows-2022 strategy: fail-fast: false matrix: arch: [ 'x86', 'x86_64' ] build_type: [ 'debug', 'release' ] steps: - name: Set prefix path shell: bash run: | echo "prefix_path_backslash=c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}" >> $GITHUB_ENV echo "prefix_path_forwardslash=c:/strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}" >> $GITHUB_ENV echo "prefix_path_unix=/c/strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}" >> $GITHUB_ENV - name: Get the latest MSVC dependencies shell: bash run: | msvc_deps_version=$(curl -s 'https://github.com/strawberrymusicplayer/strawberry-msvc-dependencies/releases' | sed -n 's,.*releases/tag/\([^"&;]*\)".*,\1,p' | head -1) echo "msvc_deps_version=${msvc_deps_version}" >> $GITHUB_ENV - name: Download Windows MSVC dependencies uses: suisei-cn/actions-download-file@v1 with: url: "Windows MSVC dependencies [this](https://github.com/strawberrymusicplayer/strawberry-msvc-dependencies/releases/download/${{env.msvc_deps_version}}/strawberry-msvc-${{matrix.arch}}-${{matrix.build_type}}.tar.xz)!" target: downloads/ auto-match: true - name: Extract Windows MSVC dependencies shell: bash run: | tar -xf /d/a/strawberry/strawberry/downloads/strawberry-msvc-${{matrix.arch}}-${{matrix.build_type}}.tar.xz mv strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}} /c/ - 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: Uninstall conflicting mingw shell: cmd run: choco uninstall mingw -y -f - name: Delete conflicting files shell: bash run: rm -rf /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/" -name 'icu*.lib' -delete find "/c/program files (x86)/windows kits/" -name 'icu*.h' -delete - name: Download LockedList plugin for NSIS uses: suisei-cn/actions-download-file@v1 with: url: "LockedList [this](https://nsis.sourceforge.io/mediawiki/images/d/d3/LockedList.zip)!" target: downloads/ auto-match: true - name: Extract NSIS LockedList plugin run: 7z x -o"${{github.workspace}}/NSIS_Plugins" "${{github.workspace}}/downloads/LockedList.zip" - name: Download Registry plugin for NSIS uses: suisei-cn/actions-download-file@v1 with: url: "Registry [this](https://nsis.sourceforge.io/mediawiki/images/4/47/Registry.zip)!" target: downloads/ auto-match: true - name: Extract NSIS Registry plugin run: 7z x -o"${{github.workspace}}/NSIS_Plugins" "${{github.workspace}}/downloads/Registry.zip" - name: Download Inetc plugin for NSIS uses: suisei-cn/actions-download-file@v1 with: url: "Inetc [this](https://nsis.sourceforge.io/mediawiki/images/c/c9/Inetc.zip)!" target: downloads/ auto-match: true - name: Extract NSIS Inetc plugin run: 7z x -o"${{github.workspace}}/NSIS_Plugins" "${{github.workspace}}/downloads/Inetc.zip" - name: Install NSIS plugins run: | copy "${{github.workspace}}/NSIS_Plugins/Plugins/LockedList64.dll" "C:/Program Files (x86)/NSIS/Plugins/" copy "${{github.workspace}}/NSIS_Plugins/Plugins/x86-unicode/LockedList.dll" "C:/Program Files (x86)/NSIS/Plugins/x86-unicode/" copy "${{github.workspace}}/NSIS_Plugins/Desktop/Plugin/registry.dll" "C:/Program Files (x86)/NSIS/Plugins/" copy "${{github.workspace}}/NSIS_Plugins/Desktop/Plugin/registry.dll" "C:/Program Files (x86)/NSIS/Plugins/x86-unicode/" copy "${{github.workspace}}/NSIS_Plugins/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: 17 toolset: 14.3 - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Add safe git directory shell: bash run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - name: Create Build Environment 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 run: > cmake -S . -B build -G "Ninja" -DCMAKE_BUILD_TYPE="${{matrix.build_type}}" -DCMAKE_PREFIX_PATH="${{env.prefix_path_forwardslash}}/lib/cmake" -DBUILD_WITH_QT6=ON -DBUILD_WERROR=OFF -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}}" - name: Run Make env: CL: "/MP" run: cmake --build build --config ${{matrix.build_type}} --parallel 4 - name: Copy extra binaries 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-discoverer-1.0.exe copy ${{env.prefix_path_backslash}}\bin\sqlite3.exe - name: Create directories 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 working-directory: build run: copy ${{env.prefix_path_backslash}}\lib\gio\modules\*.dll .\gio-modules\ - name: Copy Qt platform plugins working-directory: build run: copy ${{env.prefix_path_backslash}}\plugins\platforms\qwindows*.dll .\platforms\ - name: Copy Qt styles working-directory: build run: copy ${{env.prefix_path_backslash}}\plugins\styles\qwindowsvistastyle*.dll .\styles\ - name: Copy Qt TLS plugins working-directory: build run: copy ${{env.prefix_path_backslash}}\plugins\tls\*.dll .\tls\ - name: Copy Qt SQL drivers working-directory: build run: copy ${{env.prefix_path_backslash}}\plugins\sqldrivers\qsqlite*.dll .\sqldrivers\ - name: Copy Qt imageformats plugins working-directory: build run: copy ${{env.prefix_path_backslash}}\plugins\imageformats\*.dll .\imageformats\ - name: Copy gstreamer plugins working-directory: build run: | copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaes.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaiff.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstapetag.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstapp.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstasf.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstasfmux.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudioconvert.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiofx.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiomixer.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudioparsers.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiorate.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudioresample.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstaudiotestsrc.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstautodetect.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstbs2b.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstcoreelements.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstdash.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstdirectsound.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstequalizer.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstfaac.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstfaad.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstfdkaac.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstflac.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstgio.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstgme.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsthls.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsticydemux.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstid3demux.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstid3tag.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstisomp4.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstlame.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstlibav.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmpg123.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstmusepack.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstogg.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstopenmpt.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstopus.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstopusparse.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstpbtypes.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstplayback.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstreplaygain.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstrtp.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstrtsp.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstsoup.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstspectrum.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstspeex.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttaglib.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttcp.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttwolame.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gsttypefindfunctions.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstudp.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstvolume.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstvorbis.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwasapi.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwasapi2.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwavenc.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwavpack.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstwavparse.dll .\gstreamer-plugins\ copy ${{env.prefix_path_backslash}}\lib\gstreamer-1.0\gstxingmux.dll .\gstreamer-plugins\ - name: Download copydlldeps.sh shell: bash working-directory: build run: curl -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 working-directory: build run: | copy ..\dist\windows\*.nsi . copy ..\dist\windows\*.nsh . copy ..\dist\windows\*.ico . - name: Copy COPYING license file working-directory: build run: copy ..\COPYING . - name: List files working-directory: build run: dir - name: Check that all files are included in nsi working-directory: build shell: bash 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 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 working-directory: build run: makensis strawberry.nsi - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: windows-msvc path: build/StrawberrySetup*.exe rsync-windows-msvc-builds: name: Rsync Windows MSVC builds runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' needs: - build-windows-msvc steps: - name: Download artifacts uses: actions/download-artifact@v3 with: name: windows-msvc path: builds - name: View files run: find builds - name: SSH key setup uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{secrets.SSH_KEY}} - name: Create server path shell: bash if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} mkdir -p ${{secrets.BUILDS_PATH}}/windows/msvc - name: rsync shell: bash if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' run: rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var builds/StrawberrySetup-*-msvc-*.exe ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.BUILDS_PATH}}/windows/msvc/ upload-release: name: Upload release runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/ci' needs: - build-opensuse - build-fedora - build-mageia - build-debian - build-ubuntu - build-macos-homebrew - build-windows-mingw - build-windows-msvc steps: - name: Install rsync run: sudo apt install -y rsync - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Get release version run: echo "release_version=$(git describe --tags --exact-match ${GITHUB_SHA} 2>/dev/null | head -1)" >> $GITHUB_ENV - name: Show release version if: env.release_version != '' run: echo "Release version:" ${{env.release_version}} - name: Show release assets if: env.release_version != '' env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: hub release show -f "%as" ${{env.release_version}} - name: Download artifacts if: env.release_version != '' uses: actions/download-artifact@v3 with: path: artifacts - name: SSH key setup if: env.release_version != '' uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{secrets.SSH_KNOWN_HOSTS}} key: ${{secrets.SSH_KEY}} - name: Add artifacts to release if: env.release_version != '' env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} run: | echo "Release version: ${{env.release_version}}" a_files=() for i in $(find artifacts -type f); do filename=$(basename $i) existing_asset=$(hub release show -f "%as" ${{env.release_version}} | tr -d '[:blank:]' | grep ".*/${filename}\$" 2>/dev/null || true) if [ "${existing_asset}" = "" ]; then echo "Adding file: ${filename}" if [ "${file_list}" = "" ]; then file_list="$i" else file_list="${file_list} $i" fi a_files+=("-a" "${i}") else echo "Skipping existing file: ${filename}" fi done if ! [ "${file_list}" = "" ]; then echo "Uploading files: ${file_list}" rsync -e "ssh -p ${{secrets.SSH_PORT}} -o StrictHostKeyChecking=no" -var ${file_list} ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:${{secrets.RELEASES_PATH}}/ fi a_file_list="${a_files[@]}" if ! [ "${a_file_list}" = "" ]; then echo "Adding files to GitHub release: ${file_list}" hub release edit -m "Strawberry ${{env.release_version}}" ${a_file_list} "${{env.release_version}}" fi