# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Linux Testing

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.8', '3.9', '3.10']
        numpy_version: ['>=1.22.0', '==1.20.*']
        exclude:
          - python-version: '3.10'
            numpy_version: '==1.20.*'
    services:
      redis:
        image: redis
        # Set health checks to wait until redis has started
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 6379:6379
      mongodb:
        image: mongo:4.4.11
        ports:
          - 27017:27017
    steps:
    - uses: actions/checkout@v3
      with:
        fetch-depth: 0
    - name: Setup Miniconda
      uses: conda-incubator/setup-miniconda@v2.2.0
      with:
          channels: conda-forge
          python-version: ${{ matrix.python-version }}
      env:
        ACTIONS_ALLOW_UNSECURE_COMMANDS: true
    # Runs a set of commands using the runners shell
    - name: Create Conda environment with the rights deps
      shell: "bash -l {0}"
      run: |
        conda create -n zarr-env python==${{matrix.python-version}} bsddb3 numcodecs lmdb pip nodejs flake8 mypy
        conda activate zarr-env
        npm install -g azurite
    - name: Install dependencies
      shell: "bash -l {0}"
      run: |
        conda activate zarr-env
        python -m pip install --upgrade pip
        python -m pip install -U pip setuptools wheel codecov line_profiler
        python -m pip install -rrequirements_dev_minimal.txt numpy${{matrix.numpy_version}} -rrequirements_dev_optional.txt pymongo redis
        python -m pip install .
        python -m pip freeze
    - name: Tests
      shell: "bash -l {0}"
      env:
        COVERAGE_FILE: .coverage.${{matrix.python-version}}.${{matrix.numpy_version}}
        ZARR_TEST_ABS: 1
        ZARR_TEST_MONGO: 1
        ZARR_TEST_REDIS: 1
        ZARR_V3_EXPERIMENTAL_API: 1
      run: |
        conda activate zarr-env
        mkdir ~/blob_emulator
        azurite -l ~/blob_emulator --debug debug.log 2>&1 > stdouterr.log &
        pytest --cov=zarr --cov-config=pyproject.toml --doctest-plus --cov-report xml --cov=./ --timeout=300
    - uses: codecov/codecov-action@v3
      with:
        #token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
          #files: ./coverage1.xml,./coverage2.xml # optional
          #flags: unittests # optional
          #name: codecov-umbrella # optional
          #fail_ci_if_error: true # optional (default = false)
        verbose: true # optional (default = false)
