name: Celix MacOS

on:
  push:
  pull_request:
  schedule:
    - cron:  '0 0 * * *'

env:
  CONAN_USER_HOME: "${{ github.workspace }}/release/"
  CONAN_USER_HOME_SHORT: "${{ github.workspace }}/release/short"
  CONAN_HOME: "${{ github.workspace }}/release/"
  CCACHE_DIR: "${{ github.workspace }}/.ccache"
  CCACHE_SLOPPINESS: include_file_ctime,include_file_mtime

jobs:

  macos-build-conan:
    runs-on: macOS-11
    timeout-minutes: 120
    steps:
      - name: Checkout source code
        uses: actions/checkout@v3.3.0
      - name: Install conan
        run: |
          brew install python ninja
          pip3 install -U conan==1.59.0
      - name: Setup Conan Profile
        run: |
          conan profile new default --detect
          conan profile update settings.build_type=Release default
      - name: Conan Cache
        id: cache-conan
        uses: actions/cache@v3
        env:
          cache-name: cache-conan-modules
        with:
          path: ${{ env.CONAN_USER_HOME }}
          key: ${{ runner.os }}-test-builder-${{ env.cache-name }}-${{ hashFiles('conanfile.py') }}
          restore-keys: ${{ runner.os }}-test-builder-${{ env.cache-name }}-
      - name: Prepare ccache timestamp
        id: ccache_cache_timestamp
        run: |
          echo timestamp=`date +"%Y-%m-%d-%H;%M;%S"` >> $GITHUB_OUTPUT
      - name: ccache Cache
        uses: actions/cache@v3
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ runner.os }}-test-ccache-Release-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
          restore-keys: |
            ${{ runner.os }}-test-ccache-Release-
      - name: Install Dependencies
        env:
          CONAN_BUILD_OPTIONS: |
            -o celix:enable_testing=True
            -o celix:enable_address_sanitizer=True
            -o celix:build_all=True
            -o celix:enable_testing_for_cxx14=True
            -o celix:enable_testing_dependency_manager_for_cxx11=True
            -o celix:enable_cmake_warning_tests=True
            -o celix:enable_testing_on_ci=True
            -o celix:framework_curlinit=False
            -o celix:enable_ccache=True
        run: |
          #force require libcurl 7.64.1, due to a sha256 verify issue in libcurl/7.87.0
          conan install . celix/ci -c tools.cmake.cmaketoolchain:generator=Ninja -pr:b default -pr:h default -if build ${CONAN_BUILD_OPTIONS} -b missing -b cpputest --require-override=libcurl/7.64.1 --require-override=openssl/1.1.1s
      - name: Build
        run: |
          conan build . -bf build

      - name: Test
        run: |
          cd build
          source conanrun.sh
          ctest --output-on-failure
          source deactivate_conanrun.sh

  macos-build-brew:
    runs-on: macOS-latest
    timeout-minutes: 120
    steps:
      - name: Checkout source code
        uses: actions/checkout@v3.3.0
      - name: Install dependencies
        run: |
          brew install lcov zeromq czmq cpputest jansson rapidjson libzip ccache
      - name: Prepare ccache timestamp
        id: ccache_cache_timestamp
        run: |
          echo timestamp=`date +"%Y-%m-%d-%H;%M;%S"` >> $GITHUB_OUTPUT
      - name: ccache Cache
        uses: actions/cache@v3
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ${{ runner.os }}-brew-test-ccache-Release-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
          restore-keys: |
            ${{ runner.os }}-brew-test-ccache-Release-
      - name: Build
        env:
          BUILD_OPTIONS: |
            -DENABLE_TESTING=ON
            -DENABLE_TESTING_DEPENDENCY_MANAGER_FOR_CXX11=ON
            -DENABLE_TESTING_FOR_CXX14=ON
            -DENABLE_ADDRESS_SANITIZER=ON
            -DENABLE_TESTING_ON_CI=ON
            -DCMAKE_BUILD_TYPE=Release
            -DENABLE_CCACHE=ON
        run: |
          mkdir build install
          cd build
          cmake ${BUILD_OPTIONS} -DCMAKE_INSTALL_PREFIX=../install ..
          make -j && make install
      - name: Test
        run: |
          cd $GITHUB_WORKSPACE/build
          export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH:$(pwd)/utils:$(pwd)/framework:$(pwd)/dfi
          ctest --output-on-failure