Skip to content

fix(cli): refuse cascade sync while a server holds the memory root #526

fix(cli): refuse cascade sync while a server holds the memory root

fix(cli): refuse cascade sync while a server holds the memory root #526

Workflow file for this run

# CI is a thin wrapper over the Makefile — single source of truth for commands.
# See docs/engineering.md and the Makefile for what each target does.
name: CI
on:
push:
branches: [main]
pull_request:
# Cancel superseded runs on the same ref to save CI minutes.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
# Full history: scripts/check_file_sizes.py diffs against the base
# branch's merge base, which a shallow clone cannot resolve.
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.12
- name: Install dependencies (frozen)
run: make install-deps
- name: Lint (ruff + import-linter + repo gates + datetime + openapi drift)
run: make lint
unit:
name: unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.12
- name: Install dependencies (frozen)
run: make install-deps
- name: Unit tests
run: make test
unit-py313:
name: unit tests (3.13)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.13
- name: Install dependencies (frozen)
run: make install-deps
- name: Unit tests
run: make test
integration:
name: integration tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.12
- name: Install dependencies (frozen)
run: make install-deps
- name: Integration tests
run: make integration
integration-py313:
name: integration tests (3.13)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.13
- name: Install dependencies (frozen)
run: make install-deps
- name: Integration tests
run: make integration
integration-milvus:
name: integration tests (Milvus 2.6)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.12
- name: Install dependencies (frozen)
run: make install-deps
- name: Start Milvus 2.6.22
run: |
curl --fail --location --retry 3 \
--output /tmp/milvus-compose.yml \
https://github.com/milvus-io/milvus/releases/download/v2.6.22/milvus-standalone-docker-compose.yml
# MinIO stopped publishing to Docker Hub (`minio/minio` now returns
# "pull access denied"); the same tags live on quay.io, which is
# where the etcd image in this compose file already comes from.
sed -i 's#image: minio/minio:#image: quay.io/minio/minio:#' /tmp/milvus-compose.yml
docker compose -f /tmp/milvus-compose.yml up -d
for attempt in {1..60}; do
if curl --fail --silent http://127.0.0.1:9091/healthz >/dev/null; then
exit 0
fi
sleep 2
done
docker compose -f /tmp/milvus-compose.yml logs
exit 1
- name: Milvus repository contract
env:
EVEROS_TEST_MILVUS_URI: http://127.0.0.1:19530
EVEROS_TEST_MILVUS_FULL_STARTUP: "1"
run: uv run --frozen pytest tests/integration/test_milvus_remote.py -v
- name: Milvus /get truncation telemetry
env:
EVEROS_TEST_MILVUS_URI: http://127.0.0.1:19530
run: >-
uv run --frozen pytest
tests/e2e/test_get_endpoint_e2e.py::test_get_truncates_above_max_fetch
-v -k milvus
# The contract tests above exercise the repository port directly. This
# drives the same request path the application does -- /add, /flush,
# cascade, every search method, /get -- against the remote backend, so a
# break anywhere between the API and Milvus surfaces here rather than in
# production. Deselecting the LanceDB half keeps the job to its subject.
- name: Milvus end-to-end (tiered API suites)
env:
EVEROS_TEST_MILVUS_URI: http://127.0.0.1:19530
run: uv run --frozen pytest tests/integration/test_tiers -v -k milvus
# The structural half of the port contract runs in the ordinary unit job
# for both adapters. The behavioural half needs a server, so it only has
# a backend to compare against here.
- name: Derived-index port contract (both backends)
env:
EVEROS_TEST_MILVUS_URI: http://127.0.0.1:19530
run: uv run --frozen pytest tests/unit/test_infra/test_index_contract.py -v
- name: Stop Milvus
if: always()
run: docker compose -f /tmp/milvus-compose.yml down -v
package:
name: package build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@v8.2.0
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.12
- name: Build and smoke-test package
run: make package