# 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: Integration

on:
  push:
    branches:
      - '**'
      - '!dependabot/**'
    tags:
      - '**'
    paths:
      - '.dockerignore'
      - '.github/workflows/integration.yml'
      - 'ci/**'
      - 'dev/archery/**'
      - 'compose.yaml'
      - 'integration/**'
      - 'cpp/**'
      - 'format/**'
  pull_request:
    paths:
      - '.dockerignore'
      - '.github/workflows/integration.yml'
      - 'ci/**'
      - 'dev/archery/**'
      - 'compose.yaml'
      - 'integration/**'
      - 'cpp/**'
      - 'format/**'

concurrency:
  group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
  cancel-in-progress: true

permissions:
  contents: read

env:
  ARCHERY_DEBUG: 1
  DOCKER_VOLUME_PREFIX: ".docker/"

jobs:

  docker:
    name: AMD64 Conda Integration Test
    runs-on: ubuntu-latest
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    timeout-minutes: 60
    steps:
      - name: Checkout Arrow
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
          submodules: recursive
      - name: Checkout Arrow Rust
        uses: actions/checkout@v6
        with:
          repository: apache/arrow-rs
          path: rust
      - name: Checkout Arrow nanoarrow
        uses: actions/checkout@v6
        with:
          repository: apache/arrow-nanoarrow
          path: nanoarrow
      - name: Checkout Arrow Go
        uses: actions/checkout@v6
        with:
          repository: apache/arrow-go
          path: go
      - name: Checkout Arrow Java
        uses: actions/checkout@v6
        with:
          repository: apache/arrow-java
          path: java
      - name: Checkout Arrow JS
        uses: actions/checkout@v6
        with:
          repository: apache/arrow-js
          path: js
      - name: Checkout Arrow .NET
        uses: actions/checkout@v6
        with:
          repository: apache/arrow-dotnet
          path: dotnet
      - name: Free up disk space
        run: |
          ci/scripts/util_free_space.sh
      - name: Cache Docker Volumes
        uses: actions/cache@v5
        with:
          path: .docker
          key: conda-${{ hashFiles('cpp/**') }}
          restore-keys: conda-
      - name: Setup Python
        uses: actions/setup-python@v6
        with:
          python-version: 3.12
      - name: Setup Archery
        run: pip install -e dev/archery[docker]
      - name: Execute Docker Build
        env:
          ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
          ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
        run: |
          source ci/scripts/util_enable_core_dumps.sh
          archery docker run \
            -e ARCHERY_DEFAULT_BRANCH=${{ github.event.repository.default_branch }} \
            -e ARCHERY_INTEGRATION_WITH_DOTNET=1 \
            -e ARCHERY_INTEGRATION_WITH_GO=1 \
            -e ARCHERY_INTEGRATION_WITH_JAVA=1 \
            -e ARCHERY_INTEGRATION_WITH_JS=1 \
            -e ARCHERY_INTEGRATION_WITH_NANOARROW=1 \
            -e ARCHERY_INTEGRATION_WITH_RUST=1 \
            conda-integration
      - name: Docker Push
        if: >-
          success() &&
          github.event_name == 'push' &&
          github.repository == 'apache/arrow' &&
          github.ref_name == 'main'
        env:
          ARCHERY_DOCKER_USER: ${{ secrets.DOCKERHUB_USER }}
          ARCHERY_DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_TOKEN }}
        continue-on-error: true
        run: archery docker push conda-integration
