name: MacOS on: push: branches: - master paths-ignore: - 'docs/**' - 'htdocs/**' - 'web-src/**' pull_request: branches: - master paths-ignore: - 'docs/**' - 'htdocs/**' - 'web-src/**' workflow_dispatch: jobs: build: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Install build tools run: brew install automake autoconf libtool pkg-config - name: Install gperf, bison and flex # Mac OS has ancient versions of bison and flex, so we need a newer from # Homebrew. The new versions are installed keg-only, so we must tell # configure/make where to look. Adjusting $PATH doesn't work (maybe # because make invokes the two via ylwrap), so instead symlink the two # into /usr/local/bin. run: | brew install gperf bison flex sudo ln -s "$(brew --prefix)/opt/bison/bin/bison" /usr/local/bin/bison sudo ln -s "$(brew --prefix)/opt/flex/bin/flex" /usr/local/bin/flex - name: Install libinotify-kqueue # brew does not have libinotify package run: | git clone https://github.com/libinotify-kqueue/libinotify-kqueue cd libinotify-kqueue autoreconf -fvi ./configure make sudo make install cd .. - name: Install sqlite # When GH actions has 3.43.0_1+, which has unlock-notify, then this can be # removed and we can just install brew's sqlite run: | wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz tar xzf sqlite-autoconf-3310100.tar.gz cd sqlite-autoconf-3310100 export CFLAGS='-DSQLITE_ENABLE_UNLOCK_NOTIFY=1' ./configure make sudo make install cd .. - name: Install ffmpeg # The libbluray ffmpeg dependency fails without the chown (source: stackoverflow) run: | sudo chown -R $(whoami) $(brew --prefix)/* brew install ffmpeg - name: Install other dependencies # libxml2 is included with Mac OS run: | brew install libunistring confuse libplist libwebsockets libevent libgcrypt json-c protobuf-c libsodium gnutls pulseaudio openssl - name: Configure # We configure a non-privileged setup, since how to add a "owntone" system # user in MacOS isn't clear to me (useradd etc. isn't available) run: | export CFLAGS="-I$(brew --prefix)/include" export LDFLAGS="-L$(brew --prefix)/lib" autoreconf -fi ./configure --prefix=$HOME/owntone_data/usr --sysconfdir=$HOME/owntone_data/etc --localstatedir=$HOME/owntone_data/var --enable-chromecast --with-pulseaudio - name: Build run: | make - name: Install run: | make install - name: Prepare test run run: | mkdir -p $HOME/owntone_data/media sed -i '' 's/uid = "owntone"/uid = ${USER}/g' $HOME/owntone_data/etc/owntone.conf sed -i '' 's/loglevel = log/loglevel = debug/g' $HOME/owntone_data/etc/owntone.conf sed -i '' 's/directories = { "\/srv\/music" }/directories = { "${HOME}\/owntone_data\/media" }/g' $HOME/owntone_data/etc/owntone.conf - name: Test run run: | $HOME/owntone_data/usr/sbin/owntone -f -t