# 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.9', '3.10', '3.11'] numpy_version: ['>=1.22.0', '==1.21.*'] exclude: - python-version: '3.10' numpy_version: '==1.21.*' - python-version: '3.11' numpy_version: '==1.21.*' 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@v4 with: fetch-depth: 0 - name: Setup Miniconda uses: conda-incubator/setup-miniconda@v3.0.1 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 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 ZARR_V3_SHARDING: 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)