Skip to content

Change test to use ONE rather than ALL to help avoid EC races in CI #4716

Change test to use ONE rather than ALL to help avoid EC races in CI

Change test to use ONE rather than ALL to help avoid EC races in CI #4716

Workflow file for this run

name: Main
on:
push:
branches:
- main
tags:
- '**'
paths-ignore:
- docs/**
- README.rst
- LICENSE.md
- publishing.md
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
WEAVIATE_124: 1.24.26
WEAVIATE_125: 1.25.34
WEAVIATE_126: 1.26.17
WEAVIATE_127: 1.27.14
WEAVIATE_128: 1.28.8
WEAVIATE_129: 1.29.1
WEAVIATE_130: 1.30.0-rc.0-c1830a7-amd64
jobs:
lint-and-format:
name: Run Linter and Formatter
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: 'pip' # caching pip dependencies
- run: pip install -r requirements-devel.txt
- name: "Black"
run: black --check weaviate test mock_tests integration
- name: "Flake 8"
run: flake8 weaviate test mock_tests integration
- name: "Check release for pypi"
run: |
python -m build
python -m twine check dist/*
- name: Build the docs (results don't matter)
run: |
cd docs
python -m sphinx -T -b html -d _build/doctrees -D language=en . html
type-checking:
name: Run Type Checking
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
folder: ["weaviate"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.version }}
cache: 'pip' # caching pip dependencies
- run: pip install -r requirements-devel.txt
- uses: jakebailey/pyright-action@v2
with:
version: 1.1.398
unit-tests:
name: Run Unit Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
folder: ["test", "mock_tests"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.version }}
cache: 'pip' # caching pip dependencies
- run: pip install -r requirements-devel.txt
- name: Run unittests
run: pytest --cov -v --cov-report=term-missing --cov=weaviate --cov-report xml:coverage-${{ matrix.folder }}.xml ${{ matrix.folder }}
- name: Archive code coverage results
if: matrix.version == '3.10' && (github.ref_name != 'main')
uses: actions/upload-artifact@v4
with:
name: coverage-report-${{ matrix.folder }}
path: coverage-${{ matrix.folder }}.xml
integration-tests-embedded:
name: Run Integration Tests Embedded
runs-on: ubuntu-latest
strategy:
matrix:
version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
optional_dependencies: [false]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.version }}
cache: 'pip' # caching pip dependencies
- run: |
pip install -r requirements-devel.txt
pip install .
- name: Run integration tests
if: ${{ !github.event.pull_request.head.repo.fork }}
run: pytest -v --cov --cov-report=term-missing --cov=weaviate --cov-report xml:coverage-integration-embedded.xml integration_embedded
- name: Archive code coverage results
if: matrix.version == '3.10' && (github.ref_name != 'main')
uses: actions/upload-artifact@v4
with:
name: coverage-report-integration-embedded
path: coverage-integration-embedded.xml
integration-tests:
name: Run Integration Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
versions: [
{ py: "3.9", weaviate: $WEAVIATE_130},
{ py: "3.10", weaviate: $WEAVIATE_130},
{ py: "3.11", weaviate: $WEAVIATE_130},
{ py: "3.12", weaviate: $WEAVIATE_130},
{ py: "3.13", weaviate: $WEAVIATE_130}
]
optional_dependencies: [false]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.versions.py }}
cache: 'pip' # caching pip dependencies
- name: Login to Docker Hub
uses: docker/login-action@v3
if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }}
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- run: |
pip install -r requirements-devel.txt
pip install .
- name: start weaviate
run: /bin/bash ci/start_weaviate.sh ${{ matrix.versions.weaviate }}
- name: Run integration tests with auth secrets
if: ${{ !github.event.pull_request.head.repo.fork }}
env:
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
OKTA_CLIENT_SECRET: ${{ secrets.OKTA_CLIENT_SECRET }}
WCS_DUMMY_CI_PW: ${{ secrets.WCS_DUMMY_CI_PW }}
OKTA_DUMMY_CI_PW: ${{ secrets.OKTA_DUMMY_CI_PW }}
# OPENAI_APIKEY: ${{ secrets.OPENAI_APIKEY }} disabled until we have a working key
run: pytest -n auto --dist loadgroup -v --cov --cov-report=term-missing --cov=weaviate --cov-report xml:coverage-integration.xml integration
- name: Run integration tests without auth secrets (for forks)
if: ${{ github.event.pull_request.head.repo.fork }}
run: pytest -n auto --dist loadgroup -v --cov --cov-report=term-missing --cov=weaviate --cov-report xml:coverage-integration.xml integration
- name: Archive code coverage results
if: matrix.versions.py == '3.10' && (github.ref_name != 'main')
uses: actions/upload-artifact@v4
with:
name: coverage-report-integration
path: coverage-integration.xml
- name: stop weaviate
run: /bin/bash ci/stop_weaviate.sh ${{ matrix.versions.weaviate }}
journey-tests:
name: Run Journey Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
versions: [
{ py: "3.9", weaviate: $WEAVIATE_129},
{ py: "3.10", weaviate: $WEAVIATE_129},
{ py: "3.11", weaviate: $WEAVIATE_129},
{ py: "3.12", weaviate: $WEAVIATE_129},
{ py: "3.13", weaviate: $WEAVIATE_129}
]
optional_dependencies: [false]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: 'pip' # caching pip dependencies
- name: Login to Docker Hub
uses: docker/login-action@v3
if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }}
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- run: pip install -r requirements-devel.txt
- run: pip install .
- name: start weaviate
run: /bin/bash ci/start_weaviate_jt.sh ${{ matrix.versions.weaviate }}
- name: Run journey tests
run: ./journey_tests/run.sh
- name: stop weaviate
run: /bin/bash ci/stop_weaviate.sh ${{ matrix.versions.weaviate }}
Codecov:
needs: [Unit-Tests, Integration-Tests]
runs-on: ubuntu-latest
if: github.ref_name != 'main'
steps:
- uses: actions/checkout@v4
- name: Download coverage artifacts mock
uses: actions/download-artifact@v4
with:
name: coverage-report-mock_tests
- name: Download coverage artifacts unit
uses: actions/download-artifact@v4
with:
name: coverage-report-test
- name: Download coverage integration
uses: actions/download-artifact@v4
with:
name: coverage-report-integration
- name: Download coverage integration embedded
uses: actions/download-artifact@v4
with:
name: coverage-report-integration-embedded
- name: Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
files: ./coverage-integration.xml, ./coverage-integration-embedded.xml, ./coverage-test.xml, ./coverage-mock_tests.xml
verbose: true
token: ${{ secrets.CODECOV_TOKEN }}
build-package:
name: Build package
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: 'pip' # caching pip dependencies
- name: Install dependencies
run: pip install -r requirements-devel.txt
- name: Build a binary wheel
run: python -m build
- name: Create Wheel Artifacts
uses: actions/upload-artifact@v4
with:
path: "dist/*.whl"
name: weaviate-python-client-wheel
retention-days: 30
test-package:
needs: [build-package]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
server: [
$WEAVIATE_124,
$WEAVIATE_125,
$WEAVIATE_126,
$WEAVIATE_127,
$WEAVIATE_128,
$WEAVIATE_129,
$WEAVIATE_130
]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Login to Docker Hub
uses: docker/login-action@v3
if: ${{ !github.event.pull_request.head.repo.fork && github.triggering_actor != 'dependabot[bot]' }}
with:
username: ${{secrets.DOCKER_USERNAME}}
password: ${{secrets.DOCKER_PASSWORD}}
- name: Download build artifact to append to release
uses: actions/download-artifact@v4
with:
name: weaviate-python-client-wheel
- run: |
pip install weaviate_client-*.whl
pip install -r requirements-devel.txt # install test dependencies
- run: rm -r weaviate
- name: start weaviate
run: /bin/bash ci/start_weaviate.sh ${{ matrix.server }}
- name: Run integration tests without auth secrets (auth tests ran in previous job)
run: pytest -v -n auto --dist loadgroup integration
build-and-publish:
name: Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI
needs: [integration-tests, unit-tests, lint-and-format, type-checking, test-package]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: 'pip' # caching pip dependencies
- name: Install dependencies
run: pip install -r requirements-devel.txt
- name: Build a binary wheel
run: python -m build
- name: Publish distribution 📦 to PyPI on new tags
if: startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
password: ${{ secrets.PYPI_API_TOKEN }}
gh-release:
name: Create a GitHub Release on new tags
if: startsWith(github.ref, 'refs/tags')
runs-on: ubuntu-latest
needs: [build-and-publish]
steps:
- name: Download build artifact to append to release
uses: actions/download-artifact@v4
with:
name: weaviate-python-client-wheel
path: dist
- name: Release
uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
draft: true
files: dist/*.whl