# 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() }}

jobs:
  test:
    name: "Verify release candidate {{ distro }} {{ target }}"
    runs-on: ubuntu-latest
    {% if env is defined %}
    env:
    {% for key, value in env.items() %}
      {{ key }}: {{ value }}
    {% endfor %}
    {% endif %}
    steps:
      {{ macros.github_checkout_arrow(fetch_depth=0)|indent }}
      {{ macros.github_install_archery()|indent }}

      - name: Execute Docker Build
        shell: bash
        run: |
          archery docker run \
            -e VERIFY_VERSION="{{ release|default("") }}" \
            {% if distro == 'almalinux' and target|upper == 'PYTHON' %}
            -e ARROW_GANDIVA=OFF \
            {% endif %}
            {% if distro == "conda" and target == "integration" %}
            {# JPype doesn't work with Python 3.13.
             # See also:
             # * https://discuss.python.org/t/api-for-python-3-13-prevents-use-of-3rd-party-gc-allocators/62709/5
             # * GH-44386
             # * GH-44389
            #}
            -e PYTHON_VERSION="3.12" \
            {% endif %}
            -e VERIFY_RC="{{ rc|default("") }}" \
            -e TEST_DEFAULT=0 \
            {% if target == "cpp" %}
            -e TEST_SOURCE_REPRODUCIBLE=1 \
            {% endif %}
            -e TEST_{{ target|upper }}=1 \
            {{ distro }}-verify-rc

    {% if arrow.is_default_branch() and distro != "conda" %}
      {{ macros.github_login_dockerhub()|indent }}
      - name: Push Docker Image
        shell: bash
        run: archery docker push {{ distro }}-verify-rc
    {% endif %}
