name: Integration tests on: push: branches: [ master, dev ] pull_request: branches: [ '**' ] permissions: contents: read env: CARGO_TERM_COLOR: always UV_VERSION: 0.9.17 jobs: integration-tests: runs-on: ubuntu-latest steps: - name: Install minimal stable uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Protoc uses: ./.github/actions/setup-protoc - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 with: shared-key: integration-tests # Only save the cache on dev; feature-branch caches would just get evicted under the 10 GB budget save-if: ${{ github.ref == 'refs/heads/dev' }} - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - name: Install dependencies run: | sudo apt-get install clang curl -LsSf https://astral.sh/uv/$UV_VERSION/install.sh | sh echo "$HOME/.local/bin" >> $GITHUB_PATH uv --project tests lock --check uv --project tests sync - name: Build run: cargo build --features "service_debug data-consistency-check staging" --locked - name: Run integration tests run: uv --project tests run bash ./tests/integration-tests.sh shell: bash integration-tests-consensus: runs-on: ubuntu-latest steps: - name: Install minimal stable uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Install Protoc uses: ./.github/actions/setup-protoc - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 with: shared-key: integration-tests # integration-tests is the broadest build in this group and owns saving the cache save-if: "false" - name: Install dependencies run: sudo apt-get install clang - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - name: Install uv and Python dependencies run: | curl -LsSf https://astral.sh/uv/$UV_VERSION/install.sh | sh echo "$HOME/.local/bin" >> $GITHUB_PATH uv --project tests lock --check uv --project tests sync - name: Build run: cargo build --features "service_debug data-consistency-check staging" --locked - name: Run integration tests - 1 peer run: uv --project tests run bash ./tests/integration-tests.sh distributed shell: bash - name: Run integration tests - multiple peers - pytest run: uv --project tests run pytest -n auto --dist=loadfile -v tests/consensus_tests --durations=10 timeout-minutes: 60 - name: upload logs uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: always() with: path: consensus_test_logs name: consensus-test-logs retention-days: 10 test-consensus-compose: runs-on: ubuntu-latest steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - name: Install uv and Python dependencies run: | curl -LsSf https://astral.sh/uv/$UV_VERSION/install.sh | sh echo "$HOME/.local/bin" >> $GITHUB_PATH uv --project tests lock --check uv --project tests sync - name: Set up Docker Buildx uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Docker build uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . tags: qdrant_consensus cache-from: type=gha,scope=docker-integration-tests cache-to: ${{ github.event_name == 'push' && github.ref_name == 'dev' && 'type=gha,mode=max,scope=docker-integration-tests' || '' }} load: true build-args: | PROFILE=ci FEATURES=staging - name: Run integration tests - multiple peers - compose run: uv --project tests run bash ./test_restart.sh working-directory: ./tests/consensus_tests test-consistency: runs-on: ubuntu-latest steps: - name: Install minimal stable uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Install dependencies run: sudo apt-get install -y clang jq - name: Docker build uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: tools/schema2openapi tags: schema2openapi load: true - name: Install Protoc uses: ./.github/actions/setup-protoc - name: gRPC file consistency check run: ./tests/grpc_consistency_check.sh - name: OpenAPI file consistency check run: ./tests/openapi_consistency_check.sh test-shard-snapshot-api-s3-minio: runs-on: ubuntu-latest # Setup minio server services: minio: image: satantime/minio-server ports: - 9000:9000 env: MINIO_ACCESS_KEY: "minioadmin" MINIO_SECRET_KEY: "minioadmin" steps: - name: Setup test bucket env: AWS_ACCESS_KEY_ID: "minioadmin" AWS_SECRET_ACCESS_KEY: "minioadmin" AWS_EC2_METADATA_DISABLED: "true" run: echo $(aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://test-bucket) - name: Install minimal stable uses: dtolnay/rust-toolchain@631a55b12751854ce901bb631d5902ceb48146f7 # stable - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 with: shared-key: integration-tests # integration-tests is the broadest build in this group and owns saving the cache save-if: "false" - name: Install Protoc uses: ./.github/actions/setup-protoc - name: Install dependencies run: sudo apt-get install clang jq - name: Build run: cargo build --bin qdrant --features "staging" --locked - name: Run Shard Snapshot API Tests (local) shell: bash timeout-minutes: 15 run: | cargo run --features "staging" & trap 'kill $(jobs -p) &>/dev/null || :' EXIT sleep 10 ./tests/shard-snapshot-api.sh test-all - name: Run Shard Snapshot API Tests (s3) shell: bash timeout-minutes: 15 run: | export QDRANT__STORAGE__SNAPSHOTS_CONFIG__SNAPSHOTS_STORAGE=s3 export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__BUCKET=test-bucket export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__REGION=us-east-1 export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__ACCESS_KEY=minioadmin export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__SECRET_KEY=minioadmin export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__ENDPOINT_URL=http://127.0.0.1:9000 cargo run --features "staging" & trap 'kill $(jobs -p) &>/dev/null || :' EXIT sleep 10 ./tests/shard-snapshot-api.sh test-all e2e-tests: runs-on: ubuntu-latest # Setup minio server services: minio: image: satantime/minio-server ports: - 9000:9000 env: MINIO_ACCESS_KEY: "minioadmin" MINIO_SECRET_KEY: "minioadmin" steps: - name: Setup test bucket env: AWS_ACCESS_KEY_ID: "minioadmin" AWS_SECRET_ACCESS_KEY: "minioadmin" AWS_EC2_METADATA_DISABLED: "true" run: echo $(aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://test-bucket) - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: lfs: true # Fetch LFS files automatically - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.13' - name: Set up Docker Buildx uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0 - name: Install uv and Python dependencies run: | curl -LsSf https://astral.sh/uv/$UV_VERSION/install.sh | sh echo "$HOME/.local/bin" >> $GITHUB_PATH uv --project tests lock --check uv --project tests sync - name: Build Qdrant Docker image uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0 with: context: . tags: qdrant/qdrant:e2e-tests cache-from: type=gha,scope=docker-e2e-tests cache-to: ${{ github.event_name == 'push' && github.ref_name == 'dev' && 'type=gha,mode=max,scope=docker-e2e-tests' || '' }} load: true build-args: | PROFILE=ci FEATURES=data-consistency-check,staging - name: Verify Docker image run: docker images | grep qdrant - name: Run e2e tests run: uv --project tests run pytest -n 4 --dist=loadgroup tests/e2e_tests -v --tb=short --durations=5 -m "not longrunning" shell: bash timeout-minutes: 20 - name: Upload test logs on failure uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 if: failure() with: name: e2e-test-logs path: | tests/e2e_tests/test_*.log tests/e2e_tests/**/logs/ retention-days: 7