name: macOS

on:
  push:
    branches: ["master"]
    tags: ["4.*"]
  pull_request:
    branches: ["master"]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    name: build + test
    strategy:
      fail-fast: false
      matrix:
        ver: ["14", "15", "26"]
    runs-on: macos-${{ matrix.ver }}
    steps:
      - uses: actions/checkout@v6

      - name: Relink `python` package in `brew`
        # Unlink and re-link to prevent errors when GitHub `macos` runner images
        # install `python` outside of `brew`, for example:
        # https://github.com/orgs/Homebrew/discussions/3895
        # https://github.com/actions/setup-python/issues/577
        # https://github.com/actions/runner-images/issues/6459
        # https://github.com/actions/runner-images/issues/6507
        # https://github.com/actions/runner-images/issues/2322
        run: brew list -1 
             | grep python 
             | while read formula; do brew unlink $formula; brew link --overwrite $formula; done

      - run: brew update
      - run: brew install wget pkg-config libevent openssl sqlite hiredis mongo-c-driver libmicrohttpd

      - run: ./configure
        env:
          PKG_CONFIG_PATH: "${{ env.PKG_CONFIG_PATH }}:/usr/local/opt/openssl@1.1/lib/pkgconfig"
      - run: make

      - run: make check

      - run: ./run_tests.sh
        working-directory: examples/
      - run: ./run_tests_conf.sh
        working-directory: examples/

  build-cmake:
    name: build + test cmake
    strategy:
      fail-fast: false
      matrix:
        ver: ["15", "26"]
    runs-on: macos-${{ matrix.ver }}
    steps:
      - uses: actions/checkout@v6

      - name: Relink `python` package in `brew`
        # Unlink and re-link to prevent errors when GitHub `macos` runner images
        # install `python` outside of `brew`, for example:
        # https://github.com/orgs/Homebrew/discussions/3895
        # https://github.com/actions/setup-python/issues/577
        # https://github.com/actions/runner-images/issues/6459
        # https://github.com/actions/runner-images/issues/6507
        # https://github.com/actions/runner-images/issues/2322
        run: brew list -1 
              | grep python 
              | while read formula; do brew unlink $formula; brew link --overwrite $formula; done

      - run: brew update
      - run: brew install wget pkg-config libevent openssl sqlite hiredis mongo-c-driver libmicrohttpd

      - name: Configure
        run: cmake -B ${{github.workspace}}/build
      - name: Build
        run: cmake --build ${{github.workspace}}/build

      - run: ./run_tests.sh
        working-directory: examples/
      - run: ./run_tests_conf.sh
        working-directory: examples/
