# 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: GraphAr Python CI

on:
  # Trigger the workflow on push or pull request,
  # but only for the main branch
  push:
    branches:
      - "main"
    paths:
      - 'cpp/**'
      - 'python/**'
      - '.github/workflows/ci.yml'
      - '.github/workflows/python.yml'
  pull_request:
    branches:
      - "main"
    paths:
      - 'cpp/**'
      - 'python/**'
      - '.github/workflows/ci.yml'
      - '.github/workflows/python.yml'
concurrency:
  group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}
  cancel-in-progress: true

jobs:
  ubuntu:
    name: Ubuntu 22.04 Python
    runs-on: ubuntu-latest
    env:
      GAR_TEST_DATA: ${{ github.workspace }}/graphar-testing/

    steps:
    - uses: actions/checkout@v4
      with:
          submodules: true

    - name: Install Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.10'

    - name: Install dependencies
      run: |

        # install the latest arrow deb to test arrow
        wget -c https://apache.jfrog.io/artifactory/arrow/"$(lsb_release --id --short | tr 'A-Z' 'a-z')"/apache-arrow-apt-source-latest-$(lsb_release --codename --short).deb \
            -P /tmp/
        sudo apt-get install -y /tmp/apache-arrow-apt-source-latest-"$(lsb_release --codename --short)".deb
        sudo apt-get update -y
        sudo apt install -y libarrow-dev \
                            libarrow-dataset-dev \
                            libarrow-acero-dev \
                            libparquet-dev
        sudo apt-get install -y ccache libcurl4-openssl-dev
        git clone https://github.com/apache/incubator-graphar-testing.git $GAR_TEST_DATA --depth 1

    - name: Install GraphAr Python SDK
      working-directory: "python"
      run: |
        pip install ./ -v

    - name: Install Poetry
      working-directory: python
      run: |
        pip install poetry --quiet

    - name: Run Cli Test
      working-directory: "python"
      run: |
        graphar --help
        graphar check -p ../testing/neo4j/MovieGraph.graph.yml
        graphar show -p ../testing/neo4j/MovieGraph.graph.yml -v Person
        graphar show -p ../testing/neo4j/MovieGraph.graph.yml -es Person -e ACTED_IN -ed Movie
        graphar import -c ../testing/neo4j/data/import.mini.yml

    - name: Run pytest
      working-directory: "python"
      run: |
        pytest test -v


    - name: Upload coverage reports to Codecov
      uses: codecov/codecov-action@v4.0.1
      with:
        token: ${{ secrets.CODECOV_TOKEN }}

    - name: Build Docs
      working-directory: python
      run: |
        make install_docs
        make docs

  macos:
    name: macos latest Python
    runs-on: macos-latest
    env:
      GAR_TEST_DATA: ${{ github.workspace }}/graphar-testing/

    steps:
    - uses: actions/checkout@v4
      with:
          submodules: true

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.13'

    - name: Install dependencies
      run: |
        brew bundle --file=cpp/Brewfile

        git clone https://github.com/apache/incubator-graphar-testing.git $GAR_TEST_DATA --depth 1

    - name: Install GraphAr Python SDK
      working-directory: "python"
      run: |
        pip install ./ -v
    - name: Run Cli Test
      working-directory: "python"
      run: |
        graphar --help
        graphar --version
        graphar check -p ../testing/neo4j/MovieGraph.graph.yml
        graphar show -p ../testing/neo4j/MovieGraph.graph.yml -v Person
        graphar show -p ../testing/neo4j/MovieGraph.graph.yml -es Person -e ACTED_IN -ed Movie

    - name: Run pytest
      working-directory: "python"
      run: |
        pytest test -v

      
# TODO: Add unit tests
