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

{% import 'macros.jinja' as macros with context %}

{{ macros.github_header() }}
# env: is generated by macros.github_header()
  ARROW_JEMALLOC: "{{ arrow_jemalloc }}"
  CC: "clang"
  CMAKE_BUILD_TYPE: release
  CXX: "clang++"
  MACOSX_DEPLOYMENT_TARGET: "{{ macos_deployment_target }}"
  PYARROW_VERSION: "{{ arrow.no_rc_version }}"
  PYTHON_VERSION: "{{ python_version }}"
  PYTHON_ABI_TAG: "{{ python_abi_tag }}"
  {% if python_abi_tag.endswith('t') %}
  PYTHON: "/Library/Frameworks/PythonT.framework/Versions/{{ python_version }}/bin/python{{ python_version }}t"
  {% else %}
  PYTHON: "/Library/Frameworks/Python.framework/Versions/{{ python_version }}/bin/python{{ python_version }}"
  {% endif %}
  VCPKG_DEFAULT_TRIPLET: "{{ vcpkg_arch }}-osx-static-release"
  VCPKG_FEATURE_FLAGS: "manifests"
  VCPKG_OVERLAY_TRIPLETS: {{ "${{ github.workspace }}/arrow/ci/vcpkg" }}
  VCPKG_ROOT: {{ "${{ github.workspace }}/vcpkg" }}

permissions:
  packages: write

jobs:
  build:
    name: Build wheel for Python {{ python_version }} on macOS
    runs-on: "{{ runs_on }}"
    env:
      VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
    steps:
      {{ macros.github_checkout_arrow()|indent }}

      - name: Install System Dependencies
        run: |
          brew install bash bison coreutils mono ninja
          echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH

      - name: Homebrew packages
        run: |
          brew list

      # CMake 3.29.1 that is pre-installed on the macOS image has a problem.
      # See also: https://github.com/microsoft/vcpkg/issues/37968
      - name: Install CMake 3.29.0
        shell: bash
        run: |
          arrow/ci/scripts/install_cmake.sh 3.29.0 ${PWD}/local
          echo "${PWD}/local/bin" >> $GITHUB_PATH

      - name: Retrieve VCPKG version from arrow/.env
        run: |
          vcpkg_version=$(. "arrow/.env" && echo "${VCPKG}")
          echo "VCPKG_VERSION=$vcpkg_version" >> $GITHUB_ENV

      - name: Install Vcpkg
        env:
          GITHUB_TOKEN: {{ '${{ secrets.GITHUB_TOKEN }}' }}
        run: arrow/ci/scripts/install_vcpkg.sh $VCPKG_ROOT $VCPKG_VERSION

      - name: Add Vcpkg to PATH
        run: echo ${VCPKG_ROOT} >> $GITHUB_PATH

      - name: Install Packages
        run: |
          vcpkg install \
            --clean-after-build \
            --x-install-root=${VCPKG_ROOT}/installed \
            --x-manifest-root=arrow/ci/vcpkg \
            --x-feature=azure \
            --x-feature=flight \
            --x-feature=gcs \
            --x-feature=json \
            --x-feature=opentelemetry \
            --x-feature=orc \
            --x-feature=parquet \
            --x-feature=s3

      - name: Install Python {{ python_version }}
        run: sudo arrow/ci/scripts/install_python.sh macos {{ python_version + "t" if python_abi_tag.endswith('t') else python_version }}

      - name: Build Wheel
        run: |
          $PYTHON -m venv build-env
          source build-env/bin/activate
          pip install --upgrade pip wheel
          PYTHON=python arrow/ci/scripts/python_wheel_macos_build.sh {{ arch }} $(pwd)/arrow $(pwd)/build

      - uses: actions/upload-artifact@v4
        with:
          name: wheel
          path: arrow/python/repaired_wheels/*.whl

      # Use a well-known Python version for the GCS testbench, and avoid
      # putting it in PATH.
      - name: Set up Python for GCS testbench
        uses: actions/setup-python@v5.1.1
        id: gcs-python-install
        with:
          python-version: 3.12
          update-environment: false

      - name: Install GCS testbench
        env:
          PIPX_BIN_DIR: /usr/local/bin
          PIPX_BASE_PYTHON: {{ '${{ steps.gcs-python-install.outputs.python-path }}' }}
        run: arrow/ci/scripts/install_gcs_testbench.sh default

      - name: Install MinIO
        run: |
          $(brew --prefix bash)/bin/bash \
            arrow/ci/scripts/install_minio.sh latest /usr/local

      - name: Test Wheel
        env:
          PYTEST_ADDOPTS: "-k 'not test_cancellation'"
          PYTHON_GIL: {{ 0 if python_abi_tag.endswith('t') else 1 }}
        run: |
          $PYTHON -m venv test-env
          source test-env/bin/activate
          pip install --upgrade pip wheel
          arch -{{ arch }} arrow/ci/scripts/python_wheel_unix_test.sh $(pwd)/arrow

      {{ macros.github_upload_releases("arrow/python/repaired_wheels/*.whl")|indent }}
      {{ macros.github_upload_wheel_scientific_python("arrow/python/repaired_wheels/*.whl")|indent }}
