name: C/C++ CI
on: [push, pull_request]

jobs:

  build_source:
    name: Create source tarball
    runs-on: ubuntu-latest
    container:
      image: opensuse/leap:15.2
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            libQt5Core-devel
            libQt5Gui-devel
            libQt5Widgets-devel
            libQt5Concurrent-devel
            libQt5Network-devel
            libQt5Sql-devel
            libQt5DBus-devel
            libQt5Test-devel
            libqt5-qtx11extras-devel
            libqt5-qtbase-common-devel
            libQt5Sql5-sqlite
            libqt5-linguist-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON
      - name: Create source tarball
        working-directory: build
        run: ../dist/scripts/maketarball.sh


  build_opensuse_lp152_qt5:
    name: Build openSUSE Leap 15.2 Qt 5
    runs-on: ubuntu-latest
    container:
      image: opensuse/leap:15.2
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            libQt5Core-devel
            libQt5Gui-devel
            libQt5Widgets-devel
            libQt5Concurrent-devel
            libQt5Network-devel
            libQt5Sql-devel
            libQt5DBus-devel
            libQt5Test-devel
            libqt5-qtx11extras-devel
            libqt5-qtbase-common-devel
            libQt5Sql5-sqlite
            libqt5-linguist-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON -DBUILD_WITH_QT5=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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_opensuse_lp152_qt6:
    name: Build openSUSE Leap 15.2 Qt 6
    runs-on: ubuntu-latest
    container:
      image: opensuse/leap:15.2
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Add Qt 6 repo
        run: zypper -n ar -c -f -n 'repo-qt6' https://download.opensuse.org/repositories/home:/jonaski:/qt6/openSUSE_Leap_15.2/ repo-qt6
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            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
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON -DBUILD_WITH_QT6=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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_opensuse_lp153_qt5:
    name: Build openSUSE Leap 15.3 Qt 5
    runs-on: ubuntu-latest
    container:
      image: opensuse/leap:15.3
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            libQt5Core-devel
            libQt5Gui-devel
            libQt5Widgets-devel
            libQt5Concurrent-devel
            libQt5Network-devel
            libQt5Sql-devel
            libQt5DBus-devel
            libQt5Test-devel
            libqt5-qtx11extras-devel
            libqt5-qtbase-common-devel
            libQt5Sql5-sqlite
            libqt5-linguist-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON -DBUILD_WITH_QT5=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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_opensuse_lp153_qt6:
    name: Build openSUSE Leap 15.3 Qt 6
    runs-on: ubuntu-latest
    container:
      image: opensuse/leap:15.3
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Add Qt 6 repo
        run: zypper -n ar -c -f -n 'repo-qt6' https://download.opensuse.org/repositories/home:/jonaski:/qt6/openSUSE_Leap_15.3/ repo-qt6
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            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
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON -DBUILD_WITH_QT6=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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_opensuse_tumbleweed_qt5:
    name: Build openSUSE Tumbleweed Qt 5
    runs-on: ubuntu-latest
    container:
      image: opensuse/tumbleweed
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Upgrade packages
        run: zypper --non-interactive --gpg-auto-import-keys dup
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            libQt5Core-devel
            libQt5Gui-devel
            libQt5Widgets-devel
            libQt5Concurrent-devel
            libQt5Network-devel
            libQt5Sql-devel
            libQt5DBus-devel
            libQt5Test-devel
            libqt5-qtx11extras-devel
            libqt5-qtbase-common-devel
            libQt5Sql5-sqlite
            libqt5-linguist-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON -DBUILD_WITH_QT5=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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_opensuse_tumbleweed_qt6:
    name: Build openSUSE Tumbleweed Qt 6
    runs-on: ubuntu-latest
    container:
      image: opensuse/tumbleweed
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Update packages
        run: zypper --non-interactive --gpg-auto-import-keys ref
      - name: Upgrade packages
        run: zypper --non-interactive --gpg-auto-import-keys dup
      - name: Install openSUSE dependencies
        run: >
            zypper --non-interactive --gpg-auto-import-keys install
            lsb-release
            rpm-build
            git
            tar
            make
            cmake
            gcc
            gcc-c++
            gettext-tools
            glibc-devel
            libboost_headers-devel
            boost-devel
            glib2-devel
            glib2-tools
            dbus-1-devel
            alsa-devel
            libnotify-devel
            libgnutls-devel
            protobuf-devel
            sqlite3-devel
            libpulse-devel
            gstreamer-devel
            gstreamer-plugins-base-devel
            vlc-devel
            taglib-devel
            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
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            desktop-file-utils
            update-desktop-files
            appstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON -DBUILD_WITH_QT6=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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_fedora_32:
    name: Build Fedora 32
    runs-on: ubuntu-latest
    container:
      image: fedora:32
    env:
      RPM_BUILD_NCPUS: "2"
    steps:
      - uses: actions/checkout@v1.2.0

      - name: Update packages
        run: yum update --assumeyes

      - name: Upgrade packages
        run: yum upgrade --assumeyes

      - name: Install Fedora dependencies
        run: >
            dnf install --assumeyes
            @development-tools
            redhat-lsb-core
            git
            glibc
            gcc-c++
            rpmdevtools
            make
            cmake
            pkgconfig
            glib
            man
            tar
            gettext
            openssh
            boost-devel
            dbus-devel
            protobuf-devel
            protobuf-compiler
            sqlite-devel
            alsa-lib-devel
            pulseaudio-libs-devel
            libnotify-devel
            gnutls-devel
            qt5-devel
            qt5-qtbase-devel
            qt5-qtx11extras-devel
            qt5-qttools-devel
            gstreamer1-devel
            gstreamer1-plugins-base-devel
            taglib-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            fftw-devel
            desktop-file-utils
            libappstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_fedora_33:
    name: Build Fedora 33
    runs-on: ubuntu-latest
    container:
      image: fedora:33
    env:
      RPM_BUILD_NCPUS: "2"
    steps:
      - uses: actions/checkout@v1.2.0

      - name: Update packages
        run: yum update --assumeyes

      - name: Upgrade packages
        run: yum upgrade --assumeyes

      - name: Install Fedora dependencies
        run: >
            dnf install --assumeyes
            @development-tools
            redhat-lsb-core
            git
            glibc
            gcc-c++
            rpmdevtools
            make
            cmake
            pkgconfig
            glib
            man
            tar
            gettext
            openssh
            boost-devel
            dbus-devel
            protobuf-devel
            protobuf-compiler
            sqlite-devel
            alsa-lib-devel
            pulseaudio-libs-devel
            libnotify-devel
            gnutls-devel
            qt5-qtbase-devel
            qt5-qtx11extras-devel
            qt5-qttools-devel
            gstreamer1-devel
            gstreamer1-plugins-base-devel
            taglib-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            fftw-devel
            desktop-file-utils
            libappstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_fedora_34:
    name: Build Fedora 34
    runs-on: ubuntu-latest
    container:
      image: fedora:34
    env:
      RPM_BUILD_NCPUS: "2"
    steps:
      - uses: actions/checkout@v1.2.0

      - name: Update packages
        run: yum update --assumeyes

      - name: Upgrade packages
        run: yum upgrade --assumeyes

      - name: Install Fedora dependencies
        run: >
            dnf install --assumeyes
            @development-tools
            redhat-lsb-core
            git
            glibc
            gcc-c++
            rpmdevtools
            make
            cmake
            pkgconfig
            glib
            man
            tar
            gettext
            openssh
            boost-devel
            dbus-devel
            protobuf-devel
            protobuf-compiler
            sqlite-devel
            alsa-lib-devel
            pulseaudio-libs-devel
            libnotify-devel
            gnutls-devel
            qt5-qtbase-devel
            qt5-qtx11extras-devel
            qt5-qttools-devel
            gstreamer1-devel
            gstreamer1-plugins-base-devel
            taglib-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libchromaprint-devel
            fftw-devel
            desktop-file-utils
            libappstream-glib
            hicolor-icon-theme
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_centos_8:
    name: Build CentOS 8
    runs-on: ubuntu-latest
    container:
      image: centos:8
    env:
      RPM_BUILD_NCPUS: "2"
    steps:
      - uses: actions/checkout@v1.2.0

      - name: Install dnf-plugins-core
        run: dnf install -y dnf-plugins-core
      - name: Install epel-release
        run: dnf install -y epel-release

      - name:  Install config-manager
        run: dnf install -y 'dnf-command(config-manager)'

      - name: Enable powertools
        run: dnf config-manager --set-enabled powertools

      - name: Clean all
        run: dnf clean all

      - name: Update
        run: dnf update -y

      - name: Install CentOS dependencies
        run: >
            dnf install -y
            glibc
            gcc-c++
            make
            libtool
            cmake3
            rpmdevtools
            redhat-lsb-core
            git
            wget
            curl
            man
            tar
            gettext
            boost-devel
            fuse-devel
            dbus-devel
            libnotify-devel
            gnutls-devel
            sqlite-devel
            protobuf-devel
            protobuf-c
            alsa-lib-devel
            pulseaudio-libs-devel
            qt5-qtbase-devel
            qt5-qtx11extras-devel
            qt5-qttools-devel
            fftw-devel
            libchromaprint-devel
            libcdio-devel
            libgpod-devel
            libmtp-devel
            libjpeg-devel
            cairo-devel
            taglib-devel
            dbus-x11
            xorg-x11-server-Xvfb
            xorg-x11-xauth
            vim-common
            desktop-file-utils
            libappstream-glib
            appstream-data
            hicolor-icon-theme
            gstreamer1-devel
            gstreamer1-plugins-base-devel
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -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
        working-directory: build
        run: rpmbuild -ba ../dist/unix/strawberry.spec


  build_debian_buster:
    name: Build Debian Buster
    runs-on: ubuntu-latest
    container:
      image: debian:buster
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install Debian dependencies
        run: >
            apt-get update && apt-get install -y
            build-essential
            dh-make
            ssh
            git
            make
            cmake
            gcc
            pkg-config
            fakeroot
            gettext
            lsb-release
            libglib2.0-dev
            dpkg-dev
            libdbus-1-dev
            libboost-dev
            libprotobuf-dev
            protobuf-compiler
            libsqlite3-dev
            libgnutls28-dev
            libasound2-dev
            libpulse-dev
            libtag1-dev
            qtbase5-dev
            qtbase5-dev-tools
            qtbase5-private-dev
            libqt5x11extras5-dev
            qttools5-dev
            libgstreamer1.0-dev
            libgstreamer-plugins-base1.0-dev
            gstreamer1.0-alsa
            gstreamer1.0-pulseaudio
            libchromaprint-dev
            libfftw3-dev
            libcdio-dev
            libmtp-dev
            libgpod-dev
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE
      - name: make deb
        shell: bash
        run: dpkg-buildpackage -b -d -uc -us -nc -j2


  build_debian_bullseye:
    name: Build Debian Bullseye
    runs-on: ubuntu-latest
    container:
      image: debian:bullseye
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install Debian dependencies
        run: >
            apt-get update && apt-get install -y
            build-essential
            dh-make
            ssh
            git
            make
            cmake
            gcc
            pkg-config
            fakeroot
            gettext
            lsb-release
            libglib2.0-dev
            dpkg-dev
            libdbus-1-dev
            libboost-dev
            libprotobuf-dev
            protobuf-compiler
            libsqlite3-dev
            libgnutls28-dev
            libasound2-dev
            libpulse-dev
            libtag1-dev
            qtbase5-dev
            qtbase5-dev-tools
            qtbase5-private-dev
            libqt5x11extras5-dev
            qttools5-dev
            libgstreamer1.0-dev
            libgstreamer-plugins-base1.0-dev
            gstreamer1.0-alsa
            gstreamer1.0-pulseaudio
            libchromaprint-dev
            libfftw3-dev
            libcdio-dev
            libmtp-dev
            libgpod-dev
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON
      - name: make deb
        shell: bash
        run: dpkg-buildpackage -b -d -uc -us -nc -j2


  build_ubuntu_bionic:
    name: Build Ubuntu Bionic
    runs-on: ubuntu-latest
    container:
      image: ubuntu:bionic
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install Ubuntu dependencies
        env:
          DEBIAN_FRONTEND: noninteractive
        run: >
            apt-get update && apt-get install -y
            build-essential
            dh-make
            ssh
            git
            make
            cmake
            pkg-config
            gcc
            fakeroot
            wget
            curl
            gettext
            lsb-release
            dpkg-dev
            libglib2.0-dev
            libboost-dev
            libdbus-1-dev
            libprotobuf-dev
            protobuf-compiler
            libsqlite3-dev
            libgnutls28-dev
            libasound2-dev
            libpulse-dev
            libtag1-dev
            qtbase5-dev
            qtbase5-dev-tools
            qtbase5-private-dev
            libqt5x11extras5-dev
            qttools5-dev
            libgstreamer1.0-dev
            libgstreamer-plugins-base1.0-dev
            libgstreamer-plugins-good1.0-dev
            gstreamer1.0-alsa
            gstreamer1.0-pulseaudio
            libchromaprint-dev
            libfftw3-dev
            libcdio-dev
            libmtp-dev
            libgpod-dev
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON
      - name: make deb
        shell: bash
        run: dpkg-buildpackage -b -d -uc -us -nc -j2


  build_ubuntu_focal:
    name: Build Ubuntu Focal
    runs-on: ubuntu-latest
    container:
      image: ubuntu:focal
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install Ubuntu dependencies
        env:
          DEBIAN_FRONTEND: noninteractive
        run: >
            apt-get update && apt-get install -y
            build-essential
            dh-make
            ssh
            git
            make
            cmake
            pkg-config
            gcc
            fakeroot
            wget
            curl
            gettext
            lsb-release
            dpkg-dev
            libglib2.0-dev
            libboost-dev
            libdbus-1-dev
            libprotobuf-dev
            protobuf-compiler
            libsqlite3-dev
            libgnutls28-dev
            libasound2-dev
            libpulse-dev
            libtag1-dev
            qtbase5-dev
            qtbase5-dev-tools
            qtbase5-private-dev
            libqt5x11extras5-dev
            qttools5-dev
            libgstreamer1.0-dev
            libgstreamer-plugins-base1.0-dev
            libgstreamer-plugins-good1.0-dev
            gstreamer1.0-alsa
            gstreamer1.0-pulseaudio
            libchromaprint-dev
            libfftw3-dev
            libcdio-dev
            libmtp-dev
            libgpod-dev
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON
      - name: make deb
        shell: bash
        run: dpkg-buildpackage -b -d -uc -us -nc -j2


  build_ubuntu_groovy:
    name: Build Ubuntu Groovy
    runs-on: ubuntu-latest
    container:
      image: ubuntu:groovy
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install Ubuntu dependencies
        env:
          DEBIAN_FRONTEND: noninteractive
        run: >
            apt-get update && apt-get install -y
            build-essential
            dh-make
            ssh
            git
            make
            cmake
            pkg-config
            gcc
            fakeroot
            wget
            curl
            gettext
            lsb-release
            dpkg-dev
            libglib2.0-dev
            libboost-dev
            libdbus-1-dev
            libprotobuf-dev
            protobuf-compiler
            libsqlite3-dev
            libgnutls28-dev
            libasound2-dev
            libpulse-dev
            libtag1-dev
            qtbase5-dev
            qtbase5-dev-tools
            qtbase5-private-dev
            libqt5x11extras5-dev
            qttools5-dev
            libgstreamer1.0-dev
            libgstreamer-plugins-base1.0-dev
            libgstreamer-plugins-good1.0-dev
            gstreamer1.0-alsa
            gstreamer1.0-pulseaudio
            libchromaprint-dev
            libfftw3-dev
            libcdio-dev
            libmtp-dev
            libgpod-dev
      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WERROR=ON
      - name: make deb
        shell: bash
        run: dpkg-buildpackage -b -d -uc -us -nc -j2


  build-macos-catalina:
    name: Build macOS Catalina
    runs-on: macos-10.15
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install packages
        run: >
          brew install
          glib
          pkgconfig
          boost
          libffi
          protobuf
          protobuf-c
          qt
          gettext
          gnutls
          fftw
          sqlite
          chromaprint
          gstreamer
          gst-plugins-base
          gst-plugins-good
          gst-plugins-bad
          gst-plugins-ugly
          gst-libav
          libcdio
          libmtp
          create-dmg
          taglib

      - name: Install Sparkle
        run: brew install --cask sparkle

      - name: Link Sparkle
        shell: bash
        run: |
          sudo ln -s /usr/local/Caskroom/sparkle/$(ls /usr/local/Caskroom/sparkle | head -n1) /usr/local/opt/sparkle

      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        env:
          BUILD_TYPE: Release
          PKG_CONFIG_PATH: /usr/local/lib/pkgconfig
          Qt6_DIR: /usr/local/opt/qt6/lib/cmake
          Qt5LinguistTools_DIR: /usr/local/opt/qt6/lib/cmake/Qt6LinguistTools
          GIO_EXTRA_MODULES: /usr/local/lib/gio/modules
          GST_PLUGIN_SCANNER: /usr/local/opt/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner
          GST_PLUGIN_PATH: /usr/local/lib/gstreamer-1.0
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WITH_QT6=ON -DBUILD_WERROR=ON -DUSE_BUNDLE=ON -DCMAKE_PREFIX_PATH=/usr/local/opt/qt6/lib/cmake
      - name: Build
        env:
          BUILD_TYPE: Release
        working-directory: build
        shell: bash
        run: cmake --build . --config $BUILD_TYPE
      - name: Install
        working-directory: build
        shell: bash
        run: make install
      - name: Create DMG
        working-directory: build
        shell: bash
        run: make dmg
      - uses: actions/upload-artifact@v2
        with:
          name: upload-macos-catalina
          path: build/strawberry-*-catalina-*.dmg

  build-macos-bigsur:
    name: Build macOS Big Sur
    runs-on: macos-11.0
    steps:
      - uses: actions/checkout@v1.2.0
      - name: Install packages
        run: >
          brew install
          glib
          pkgconfig
          boost
          libffi
          protobuf
          protobuf-c
          qt
          gettext
          gnutls
          fftw
          sqlite
          chromaprint
          gstreamer
          gst-plugins-base
          gst-plugins-good
          gst-plugins-bad
          gst-plugins-ugly
          gst-libav
          libcdio
          libmtp
          create-dmg
          taglib

      - name: Install Sparkle
        run: brew install --cask sparkle

      - name: Link Sparkle
        shell: bash
        run: |
          sudo ln -s /usr/local/Caskroom/sparkle/$(ls /usr/local/Caskroom/sparkle | head -n1) /usr/local/opt/sparkle

      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build
      - name: Configure CMake
        shell: bash
        env:
          BUILD_TYPE: Release
          PKG_CONFIG_PATH: /usr/local/lib/pkgconfig
          Qt5_DIR: /usr/local/opt/qt6/lib/cmake
          Qt5LinguistTools_DIR: /usr/local/opt/qt6/lib/cmake/Qt6LinguistTools
          GIO_EXTRA_MODULES: /usr/local/lib/gio/modules
          GST_PLUGIN_SCANNER: /usr/local/opt/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner
          GST_PLUGIN_PATH: /usr/local/lib/gstreamer-1.0
        working-directory: build
        run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_WITH_QT6=ON -DBUILD_WERROR=ON -DUSE_BUNDLE=ON -DCMAKE_PREFIX_PATH=/usr/local/opt/qt6/lib/cmake
      - name: Build
        env:
          BUILD_TYPE: Release
        working-directory: build
        shell: bash
        run: cmake --build . --config $BUILD_TYPE
      - name: Install
        working-directory: build
        shell: bash
        run: make install
      - name: Create DMG
        working-directory: build
        shell: bash
        run: make dmg
      - uses: actions/upload-artifact@v2
        with:
          name: upload-macos-bigsur
          path: build/strawberry-*-bigsur-*.dmg


  build-windows:
    name: Build Windows
    runs-on: ubuntu-latest
    container:
      image: jonaski/strawberry-mxe2
    steps:
      - uses: actions/checkout@v1.2.0

      - name: Create Build Environment
        shell: bash
        run: cmake -E make_directory build

      - name: Link MXE directory
        shell: bash
        run: ln -s /usr/src/strawberry-mxe ~/mxe-shared

      - name: Run CMake
        shell: bash
        env:
          PKG_CONFIG_PATH: /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/lib/pkgconfig
        working-directory: build
        run: >
          cmake ..
          -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-x86_64-w64-mingw32-shared.cmake
          -DCMAKE_BUILD_TYPE=Release
          -DBUILD_WERROR=ON
          -DARCH=x86_64
          -DENABLE_WIN32_CONSOLE=OFF
          -DENABLE_DBUS=OFF
          -DENABLE_LIBGPOD=OFF
          -DENABLE_LIBMTP=OFF
          -DProtobuf_PROTOC_EXECUTABLE=/usr/src/strawberry-mxe/usr/x86_64-pc-linux-gnu/bin/protoc

      - name: Run Make
        working-directory: build
        run: make -j2

      - name: Create directories
        working-directory: build
        run: mkdir -p gio-modules platforms sqldrivers imageformats styles gstreamer-plugins nsisplugins

      - name: Copy GIO modules
        working-directory: build
        run: cp /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/lib/gio/modules/libgiognutls.dll ${GITHUB_WORKSPACE}/build/gio-modules/

      - name: Copy Qt platforms plugins
        working-directory: build
        run: cp /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/platforms/qwindows.dll ${GITHUB_WORKSPACE}/build/platforms/

      - name: Copy Qt styles plugins
        working-directory: build
        run: cp /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/styles/qwindowsvistastyle.dll ${GITHUB_WORKSPACE}/build/styles/

      - name: Copy Qt SQL drivers plugins
        working-directory: build
        run: cp /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/sqldrivers/qsqlite.dll ${GITHUB_WORKSPACE}/build/sqldrivers/

      - name: Copy Qt imageformats plugins
        working-directory: build
        run: cp /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/imageformats/*.dll ${GITHUB_WORKSPACE}/build/imageformats/

      - name: Copy gstreamer plugins
        working-directory: build
        run: >
          cp
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstapp.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstcoreelements.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudioconvert.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudiofx.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudiomixer.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudioparsers.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudiorate.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudioresample.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaudiotestsrc.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstautodetect.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstplayback.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstvolume.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstspectrum.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstequalizer.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstreplaygain.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgsttypefindfunctions.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstgio.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstdirectsound.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstwasapi.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstpbtypes.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstapetag.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgsticydemux.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstid3demux.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgsttaglib.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgsttcp.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstudp.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstsoup.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstcdio.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstrtp.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstrtsp.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstflac.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstwavparse.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstwavpack.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstogg.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstvorbis.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstopus.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstopusparse.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstspeex.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstlame.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstaiff.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstfaac.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstfaad.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstisomp4.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstasf.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstasfmux.dll
          /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/gstreamer-1.0/libgstlibav.dll
          ${GITHUB_WORKSPACE}/build/gstreamer-plugins/

      - name: Copy extra binaries
        working-directory: build
        run: cp /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared/bin/{sqlite3.exe,killproc.exe,gst-launch-1.0.exe} .

      - name: Copy dependencies
        working-directory: build
        run: >
          /usr/src/strawberry-mxe/tools/copydlldeps.sh
          -c
          -d .
          -F .
          -F ./platforms
          -F ./styles
          -F ./sqldrivers
          -F ./imageformats
          -F ./gstreamer-plugins
          -R /usr/src/strawberry-mxe/usr/x86_64-w64-mingw32.shared

      - name: Strip binaries
        working-directory: build
        run: find . -type f \( -iname \*.dll -o -iname \*.exe \) -exec /usr/src/strawberry-mxe/usr/bin/x86_64-w64-mingw32.shared-strip {} \;

      - name: Copy nsis files
        working-directory: build
        run: cp ${GITHUB_WORKSPACE}/dist/windows/*.nsi ${GITHUB_WORKSPACE}/dist/windows/*.nsh ${GITHUB_WORKSPACE}/dist/windows/*.ico .
        
      - name: Copy COPYING license file
        working-directory: build
        run: cp ${GITHUB_WORKSPACE}/COPYING .

      - name: Build Windows installer
        working-directory: build
        run: makensis strawberry.nsi


  upload-macos-catalina:
    name: Upload macOS Catalina DMG
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/master'
    needs:
      - build-macos-catalina
    steps:
      - uses: actions/checkout@v1.2.0
      - uses: actions/download-artifact@v2
        with:
          path: uploads
      - name: Install SSH keys
        uses: shimataro/ssh-key-action@v2
        with:
          known_hosts: ${{ secrets.KNOWN_HOSTS2 }}
          key: ${{ secrets.SSH_KEY }}
      - name: rsync
        run: |
          set -x
          for i in $(find uploads -type f -name 'strawberry-*-catalina-*.dmg'); do
            rsync -e "ssh -p 50220 -o StrictHostKeyChecking=no" -va $i travis@echoes.jkvinge.net:/home/travis/builds/macos/catalina/
          done

  upload-macos-bigsur:
    name: Upload macOS Big Sur DMG
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/master'
    needs:
      - build-macos-bigsur
    steps:
      - uses: actions/checkout@v1.2.0
      - uses: actions/download-artifact@v2
        with:
          path: uploads
      - name: Install SSH keys
        uses: shimataro/ssh-key-action@v2
        with:
          known_hosts: ${{ secrets.KNOWN_HOSTS2 }}
          key: ${{ secrets.SSH_KEY }}
      - name: rsync
        run: |
          set -x
          for i in $(find uploads -type f -name 'strawberry-*-bigsur-*.dmg'); do
            rsync -e "ssh -p 50220 -o StrictHostKeyChecking=no" -va $i travis@echoes.jkvinge.net:/home/travis/builds/macos/bigsur/
          done
