# 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.

name: Python

on:
  push:
    paths:
      - '.github/workflows/python.yml'
      - 'ci/**'
      - 'cpp/**'
      - 'python/**'
  pull_request:
    paths:
      - '.github/workflows/python.yml'
      - 'ci/**'
      - 'cpp/**'
      - 'python/**'

env:
  DOCKER_VOLUME_PREFIX: ".docker/"
  ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
  ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}

jobs:

  docker:
    name: ${{ matrix.title }}
    runs-on: ubuntu-latest
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    strategy:
      fail-fast: false
      matrix:
        name:
          - conda-python-3.8-nopandas
          - conda-python-3.6-pandas-0.23
          - conda-python-3.7-pandas-latest
        include:
          - name: conda-python-3.8-nopandas
            cache: conda-python-3.8
            image: conda-python
            title: AMD64 Conda Python 3.8 Without Pandas
            python: 3.8
          - name: conda-python-3.6-pandas-0.23
            cache: conda-python-3.6
            image: conda-python-pandas
            title: AMD64 Conda Python 3.6 Pandas 0.23
            python: 3.6
            pandas: 0.23
          - name: conda-python-3.7-pandas-latest
            cache: conda-python-3.7
            image: conda-python-pandas
            title: AMD64 Conda Python 3.7 Pandas latest
            python: 3.7
            pandas: latest
    env:
      PYTHON: ${{ matrix.python || 3.7 }}
      UBUNTU: ${{ matrix.ubuntu || 18.04 }}
      PANDAS: ${{ matrix.pandas || 'latest' }}
      NUMPY: ${{ matrix.numpy || 'latest' }}
    steps:
      - name: Checkout Arrow
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Fetch Submodules and Tags
        run: ci/scripts/util_checkout.sh
      - name: Free Up Disk Space
        run: ci/scripts/util_cleanup.sh
      - name: Cache Docker Volumes
        uses: actions/cache@v2
        with:
          path: .docker
          key: ${{ matrix.cache }}-${{ hashFiles('cpp/**') }}
          restore-keys: ${{ matrix.cache }}-
      - name: Setup Python
        uses: actions/setup-python@v1
        with:
          python-version: 3.8
      - name: Setup Archery
        run: pip install -e dev/archery[docker]
      - name: Execute Docker Build
        run: |
          sudo sysctl -w kernel.core_pattern="core.%e.%p"
          ulimit -c unlimited
          archery docker run ${{ matrix.image }}
      - name: Docker Push
        if: success() && github.event_name == 'push' && github.repository == 'apache/arrow'
        continue-on-error: true
        run: archery docker push ${{ matrix.image }}

  macos:
    name: AMD64 MacOS 10.15 Python 3
    runs-on: macos-latest
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    env:
      ARROW_HOME: /usr/local
      ARROW_DATASET: ON
      ARROW_JEMALLOC: ON
      ARROW_ORC: ON
      ARROW_PYTHON: ON
      ARROW_PLASMA: ON
      ARROW_GANDIVA: ON
      ARROW_PARQUET: ON
      ARROW_WITH_ZLIB: ON
      ARROW_WITH_LZ4: ON
      ARROW_WITH_BZ2: ON
      ARROW_WITH_ZSTD: ON
      ARROW_WITH_SNAPPY: ON
      ARROW_WITH_BROTLI: ON
      ARROW_BUILD_TESTS: OFF
      CMAKE_ARGS: "-DPython3_EXECUTABLE=/usr/local/bin/python3"
    steps:
      - name: Checkout Arrow
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Fetch Submodules and Tags
        shell: bash
        run: ci/scripts/util_checkout.sh
      - name: Install Dependencies
        shell: bash
        run: |
          rm -f /usr/local/bin/2to3
          brew update --preinstall
          brew unlink gcc@8 gcc@9
          brew bundle --file=cpp/Brewfile
          brew install coreutils
          python3 -mpip install \
            -r python/requirements-build.txt \
            -r python/requirements-test.txt
      - name: Build
        shell: bash
        run: |
          export PYTHON=python3
          ci/scripts/cpp_build.sh $(pwd) $(pwd)/build
          ci/scripts/python_build.sh $(pwd) $(pwd)/build
      - name: Test
        shell: bash
        run: ci/scripts/python_test.sh $(pwd) $(pwd)/build
