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' ] 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 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 - 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 working-directory: build run: cmake .. -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 build_fedora: name: Build Fedora runs-on: ubuntu-latest strategy: fail-fast: false matrix: fedora_version: [ '36', '37', '38' ] container: image: fedora:${{matrix.fedora_version}} steps: - name: Update repositories run: yum update --assumeyes - name: Upgrade packages run: yum upgrade --assumeyes - name: Install dependencies run: > dnf install --assumeyes @development-tools redhat-lsb-core which git glibc gcc-c++ rpmdevtools make cmake pkgconfig glib man tar gettext openssh 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*} - 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 working-directory: build run: cmake .. -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 build_openmandriva: name: Build OpenMandriva runs-on: ubuntu-latest strategy: fail-fast: false matrix: openmandriva_version: [ "4.2" ] container: image: openmandriva/${{matrix.openmandriva_version}} steps: - name: Update repositories run: dnf update --assumeyes - name: Upgrade packages run: dnf upgrade --assumeyes - name: Install dependencies run: > dnf install --assumeyes glibc gcc-c++ git gnutar make cmake glib gettext lsb-release rpmdevtools rpm-build 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 - 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 working-directory: build run: cmake .. -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 build_debian: name: Build Debian runs-on: ubuntu-latest strategy: fail-fast: false matrix: debian_version: [ 'buster', 'bullseye', 'bookworm' ] container: image: debian:${{matrix.debian_version}} steps: - name: Update repositories run: apt update - 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 libglib2.0-dev dpkg-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 == 'buster' || 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 != 'buster' && 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 - 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 working-directory: build run: cmake .. -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - name: make deb run: dpkg-buildpackage -b -d -uc -us -nc -j2 build_ubuntu: name: Build Ubuntu runs-on: ubuntu-latest strategy: fail-fast: false matrix: ubuntu_version: [ 'bionic', 'focal', 'jammy', 'kinetic' ] container: image: ubuntu:${{matrix.ubuntu_version}} steps: - name: Install packages env: DEBIAN_FRONTEND: noninteractive run: > apt-get update && apt-get install -y build-essential dh-make ssh 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 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 == 'bionic' || matrix.ubuntu_version == 'focal' env: DEBIAN_FRONTEND: noninteractive run: apt-get update && apt-get install -y qtbase5-dev qtbase5-dev-tools qttools5-dev qttools5-dev-tools libqt5x11extras5-dev - name: Install Qt 6 if: matrix.ubuntu_version != 'bionic' && matrix.ubuntu_version != 'focal' env: DEBIAN_FRONTEND: noninteractive run: apt-get update && apt-get install -y qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools qt6-l10n-tools - 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 working-directory: build run: cmake .. -DCMAKE_BUILD_TYPE=Debug -DBUILD_WERROR=ON - name: make deb run: dpkg-buildpackage -b -d -uc -us -nc -j2 build-freebsd: name: Build FreeBSD runs-on: macos-10.15 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Build FreeBSD id: build-freebsd uses: vmactions/freebsd-vm@v0.2.9 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 cd build cmake .. -DCMAKE_BUILD_TYPE="Debug" cmake --build . --config Debug --parallel 4 cd .. rm -rf build build-macos: name: Build macOS runs-on: macos-11 steps: - name: Remove packages run: brew remove aliyun-cli ant aws-sam-cli azure-cli bazelisk bicep composer geckodriver ghostscript go@1.17 helm httpd imagemagick kotlin maven mongodb-community@5.0 mongodb-database-tools mongosh nginx node@16 php postgresql@14 ruby@2.7 rustup-init sbt selenium-server swiftformat switchaudio-osx chromedriver firefox google-chrome graalvm-ce-java11 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 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 run: brew reinstall --build-from-source gstreamer - name: Build and install gst-plugins-base run: brew reinstall --build-from-source gst-plugins-base - name: Build and install gst-plugins-good run: brew reinstall --build-from-source gst-plugins-good - name: Build and install gst-plugins-bad run: brew reinstall --build-from-source gst-plugins-bad - name: Build and install gst-plugins-ugly run: brew reinstall --build-from-source gst-plugins-ugly - name: Build and install gst-libav 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 - 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: 10.15 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 working-directory: build run: cmake .. -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 - name: Build working-directory: build run: cmake --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 - uses: actions/upload-artifact@v3 with: name: upload-macos path: build/strawberry-*.dmg upload-macos: name: Upload macOS DMG runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/macos' needs: - build-macos steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v3 with: path: uploads - name: Install SSH keys uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{ secrets.KNOWN_HOSTS2 }} key: ${{ secrets.SSH_KEY }} - name: rsync run: | set -x for i in $(find uploads -type f -name 'strawberry-*.dmg'); do rsync -e "ssh -p 50220 -o StrictHostKeyChecking=no" -va $i travis@echoes.jkvinge.net:/home/travis/builds/macos/ done 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}} steps: - 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 working-directory: build run: > cmake .. -DCMAKE_TOOLCHAIN_FILE="../cmake/Toolchain-${{matrix.arch}}-w64-mingw32-shared.cmake" -DCMAKE_BUILD_TYPE="${{env.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.build_type}} -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 working-directory: build run: cmake --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/*.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 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: 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: Build Windows installer working-directory: build run: makensis strawberry.nsi build-windows-msvc: name: Build Windows MSVC runs-on: windows-2019 strategy: fail-fast: false matrix: arch: [ 'x86', 'x86_64' ] build_type: [ 'debug', 'release' ] steps: - uses: ilammy/msvc-dev-cmd@v1 with: arch: ${{matrix.arch}} toolset: 14.29 - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Delete conflicting files shell: bash run: | rm -f /c/programdata/chocolatey/bin/{addr2line.exe,ar.exe,as.exe,c++.exe,c++filt.exe,cc1.exe,cc1plus.exe,cpp.exe,g++.exe,gcc-ar.exe,gcc-nm.exe,gcc-ranlib.exe,gcc.exe,gdb.exe,gfortran.exe,ld.bfd.exe,ld.exe,ld.gold.exe,nm.exe,ranlib.exe,readelf.exe,windres.exe,x86_64-w64-mingw32-c++.exe,x86_64-w64-mingw32-g++.exe,x86_64-w64-mingw32-gcc-8.1.0.exe,x86_64-w64-mingw32-gcc-ar.exe,x86_64-w64-mingw32-gcc-nm.exe,x86_64-w64-mingw32-gcc-ranlib.exe,x86_64-w64-mingw32-gcc.exe,x86_64-w64-mingw32-gfortran.exe} rm -f /c/strawberry/c/bin/{addr2line.exe,ar.exe,as.exe,c++.exe,c++filt.exe,cpp.exe,g++.exe,gcc-ar.exe,gcc-nm.exe,gcc-ranlib.exe,gcc.exe,ld.exe,nm.exe,ranlib.exe,readelf.exe,widl.exe,windmc.exe,windres.exe,x86_64-w64-mingw32-c++.exe,x86_64-w64-mingw32-g++.exe,x86_64-w64-mingw32-gcc-8.3.0.exe,x86_64-w64-mingw32-gcc-ar.exe,x86_64-w64-mingw32-gcc-nm.exe,x86_64-w64-mingw32-gcc-ranlib.exe,x86_64-w64-mingw32-gcc.exe,x86_64-w64-mingw32-gfortran.exe} - name: Get 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: 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: 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 "c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - 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 working-directory: build run: > cmake .. -G "Ninja" -DCMAKE_BUILD_TYPE="${{matrix.build_type}}" -DCMAKE_PREFIX_PATH="c:/strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}/lib/cmake" -DBUILD_WITH_QT6=ON -DBUILD_WERROR=OFF -DARCH="${{matrix.arch}}" -DENABLE_WIN32_CONSOLE=${{env.win32_console}} -DUSE_TAGLIB=ON -DPKG_CONFIG_EXECUTABLE="c:/strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}/bin/pkg-config.exe" -DICU_ROOT="c:/strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}" - name: Run Make env: CL: "/MP" working-directory: build run: cmake --build . --config ${{matrix.build_type}} --parallel 4 - name: list files working-directory: build run: dir - name: Copy extra binaries working-directory: build run: | copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\bin\libssl-3*.dll copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\bin\libcrypto-3*.dll copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\bin\soup-3.0-0.dll copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\bin\gst-launch-1.0.exe copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\bin\gst-discoverer-1.0.exe copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\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 c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gio\modules\*.dll .\gio-modules\ - name: Copy Qt platform plugins working-directory: build run: copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\plugins\platforms\qwindows*.dll .\platforms\ - name: Copy Qt styles working-directory: build run: copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\plugins\styles\qwindowsvistastyle*.dll .\styles\ - name: Copy Qt TLS plugins working-directory: build run: copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\plugins\tls\*.dll .\tls\ - name: Copy Qt SQL drivers working-directory: build run: copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\plugins\sqldrivers\qsqlite*.dll .\sqldrivers\ - name: Copy Qt imageformats plugins working-directory: build run: copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\plugins\imageformats\*.dll .\imageformats\ - name: Copy gstreamer plugins working-directory: build run: | copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaes.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaiff.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstapetag.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstapp.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstasf.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstasfmux.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudioconvert.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudiofx.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudiomixer.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudioparsers.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudiorate.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudioresample.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstaudiotestsrc.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstautodetect.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstbs2b.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstcoreelements.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstdash.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstdirectsound.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstequalizer.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstfaac.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstfaad.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstfdkaac.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstflac.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstgio.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstgme.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gsthls.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gsticydemux.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstid3demux.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstid3tag.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstisomp4.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstlame.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstlibav.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstmpg123.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstmusepack.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstogg.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstopenmpt.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstopus.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstopusparse.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstpbtypes.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstplayback.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstreplaygain.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstrtp.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstrtsp.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstsoup.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstspectrum.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstspeex.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gsttaglib.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gsttcp.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gsttwolame.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gsttypefindfunctions.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstudp.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstvolume.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstvorbis.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstwasapi.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstwavenc.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstwavpack.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\lib\gstreamer-1.0\gstwavparse.dll .\gstreamer-plugins\ copy c:\strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}\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 /c/strawberry_msvc_${{matrix.arch}}_${{matrix.build_type}}/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: Create nsis installer working-directory: build run: makensis strawberry.nsi - uses: actions/upload-artifact@v3 with: name: upload-windows path: build/StrawberrySetup*.exe upload-windows-msvc: name: Upload Windows MSVC Setup runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' needs: - build-windows-msvc steps: - uses: actions/checkout@v3 - uses: actions/download-artifact@v3 with: path: uploads - name: Install SSH keys uses: shimataro/ssh-key-action@v2 with: known_hosts: ${{ secrets.KNOWN_HOSTS2 }} key: ${{ secrets.SSH_KEY }} - name: rsync run: | set -x for i in $(find uploads -type f -name 'StrawberrySetup*.exe'); do rsync -e "ssh -p 50220 -o StrictHostKeyChecking=no" -va $i travis@echoes.jkvinge.net:/home/travis/builds/windows/ done