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