---
on:
  workflow_dispatch:
  push:
    paths-ignore:
      - 'android/**'
      - 'build/**'
      - 'doc/**'
      - 'python/**'
      - 'subprojects/**'
      - 'systemd/**'
      - 'win32/**'
    branches:
      - master
      - v0.23.x
  pull_request:
    paths-ignore:
      - 'android/**'
      - 'build/**'
      - 'doc/**'
      - 'python/**'
      - 'subprojects/**'
      - 'systemd/**'
      - 'win32/**'
    branches:
      - master
      - v0.23.x

permissions:
  contents: read #  to fetch code (actions/checkout)

jobs:
  build-linux:
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04]
        include:
          - os: ubuntu-22.04
            cc: gcc-11
            cxx: g++-11
          - os: ubuntu-20.04
            cc: gcc-10
            cxx: g++-10

    runs-on: ${{ matrix.os }}

    env:
      CC: ccache ${{ matrix.cc }}
      CXX: ccache ${{ matrix.cxx }}

    steps:
      - id: checkout
        uses: actions/checkout@v4
      - id: cache-ccache
        uses: hendrikmuhs/ccache-action@v1
        with:
          key: ${{ matrix.os }}
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y --no-install-recommends \
            ${{ matrix.cxx }} ${{matrix.cc }} \
            libfmt-dev \
            libgtest-dev \
            libpcre2-dev \
            libsystemd-dev libdbus-1-dev \
            libicu-dev \
            libcurl4-gnutls-dev \
            libpcre2-dev \
            libavahi-client-dev \
            libmad0-dev libmpg123-dev libid3tag0-dev \
            libflac-dev libvorbis-dev libopus-dev libogg-dev \
            libadplug-dev libaudiofile-dev libsndfile1-dev libfaad-dev \
            libfluidsynth-dev libgme-dev libmikmod-dev libmodplug-dev \
            libmpcdec-dev libwavpack-dev libwildmidi-dev \
            libsidplay2-dev libsidutils-dev libresid-builder-dev \
            libavcodec-dev libavformat-dev \
            libmp3lame-dev libtwolame-dev libshine-dev \
            libsamplerate0-dev libsoxr-dev \
            libbz2-dev libcdio-paranoia-dev libiso9660-dev libmms-dev \
            libzzip-dev \
            libyajl-dev libexpat-dev \
            libasound2-dev libao-dev libjack-jackd2-dev libopenal-dev \
            libpulse-dev libshout3-dev \
            libsndio-dev \
            libmpdclient-dev \
            libnfs-dev \
            libupnp-dev \
            libsqlite3-dev \
            libchromaprint-dev \
            libgcrypt20-dev

      - name: Full Build
        uses: BSFishy/meson-build@v1.0.3
        with:
          action: build
          directory: output/full
          setup-options: -Ddocumentation=disabled -Dtest=true -Dsystemd=enabled -Dpcre=enabled
          options: --verbose
          meson-version: 0.56.0

      - name: Unit Tests
        uses: BSFishy/meson-build@v1.0.3
        with:
          action: test
          directory: output/full
          setup-options: -Ddocumentation=disabled -Dtest=true -Dsystemd=enabled -Dpcre=enabled
          options: --verbose
          meson-version: 0.56.0

      - name: Mini Build
        uses: BSFishy/meson-build@v1.0.3
        with:
          action: build
          directory: output/mini
          setup-options: -Dbuildtype=minsize -Dauto_features=disabled -Dtest=true -Ddaemon=false -Dinotify=false -Depoll=false -Deventfd=false -Dsignalfd=false -Dtcp=false -Ddsd=false -Ddatabase=false -Dneighbor=false -Dcue=false -Dfifo=false -Dhttpd=false -Dpipe=false -Drecorder=false -Dsnapcast=false
          options: --verbose
          meson-version: 0.56.0

  build-macos:
    runs-on: macos-latest
    steps:
      - id: checkout
        uses: actions/checkout@v4

      - id: cache-ccache
        uses: hendrikmuhs/ccache-action@v1
        with:
          key: macos

      - uses: actions/setup-python@v4
        with:
          python-version: 3.x

      - name: Install dependencies
        run: |
          brew install \
            meson ninja \
            fmt \
            googletest \
            icu4c \
            ffmpeg \
            libnfs \
            yajl \
            libupnp \
            libid3tag \
            chromaprint \
            libsamplerate \
            libsoxr \
            flac \
            opus \
            libvorbis \
            faad2 \
            wavpack \
            libmpdclient

      - name: Build
        uses: BSFishy/meson-build@v1.0.3
        with:
          action: build
          directory: output
          setup-options: -Ddocumentation=disabled -Dtest=true
          options: --verbose
          meson-version: 0.56.0

      - name: Unit Tests
        uses: BSFishy/meson-build@v1.0.3
        with:
          action: test
          directory: output
          setup-options: -Ddocumentation=disabled -Dtest=true
          options: --verbose
          meson-version: 0.56.0