From 10f6ab3e27c2ffd61755e6d57712affa5c0e5c6d Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Fri, 11 Aug 2023 16:44:26 +0200 Subject: [PATCH] CI: Add workaround for Fedora 39 --- .github/workflows/build.yml | 1518 +---------------------------------- 1 file changed, 2 insertions(+), 1516 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 90c32ae68f..3676140696 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,158 +3,6 @@ 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 - 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 - libebur128-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 @@ -166,8 +14,10 @@ jobs: image: fedora:${{matrix.fedora_version}} steps: - name: Update repositories + if: matrix.fedora_version != '39' run: dnf update -y - name: Upgrade packages + if: matrix.fedora_version != '39' run: dnf upgrade -y - name: Install dependencies run: > @@ -256,1367 +106,3 @@ jobs: 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 - lib64GL-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 - 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 - lib64ebur128-devel - lib64icu-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 - 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@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', '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 - 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@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', '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 - 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 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: Set is release - run: echo "is_release=$(grep '^\s*set\s*(\s*INCLUDE_GIT_REVISION\s\+OFF\s*)\s*$' cmake/Version.cmake >/dev/null 2>&1 && echo 1 || echo 0)" >> $GITHUB_ENV - - 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.is_release == '1' && env.release_version != '' - run: dput ppa:jonaski/strawberry ../*_source.changes - - - 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 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 sqlite fftw libmtp libplist libxml2 libsoup - brew install libogg libvorbis flac wavpack opus speex mpg123 lame twolame taglib chromaprint libebur128 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 chromaprint libebur128 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-play-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: List files - working-directory: build - run: ls - - - 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: 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-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 - 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 - 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 - 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: Set is release - run: echo "is_release=$(grep '^\s*set\s*(\s*INCLUDE_GIT_REVISION\s\+OFF\s*)\s*$' cmake/Version.cmake >/dev/null 2>&1 && echo 1 || echo 0)" >> $GITHUB_ENV - - - 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.is_release == '1' && 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