# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

os: osx
osx_image: xcode9.3
language: generic

# don't build twice
if: tag IS blank

env:
  global:
    - PLAT=x86_64
    - TRAVIS_TAG={{ task.tag }}
    - PYARROW_VERSION={{ arrow.no_rc_version }}
    - PYARROW_BUILD_VERBOSE=1
    - MB_PYTHON_VERSION={{ python_version }}
    - MACOSX_DEPLOYMENT_TARGET="10.9"

before_install:
  - git clone https://github.com/matthew-brett/multibuild # TODO pin it
  - git -C multibuild checkout 4e7a9396e9a50731bb83fc0d16bb98fb0c4032d7

  - git clone --no-checkout {{ arrow.remote }} arrow
  - git -C arrow fetch -t {{ arrow.remote }} {{ arrow.branch }}
  - git -C arrow checkout FETCH_HEAD

  # ARROW-3976 Old versions of git can cause failures when Homebrew prints a
  # donation solicitation. Attempt to update git
  - brew upgrade git python

  # Also remove artifacts that depend on Boost
  - brew uninstall boost cgal postgis sfcgal
  - brew update
  - brew upgrade cmake
  - travis_wait 30 brew install bison flex grpc openssl@1.1 llvm@7 zlib gperftools
  # remove shared grpc libraries installed by brew to make sure
  # we are linked against the static ones.
  - rm -f /usr/local/opt/grpc/lib/*.dylib

  # source utilities required for wheel builds
  - export CONFIG_PATH=`pwd`/arrow/dev/tasks/python-wheels/osx-build.sh
  - source multibuild/common_utils.sh
  - source multibuild/travis_osx_steps.sh
  - before_install
  # Fix SSL TLS issue for Python 3.5 on macOS
  - pip install requests[security]

install:
  # the following functions are defined in osx-build.sh
  - build_wheel arrow

  # test the built wheels, remove llvm and grpc dependencies to ensure
  # things are properly statically-linked
  - brew uninstall --ignore-dependencies llvm@7 grpc c-ares openssl openssl@1.1 zlib gperftools
  # install the built wheel and test dependencies
  - install_wheel arrow
  # run unit tests before removing the system libraries
  - run_unit_tests arrow
  # remove libz to ensure that it is properly bundled
  - sudo find /usr -name libz.* -delete
  # run the import tests
  - run_import_tests

  - brew install openssl@1.1
  # before_install activates a virtualenv but we need the system python3
  - deactivate
  # crossbow dependencies for deployment
  - unset MACOSX_DEPLOYMENT_TARGET
  - pip3 install click ruamel.yaml setuptools_scm github3.py toolz requests[security]
  - python3 arrow/dev/tasks/crossbow.py --queue-path $(pwd) --queue-remote {{ queue.remote_url }} upload-artifacts --sha {{ task.branch }} --tag {{ task.tag }} --pattern "arrow/python/dist/*.whl"

notifications:
  email:
    - {{ job.email }}
