name: macos concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: [push, pull_request] defaults: run: shell: bash jobs: macos: # macos-11, macos-12 & macos-13 are broken at this time being. # https://github.com/koreader/koreader/issues/8686, # https://github.com/koreader/koreader/issues/8686#issuecomment-1172950236 # Please don't update to newer macOS version unless you can test that the new # action produces working binaries. # 10.15 is no longer supported so we are running 13 just to make sure the build does not break. runs-on: macos-13 env: # Bump number to reset all caches. CACHE_EPOCH: '0' CLICOLOR_FORCE: '1' MACOSX_DEPLOYMENT_TARGET: '10.15' MAKEFLAGS: 'OUTPUT_DIR=build INSTALL_DIR=install TARGET=macos' steps: - name: XCode version run: xcode-select -p # Checkout / fetch. {{{ - name: Checkout uses: actions/checkout@v4 with: clean: false fetch-depth: 0 filter: tree:0 show-progress: false - name: Fetch run: make fetchthirdparty # }}} # Restore / setup caches. {{{ - name: Generate cache key run: make -C base TARGET= cache-key - name: Restore build directory id: build-restore uses: actions/cache/restore@v4 with: path: base/build key: ${{ env.CACHE_EPOCH }}-${{ runner.os }}-build-${{ hashFiles('base/cache-key') }} - name: Restore build cache id: ccache-restore if: steps.build-restore.outputs.cache-hit != 'true' uses: actions/cache/restore@v4 with: path: /Users/runner/Library/Caches/ccache key: ${{ env.CACHE_EPOCH }}-${{ runner.os }}-ccache-${{ hashFiles('base/cache-key') }} restore-keys: ${{ env.CACHE_EPOCH }}-${{ runner.os }}-ccache- - name: Install ccache if: steps.build-restore.outputs.cache-hit != 'true' run: | wget --progress=dot:mega https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1-darwin.tar.gz tar xf ccache-4.9.1-darwin.tar.gz printf '%s\n' "$PWD/ccache-4.9.1-darwin" >>"${GITHUB_PATH}" - name: Setup build cache if: steps.build-restore.outputs.cache-hit != 'true' run: | set -x which ccache ccache --version ccache --zero-stats ccache --max-size=256M ccache --show-config # }}} # Install dependencies. {{{ - name: Setup Python if: steps.build-restore.outputs.cache-hit != 'true' uses: actions/setup-python@v5 with: # Note: Python 3.12 removal of `distutils` breaks GLib's build. python-version: '3.11' - name: Install homebrew dependencies # Compared to the README, adds p7zip. run: | packages=( nasm binutils coreutils libtool autoconf automake cmake make makedepend sdl2 lua@5.1 luarocks gettext pkg-config wget gnu-getopt grep bison p7zip ninja ) # Lua 5.1 is disabled, so we need to work around that: # - fetch all packages brew fetch "${packages[@]}" # - disable auto-updates export HOMEBREW_NO_AUTO_UPDATE=1 # - install lua@5.1 from cache brew install "$(brew --cache lua@5.1)" # - and install the rest brew install "${packages[@]}" - name: Update PATH run: > printf '%s\n' "$(brew --prefix)/opt/bison/bin" "$(brew --prefix)/opt/gettext/bin" "$(brew --prefix)/opt/gnu-getopt/bin" "$(brew --prefix)/opt/grep/libexec/gnubin" "$(brew --prefix)/opt/make/libexec/gnubin" | tee "${GITHUB_PATH}" # }}} # Build. {{{ - name: Build if: steps.build-restore.outputs.cache-hit != 'true' run: make base # }}} # Clean / save caches. {{{ - name: Clean caches if: steps.build-restore.outputs.cache-hit != 'true' && always() run: | set -x # Trim the build directory. rm -rf base/build/thirdparty ccache --cleanup >/dev/null ccache --show-stats --verbose - name: Save build cache uses: actions/cache/save@v4 if: steps.build-restore.outputs.cache-hit != 'true' && steps.ccache-restore.outputs.cache-hit != 'true' with: path: /Users/runner/Library/Caches/ccache key: ${{ steps.ccache-restore.outputs.cache-primary-key }} - name: Save build directory uses: actions/cache/save@v4 if: steps.build-restore.outputs.cache-hit != 'true' with: path: base/build key: ${{ steps.build-restore.outputs.cache-primary-key }} # }}} # Generate / upload artifact. {{{ - name: Generate artifact run: make update --assume-old=base - name: Upload artifact uses: actions/upload-artifact@v4 with: name: koreader-macos path: '*.7z' # }}} # vim: foldmethod=marker foldlevel=0