conproxy 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- conproxy-0.2.0/.cargo/config.toml +14 -0
- conproxy-0.2.0/.config/nextest.toml +39 -0
- conproxy-0.2.0/.dockerignore +46 -0
- conproxy-0.2.0/.github/workflows/ci.yml +334 -0
- conproxy-0.2.0/.github/workflows/coverage.yml +81 -0
- conproxy-0.2.0/.github/workflows/perf.yml +83 -0
- conproxy-0.2.0/.github/workflows/release.yml +489 -0
- conproxy-0.2.0/.gitignore +136 -0
- conproxy-0.2.0/.opencode/commands/perf-tuning.md +245 -0
- conproxy-0.2.0/.opencode/skills/contributing/SKILL.md +565 -0
- conproxy-0.2.0/.opencode/skills/k8s-dev/SKILL.md +184 -0
- conproxy-0.2.0/.opencode/skills/performance/SKILL.md +304 -0
- conproxy-0.2.0/AGENTS.md +248 -0
- conproxy-0.2.0/CONTRIBUTING.md +320 -0
- conproxy-0.2.0/Cargo.lock +5633 -0
- conproxy-0.2.0/Cargo.toml +360 -0
- conproxy-0.2.0/Cross.toml +23 -0
- conproxy-0.2.0/Dockerfile +75 -0
- conproxy-0.2.0/Dockerfile.opencode +43 -0
- conproxy-0.2.0/LICENSE +21 -0
- conproxy-0.2.0/Makefile +1795 -0
- conproxy-0.2.0/PKG-INFO +17 -0
- conproxy-0.2.0/README.md +335 -0
- conproxy-0.2.0/SECURITY.md +51 -0
- conproxy-0.2.0/Tiltfile +194 -0
- conproxy-0.2.0/assets/com.conproxy.daemon.plist +54 -0
- conproxy-0.2.0/assets/conproxy-daemon.service +32 -0
- conproxy-0.2.0/benches/cascade_scope.rs +227 -0
- conproxy-0.2.0/benches/core_ops.rs +234 -0
- conproxy-0.2.0/build.rs +13 -0
- conproxy-0.2.0/conproxy.toml +2 -0
- conproxy-0.2.0/deny.toml +25 -0
- conproxy-0.2.0/deploy/helm/conproxy/Chart.yaml +15 -0
- conproxy-0.2.0/deploy/helm/conproxy/templates/_helpers.tpl +40 -0
- conproxy-0.2.0/deploy/helm/conproxy/templates/configmap.yaml +54 -0
- conproxy-0.2.0/deploy/helm/conproxy/templates/deployment.yaml +64 -0
- conproxy-0.2.0/deploy/helm/conproxy/templates/service.yaml +23 -0
- conproxy-0.2.0/deploy/helm/conproxy/values.yaml +119 -0
- conproxy-0.2.0/deploy/tilt/conproxy-configmap.yaml +20 -0
- conproxy-0.2.0/deploy/tilt/conproxy-deployment.yaml +85 -0
- conproxy-0.2.0/deploy/tilt/conproxy-service.yaml +23 -0
- conproxy-0.2.0/deploy/tilt/kind-config.yaml +20 -0
- conproxy-0.2.0/docs/api-reference.md +525 -0
- conproxy-0.2.0/docs/architecture.md +305 -0
- conproxy-0.2.0/docs/benchmarks.md +99 -0
- conproxy-0.2.0/docs/cli-reference.md +292 -0
- conproxy-0.2.0/docs/configuration.md +575 -0
- conproxy-0.2.0/docs/deployment.md +339 -0
- conproxy-0.2.0/docs/dev-loop.md +98 -0
- conproxy-0.2.0/docs/distill.md +134 -0
- conproxy-0.2.0/docs/docker-compose.md +136 -0
- conproxy-0.2.0/docs/engine.md +111 -0
- conproxy-0.2.0/docs/feature-flags.md +197 -0
- conproxy-0.2.0/docs/getting-started.md +8 -0
- conproxy-0.2.0/docs/k8s-dev.md +279 -0
- conproxy-0.2.0/docs/mcp-integration.md +289 -0
- conproxy-0.2.0/docs/multi-upstream.md +286 -0
- conproxy-0.2.0/docs/perf-toolchain-review-2026-07-24.md +185 -0
- conproxy-0.2.0/docs/quickstart.md +59 -0
- conproxy-0.2.0/docs/sdk-python.md +209 -0
- conproxy-0.2.0/docs/strategy-assessment.md +410 -0
- conproxy-0.2.0/docs/tour.md +253 -0
- conproxy-0.2.0/examples/README.md +17 -0
- conproxy-0.2.0/examples/distill-postprocess.sh +19 -0
- conproxy-0.2.0/examples/docker-compose/README.md +82 -0
- conproxy-0.2.0/examples/docker-compose/conproxy.toml +29 -0
- conproxy-0.2.0/examples/docker-compose/docker-compose.yml +60 -0
- conproxy-0.2.0/examples/federated-search.toml +40 -0
- conproxy-0.2.0/examples/mcp-claude-desktop.json +8 -0
- conproxy-0.2.0/examples/mcp-opencode.jsonc +12 -0
- conproxy-0.2.0/examples/meilisearch-quickstart.toml +23 -0
- conproxy-0.2.0/examples/multi-context.toml +55 -0
- conproxy-0.2.0/examples/multi-upstream-cascade.toml +43 -0
- conproxy-0.2.0/examples/qdrant-quickstart.toml +25 -0
- conproxy-0.2.0/opencode.json +11 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/ANALYSIS.md +68 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/SUMMARY.md +60 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/baseline_meta.json +8 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/env.json +15 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/hitrate/summary.json +145 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/report_criterion.json +175 -0
- conproxy-0.2.0/perf-history/20260724-200535-1409516-cfff440/summary.json +509 -0
- conproxy-0.2.0/proptest-regressions/proxy/tests/types_tests.txt +7 -0
- conproxy-0.2.0/proto/conproxy/cdc/v1/cdc.proto +84 -0
- conproxy-0.2.0/proto/conproxy/v1/search.proto +477 -0
- conproxy-0.2.0/pyproject.toml +26 -0
- conproxy-0.2.0/scripts/backends-wait.sh +93 -0
- conproxy-0.2.0/scripts/corpus-summary.sh +88 -0
- conproxy-0.2.0/scripts/dev-down.sh +37 -0
- conproxy-0.2.0/scripts/dev-restart.sh +46 -0
- conproxy-0.2.0/scripts/dev-up.sh +27 -0
- conproxy-0.2.0/scripts/devex-session.sh +121 -0
- conproxy-0.2.0/scripts/devex-smoke.sh +255 -0
- conproxy-0.2.0/scripts/e2e-k8s.sh +61 -0
- conproxy-0.2.0/scripts/kind-down.sh +16 -0
- conproxy-0.2.0/scripts/kind-up.sh +65 -0
- conproxy-0.2.0/scripts/sdk-smoke.py +42 -0
- conproxy-0.2.0/sdk/python/Cargo.toml +17 -0
- conproxy-0.2.0/sdk/python/examples/engine_fastmcp.py +9 -0
- conproxy-0.2.0/sdk/python/examples/langchain_rag.py +69 -0
- conproxy-0.2.0/sdk/python/examples/llama_index_rag.py +54 -0
- conproxy-0.2.0/sdk/python/src/client.rs +326 -0
- conproxy-0.2.0/sdk/python/src/engine.rs +254 -0
- conproxy-0.2.0/sdk/python/src/error.rs +14 -0
- conproxy-0.2.0/sdk/python/src/langchain.py +116 -0
- conproxy-0.2.0/sdk/python/src/lib.rs +39 -0
- conproxy-0.2.0/sdk/python/src/llama_index.py +114 -0
- conproxy-0.2.0/sdk/python/src/types.rs +657 -0
- conproxy-0.2.0/sdk/rust/Cargo.toml +26 -0
- conproxy-0.2.0/sdk/rust/build.rs +13 -0
- conproxy-0.2.0/sdk/rust/proto/conproxy/v1/search.proto +477 -0
- conproxy-0.2.0/sdk/rust/src/admin.rs +172 -0
- conproxy-0.2.0/sdk/rust/src/auth.rs +10 -0
- conproxy-0.2.0/sdk/rust/src/client.rs +62 -0
- conproxy-0.2.0/sdk/rust/src/config.rs +181 -0
- conproxy-0.2.0/sdk/rust/src/context.rs +76 -0
- conproxy-0.2.0/sdk/rust/src/error.rs +36 -0
- conproxy-0.2.0/sdk/rust/src/lib.rs +17 -0
- conproxy-0.2.0/sdk/rust/src/observability.rs +131 -0
- conproxy-0.2.0/sdk/rust/src/search.rs +90 -0
- conproxy-0.2.0/src/bin/conproxy/commands/mod.rs +7 -0
- conproxy-0.2.0/src/bin/conproxy/commands/proxy.rs +1094 -0
- conproxy-0.2.0/src/bin/conproxy/commands/seed.rs +128 -0
- conproxy-0.2.0/src/bin/conproxy/main.rs +549 -0
- conproxy-0.2.0/src/bin/console_snap.rs +351 -0
- conproxy-0.2.0/src/bin/corpus_gen.rs +307 -0
- conproxy-0.2.0/src/bin/corpus_seed.rs +798 -0
- conproxy-0.2.0/src/bin/generate_embeddings.rs +162 -0
- conproxy-0.2.0/src/bin/hitrate_bench.rs +2781 -0
- conproxy-0.2.0/src/bin/perf_summarize.rs +2299 -0
- conproxy-0.2.0/src/bin/test_runner.rs +9035 -0
- conproxy-0.2.0/src/cache/mod.rs +5 -0
- conproxy-0.2.0/src/config/context_rooted.rs +1000 -0
- conproxy-0.2.0/src/config/mod.rs +2924 -0
- conproxy-0.2.0/src/config/tests.rs +2667 -0
- conproxy-0.2.0/src/embedding/cohere.rs +210 -0
- conproxy-0.2.0/src/embedding/embedder.rs +296 -0
- conproxy-0.2.0/src/embedding/huggingface.rs +208 -0
- conproxy-0.2.0/src/embedding/mod.rs +22 -0
- conproxy-0.2.0/src/embedding/models.rs +48 -0
- conproxy-0.2.0/src/embedding/openai.rs +311 -0
- conproxy-0.2.0/src/embedding/provider.rs +347 -0
- conproxy-0.2.0/src/embedding/tests/embedder_tests.rs +182 -0
- conproxy-0.2.0/src/embedding/tests/models_tests.rs +58 -0
- conproxy-0.2.0/src/engine/budget.rs +113 -0
- conproxy-0.2.0/src/engine/mod.rs +615 -0
- conproxy-0.2.0/src/engine/tests.rs +508 -0
- conproxy-0.2.0/src/error/mod.rs +220 -0
- conproxy-0.2.0/src/lib.rs +27 -0
- conproxy-0.2.0/src/main.rs +0 -0
- conproxy-0.2.0/src/mcp/mod.rs +1303 -0
- conproxy-0.2.0/src/mcp/status.rs +181 -0
- conproxy-0.2.0/src/mcp/tests.rs +676 -0
- conproxy-0.2.0/src/proxy/adaptive.rs +290 -0
- conproxy-0.2.0/src/proxy/agent.rs +282 -0
- conproxy-0.2.0/src/proxy/audit.rs +338 -0
- conproxy-0.2.0/src/proxy/batch.rs +379 -0
- conproxy-0.2.0/src/proxy/cache.rs +2182 -0
- conproxy-0.2.0/src/proxy/cascade.rs +1274 -0
- conproxy-0.2.0/src/proxy/cdc/event.rs +353 -0
- conproxy-0.2.0/src/proxy/cdc/mod.rs +151 -0
- conproxy-0.2.0/src/proxy/cdc/stream.rs +327 -0
- conproxy-0.2.0/src/proxy/circuit.rs +337 -0
- conproxy-0.2.0/src/proxy/client.rs +309 -0
- conproxy-0.2.0/src/proxy/coalesce.rs +109 -0
- conproxy-0.2.0/src/proxy/connection_pool.rs +493 -0
- conproxy-0.2.0/src/proxy/context.rs +704 -0
- conproxy-0.2.0/src/proxy/distill.rs +300 -0
- conproxy-0.2.0/src/proxy/elasticsearch.rs +392 -0
- conproxy-0.2.0/src/proxy/embedder_config.rs +108 -0
- conproxy-0.2.0/src/proxy/federated.rs +406 -0
- conproxy-0.2.0/src/proxy/grpc/admin.rs +619 -0
- conproxy-0.2.0/src/proxy/grpc/context.rs +221 -0
- conproxy-0.2.0/src/proxy/grpc/convert.rs +635 -0
- conproxy-0.2.0/src/proxy/grpc/middleware.rs +367 -0
- conproxy-0.2.0/src/proxy/grpc/mod.rs +16 -0
- conproxy-0.2.0/src/proxy/grpc/observability.rs +1024 -0
- conproxy-0.2.0/src/proxy/grpc/search.rs +1852 -0
- conproxy-0.2.0/src/proxy/lifecycle.rs +304 -0
- conproxy-0.2.0/src/proxy/meilisearch.rs +433 -0
- conproxy-0.2.0/src/proxy/metrics.rs +1487 -0
- conproxy-0.2.0/src/proxy/middleware.rs +384 -0
- conproxy-0.2.0/src/proxy/milvus.rs +336 -0
- conproxy-0.2.0/src/proxy/mod.rs +170 -0
- conproxy-0.2.0/src/proxy/observability.rs +292 -0
- conproxy-0.2.0/src/proxy/peer/mod.rs +452 -0
- conproxy-0.2.0/src/proxy/peer/receiver.rs +712 -0
- conproxy-0.2.0/src/proxy/peer/service.rs +335 -0
- conproxy-0.2.0/src/proxy/peer/singleflight.rs +333 -0
- conproxy-0.2.0/src/proxy/peer/snapshot.rs +445 -0
- conproxy-0.2.0/src/proxy/persistence.rs +830 -0
- conproxy-0.2.0/src/proxy/pgvector.rs +381 -0
- conproxy-0.2.0/src/proxy/pinecone.rs +290 -0
- conproxy-0.2.0/src/proxy/pool.rs +1052 -0
- conproxy-0.2.0/src/proxy/priority.rs +245 -0
- conproxy-0.2.0/src/proxy/qdrant.rs +511 -0
- conproxy-0.2.0/src/proxy/query_stats.rs +394 -0
- conproxy-0.2.0/src/proxy/refresh.rs +396 -0
- conproxy-0.2.0/src/proxy/resilience.rs +285 -0
- conproxy-0.2.0/src/proxy/retry.rs +300 -0
- conproxy-0.2.0/src/proxy/sandbox.rs +319 -0
- conproxy-0.2.0/src/proxy/scope.rs +584 -0
- conproxy-0.2.0/src/proxy/semantic_cache.rs +401 -0
- conproxy-0.2.0/src/proxy/server/admin.rs +250 -0
- conproxy-0.2.0/src/proxy/server/batch.rs +489 -0
- conproxy-0.2.0/src/proxy/server/cache.rs +318 -0
- conproxy-0.2.0/src/proxy/server/context.rs +173 -0
- conproxy-0.2.0/src/proxy/server/mod.rs +1723 -0
- conproxy-0.2.0/src/proxy/server/query.rs +128 -0
- conproxy-0.2.0/src/proxy/server/query_core.rs +725 -0
- conproxy-0.2.0/src/proxy/server/status.rs +985 -0
- conproxy-0.2.0/src/proxy/server/tests/mod_tests.rs +6390 -0
- conproxy-0.2.0/src/proxy/server/web_ui.rs +55 -0
- conproxy-0.2.0/src/proxy/slug.rs +108 -0
- conproxy-0.2.0/src/proxy/smart_embedder.rs +431 -0
- conproxy-0.2.0/src/proxy/socket_tuning.rs +411 -0
- conproxy-0.2.0/src/proxy/tests/adaptive_tests.rs +165 -0
- conproxy-0.2.0/src/proxy/tests/agent_tests.rs +237 -0
- conproxy-0.2.0/src/proxy/tests/audit_tests.rs +187 -0
- conproxy-0.2.0/src/proxy/tests/batch_tests.rs +419 -0
- conproxy-0.2.0/src/proxy/tests/cache_tests.rs +2060 -0
- conproxy-0.2.0/src/proxy/tests/cascade_tests.rs +1008 -0
- conproxy-0.2.0/src/proxy/tests/circuit_tests.rs +611 -0
- conproxy-0.2.0/src/proxy/tests/client_tests.rs +485 -0
- conproxy-0.2.0/src/proxy/tests/coalesce_tests.rs +386 -0
- conproxy-0.2.0/src/proxy/tests/connection_pool_tests.rs +350 -0
- conproxy-0.2.0/src/proxy/tests/context_tests.rs +476 -0
- conproxy-0.2.0/src/proxy/tests/elasticsearch_tests.rs +678 -0
- conproxy-0.2.0/src/proxy/tests/embedder_config_tests.rs +75 -0
- conproxy-0.2.0/src/proxy/tests/federated_tests.rs +265 -0
- conproxy-0.2.0/src/proxy/tests/lifecycle_tests.rs +358 -0
- conproxy-0.2.0/src/proxy/tests/meilisearch_tests.rs +325 -0
- conproxy-0.2.0/src/proxy/tests/metrics_tests.rs +741 -0
- conproxy-0.2.0/src/proxy/tests/middleware_tests.rs +857 -0
- conproxy-0.2.0/src/proxy/tests/milvus_tests.rs +76 -0
- conproxy-0.2.0/src/proxy/tests/observability_tests.rs +140 -0
- conproxy-0.2.0/src/proxy/tests/persistence_tests.rs +916 -0
- conproxy-0.2.0/src/proxy/tests/pgvector_tests.rs +161 -0
- conproxy-0.2.0/src/proxy/tests/pinecone_tests.rs +125 -0
- conproxy-0.2.0/src/proxy/tests/pool_tests.rs +1770 -0
- conproxy-0.2.0/src/proxy/tests/priority_tests.rs +156 -0
- conproxy-0.2.0/src/proxy/tests/qdrant_tests.rs +588 -0
- conproxy-0.2.0/src/proxy/tests/query_stats_tests.rs +192 -0
- conproxy-0.2.0/src/proxy/tests/refresh_tests.rs +557 -0
- conproxy-0.2.0/src/proxy/tests/resilience_tests.rs +221 -0
- conproxy-0.2.0/src/proxy/tests/retry_tests.rs +272 -0
- conproxy-0.2.0/src/proxy/tests/sandbox_tests.rs +69 -0
- conproxy-0.2.0/src/proxy/tests/scope_tests.rs +417 -0
- conproxy-0.2.0/src/proxy/tests/smart_embedder_tests.rs +176 -0
- conproxy-0.2.0/src/proxy/tests/stress_tests.rs +466 -0
- conproxy-0.2.0/src/proxy/tests/types_tests.rs +1338 -0
- conproxy-0.2.0/src/proxy/tests/upstream_tests.rs +554 -0
- conproxy-0.2.0/src/proxy/tune/apply.rs +373 -0
- conproxy-0.2.0/src/proxy/tune/benchmark.rs +400 -0
- conproxy-0.2.0/src/proxy/tune/cache.rs +199 -0
- conproxy-0.2.0/src/proxy/tune/cascade_tune.rs +185 -0
- conproxy-0.2.0/src/proxy/tune/compare.rs +98 -0
- conproxy-0.2.0/src/proxy/tune/embed_tune.rs +173 -0
- conproxy-0.2.0/src/proxy/tune/federated_tune.rs +178 -0
- conproxy-0.2.0/src/proxy/tune/mod.rs +1267 -0
- conproxy-0.2.0/src/proxy/tune/rate_limit.rs +189 -0
- conproxy-0.2.0/src/proxy/tune/scope.rs +242 -0
- conproxy-0.2.0/src/proxy/tune/session.rs +986 -0
- conproxy-0.2.0/src/proxy/tune/suggest.rs +182 -0
- conproxy-0.2.0/src/proxy/tune/warm.rs +182 -0
- conproxy-0.2.0/src/proxy/types.rs +1293 -0
- conproxy-0.2.0/src/proxy/upstream.rs +648 -0
- conproxy-0.2.0/src/proxy/workers/cleanup.rs +110 -0
- conproxy-0.2.0/src/proxy/workers/health.rs +119 -0
- conproxy-0.2.0/src/proxy/workers/mod.rs +16 -0
- conproxy-0.2.0/src/proxy/workers/recovery.rs +338 -0
- conproxy-0.2.0/src/proxy/workers/scheduler.rs +153 -0
- conproxy-0.2.0/src/proxy/workers/tests/cleanup_tests.rs +162 -0
- conproxy-0.2.0/src/proxy/workers/tests/health_tests.rs +224 -0
- conproxy-0.2.0/src/proxy/workers/tests/recovery_tests.rs +630 -0
- conproxy-0.2.0/src/proxy/workers/tests/scheduler_tests.rs +140 -0
- conproxy-0.2.0/src/proxy/workers/tests/version_tests.rs +481 -0
- conproxy-0.2.0/src/proxy/workers/version.rs +278 -0
- conproxy-0.2.0/tests/common/gitea.rs +172 -0
- conproxy-0.2.0/tests/common/mock_upstream.rs +169 -0
- conproxy-0.2.0/tests/common/mod.rs +359 -0
- conproxy-0.2.0/tests/corpus/README.md +100 -0
- conproxy-0.2.0/tests/corpus/data/code.jsonl +100 -0
- conproxy-0.2.0/tests/corpus/data/docs.jsonl +100 -0
- conproxy-0.2.0/tests/corpus/data/queries.jsonl +60 -0
- conproxy-0.2.0/tests/corpus/data/tickets.jsonl +100 -0
- conproxy-0.2.0/tests/corpus/templates/code/adaptive_timeout_fn.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/audit_log.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/cache_evict.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/cache_lookup.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/cascade_execute.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/circuit_check.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/coalesce_dedup_fn.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/config_reload.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/context_switch.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/drift_check.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/embed_query.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/federated_merge.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/fuse_rrf.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/health_probe.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/mcp_tool_register.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/peer_sync.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/pool_select.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/rate_limit_check.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/scope_filter.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/code/warmup_seed.md +30 -0
- conproxy-0.2.0/tests/corpus/templates/docs/adaptive_timeout.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/audit_logging.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/cache_ttl_tuning.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/cascade_configuration.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/circuit_breaker.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/coalesce_dedup.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/connection_pool.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/context_management.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/deployment_k8s.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/drift_detection.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/embedding_provider_config.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/federated_search.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/federation_vs_cascade.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/mcp_server_integration.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/metrics_observability.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/peer_replication.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/rate_limiting.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/scope_filtering.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/semantic_cache_threshold.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/docs/warmup_strategy.md +32 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/auth_failure.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/cache_inconsistency.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/cascade_exhaustion.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/circuit_tripping.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/coalesce_deadlock.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/config_reload_failure.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/connection_timeout.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/data_loss.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/embedding_mismatch.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/health_check_failure.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/memory_leak.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/metrics_drift.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/peer_sync_stall.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/performance_regression.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/rate_limit_exceeded.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/replication_divergence.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/scope_filter_regression.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/search_quality_degradation.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/upstream_drain.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/tickets/warmup_timeout.md +28 -0
- conproxy-0.2.0/tests/corpus/templates/topics.toml +179 -0
- conproxy-0.2.0/tests/e2e/configs/cascade-mixed.toml +32 -0
- conproxy-0.2.0/tests/e2e/configs/mixed-upstreams.toml +27 -0
- conproxy-0.2.0/tests/e2e/configs/multi-elasticsearch.toml +31 -0
- conproxy-0.2.0/tests/e2e/configs/single-elasticsearch.toml +15 -0
- conproxy-0.2.0/tests/e2e/configs/single-qdrant.toml +14 -0
- conproxy-0.2.0/tests/e2e/data/eval_docs.json +74 -0
- conproxy-0.2.0/tests/e2e/data/eval_queries.json +58 -0
- conproxy-0.2.0/tests/e2e/data/grafana-dashboard.json +35 -0
- conproxy-0.2.0/tests/e2e/data/sample_docs.json +74 -0
- conproxy-0.2.0/tests/e2e/data/seeds_fts.txt +10 -0
- conproxy-0.2.0/tests/e2e/docker-compose.yml +62 -0
- conproxy-0.2.0/tests/e2e/profiling/lock_profile.bt +75 -0
- conproxy-0.2.0/tests/e2e/profiling/net_profile.bt +93 -0
- conproxy-0.2.0/tests/e2e/profiling/syscall_profile.bt +262 -0
- conproxy-0.2.0/tests/e2e_eval/e2e_eval/.gitignore +1 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/agent_file.rs +55 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/claude.rs +216 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/constants.rs +243 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/data.rs +233 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/mcp_client.rs +159 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/mod.rs +11 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/ollama.rs +213 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/openai_compat.rs +226 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/proxy.rs +451 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/report.rs +1368 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/scoring.rs +197 -0
- conproxy-0.2.0/tests/e2e_eval/helpers/tool_defs.rs +43 -0
- conproxy-0.2.0/tests/e2e_eval/main.rs +489 -0
- conproxy-0.2.0/tests/e2e_eval/render_html.py +334 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260212-183314/eval_results.json +1168 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-204722/eval_results.html +395 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-204722/eval_results.json +1140 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-210917/eval_results.html +1109 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-210917/eval_results.json +1163 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-224510/eval_results.html +1305 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-224510/eval_results.json +1172 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-231331/eval_results.html +1220 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260223-231331/eval_results.json +1164 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-002747/eval_results.html +1105 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-002747/eval_results.json +1172 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-012144/eval_results.html +526 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-012144/eval_results.json +1083 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-125624/eval_results.html +2007 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-125624/eval_results.json +1678 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-211821/eval_results.html +1591 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-211821/eval_results.json +1388 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-221934/eval_results.html +1912 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-221934/eval_results.json +1759 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-223814/eval_results.html +1984 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-223814/eval_results.json +1763 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-225100/eval_results.html +595 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-225100/eval_results.json +582 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-225950/eval_results.html +605 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-225950/eval_results.json +609 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-230617/eval_results.html +543 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-230617/eval_results.json +569 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-231347/eval_results.html +570 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-231347/eval_results.json +588 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-232242/eval_results.html +635 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-232242/eval_results.json +618 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-232840/eval_results.html +612 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260224-232840/eval_results.json +620 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260226-215223/eval_results.html +166 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260226-215223/eval_results.json +187 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260718-090214/eval_results.html +311 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260718-090214/eval_results.json +238 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260720-223919_llamacpp/eval_results.html +310 -0
- conproxy-0.2.0/tests/e2e_eval/results/20260720-223919_llamacpp/eval_results.json +238 -0
- conproxy-0.2.0/tests/e2e_eval/verticals/mod.rs +482 -0
- conproxy-0.2.0/tests/e2e_load/main.rs +829 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/advanced.rs +192 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/agent_mgmt.rs +138 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/cache.rs +166 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/cache_observability.rs +109 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/cascade.rs +64 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/circuit_breaker.rs +193 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/cli.rs +237 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/coalescing.rs +181 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/compression.rs +124 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/content.rs +66 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/context_isolation.rs +93 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/context_rooted.rs +73 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/distill.rs +48 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/efficiency.rs +108 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/error_handling.rs +225 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/federated_search.rs +196 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/grpc_parity.rs +399 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/health.rs +49 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/metrics_cat.rs +119 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/mod.rs +29 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/operational.rs +115 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/query.rs +78 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/relevance.rs +91 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/reload.rs +59 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/resilience.rs +180 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/sdk_parity.rs +479 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/security.rs +409 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/smoke.rs +138 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/socket_tuning.rs +200 -0
- conproxy-0.2.0/tests/e2e_proxy/categories/warmup.rs +69 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/client.rs +369 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/config.rs +373 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/constants.rs +164 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/docker.rs +11 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/metrics.rs +60 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/mock_upstream.rs +552 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/mod.rs +8 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/proxy.rs +198 -0
- conproxy-0.2.0/tests/e2e_proxy/helpers/report.rs +892 -0
- conproxy-0.2.0/tests/e2e_proxy/main.rs +545 -0
- conproxy-0.2.0/tests/e2e_sdk_python.rs +309 -0
- conproxy-0.2.0/tests/e2e_uat/main.rs +209 -0
- conproxy-0.2.0/tests/integration_batch.rs +166 -0
- conproxy-0.2.0/tests/integration_cascade.rs +138 -0
- conproxy-0.2.0/tests/integration_circuit.rs +124 -0
- conproxy-0.2.0/tests/integration_context_config.rs +290 -0
- conproxy-0.2.0/tests/integration_elasticsearch.rs +91 -0
- conproxy-0.2.0/tests/integration_engine.rs +179 -0
- conproxy-0.2.0/tests/integration_meilisearch.rs +107 -0
- conproxy-0.2.0/tests/integration_metrics.rs +108 -0
- conproxy-0.2.0/tests/integration_milvus.rs +105 -0
- conproxy-0.2.0/tests/integration_opensearch.rs +87 -0
- conproxy-0.2.0/tests/integration_peer.rs +580 -0
- conproxy-0.2.0/tests/integration_pgvector.rs +200 -0
- conproxy-0.2.0/tests/integration_pinecone.rs +136 -0
- conproxy-0.2.0/tests/integration_qdrant.rs +82 -0
- conproxy-0.2.0/tests/integration_singleflight.rs +147 -0
- conproxy-0.2.0/tests/load_benches.rs +224 -0
- conproxy-0.2.0/tests/mcp_test.rs +375 -0
- conproxy-0.2.0/tests/proxy_cli_test.rs +475 -0
- conproxy-0.2.0/tests/proxy_test.rs +343 -0
- conproxy-0.2.0/tests/seed_test.rs +143 -0
- conproxy-0.2.0/tests/test_infra/containers.rs +552 -0
- conproxy-0.2.0/tests/test_infra/data_loader.rs +289 -0
- conproxy-0.2.0/tests/test_infra/html.rs +148 -0
- conproxy-0.2.0/tests/test_infra/index.rs +545 -0
- conproxy-0.2.0/tests/test_infra/mod.rs +15 -0
- conproxy-0.2.0/tests/test_infra/proc_monitor.rs +250 -0
- conproxy-0.2.0/tests/test_infra/report_gen.rs +458 -0
- conproxy-0.2.0/tests/test_infra/services.rs +110 -0
- conproxy-0.2.0/ui/app.js +243 -0
- conproxy-0.2.0/ui/index.html +88 -0
- conproxy-0.2.0/ui/style.css +40 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Local-dev toolchain tuning. See docs/dev-loop.md for the rationale.
|
|
2
|
+
#
|
|
3
|
+
# Effects on Linux dev/test loops:
|
|
4
|
+
# - lld via clang: much faster link of large test binaries (~300-400 MB)
|
|
5
|
+
# - --no-keep-memory: lld release peak RSS during big links
|
|
6
|
+
#
|
|
7
|
+
# This file only takes effect on Linux. macOS / Windows keep the host default linker.
|
|
8
|
+
# Opt out per-invocation with `CARGO_BUILD_RUSTFLAGS=""` if a toolchain is missing.
|
|
9
|
+
[target.x86_64-unknown-linux-gnu]
|
|
10
|
+
linker = "clang"
|
|
11
|
+
rustflags = [
|
|
12
|
+
"-C", "link-arg=-fuse-ld=lld",
|
|
13
|
+
"-C", "link-arg=-Wl,--no-keep-memory",
|
|
14
|
+
]
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# cargo-nextest configuration.
|
|
2
|
+
# See https://nexte.st/docs/configuration/
|
|
3
|
+
#
|
|
4
|
+
# `dev` profile is for the local save loop:
|
|
5
|
+
# - terse output (one line per test)
|
|
6
|
+
# - N processes (one per CPU)
|
|
7
|
+
# - no retries (the slowest test is real; flakiness is its own issue)
|
|
8
|
+
#
|
|
9
|
+
# Usage: `cargo nextest run --profile dev` (or `make test-nextest`).
|
|
10
|
+
|
|
11
|
+
[profile.dev]
|
|
12
|
+
# Use all CPUs for parallelism. Set lower on shared / loud hosts.
|
|
13
|
+
test-threads = "num-cpus"
|
|
14
|
+
|
|
15
|
+
# Per-test timeout: catches stuck tests fast. 5 min is generous for unit
|
|
16
|
+
# tests; raise if a long-running test legitimately needs more.
|
|
17
|
+
timeout = "5m"
|
|
18
|
+
|
|
19
|
+
# Fail fast: stop on the first failure (the dev loop wants signal ASAP).
|
|
20
|
+
fail-fast = true
|
|
21
|
+
|
|
22
|
+
# Default status level: skip per-test PASS, show summary only.
|
|
23
|
+
status-level = "pass"
|
|
24
|
+
|
|
25
|
+
# Failure output: only print captured stdout/stderr for failing tests.
|
|
26
|
+
failure-output = "immediate"
|
|
27
|
+
|
|
28
|
+
# Success output: discard — re-run with `--success-output=immediate` to see.
|
|
29
|
+
success-output = "never"
|
|
30
|
+
|
|
31
|
+
# Stdout capture: per-test (lets the above settings work).
|
|
32
|
+
final-status-level = "fail"
|
|
33
|
+
# Print a final summary line on completion.
|
|
34
|
+
output = "terminal"
|
|
35
|
+
|
|
36
|
+
# Don't use libtest's auto-tracing; rely on nextest's per-test capture.
|
|
37
|
+
#
|
|
38
|
+
# A `ci` profile (slower, retries) is left to the team to add if/when CI uses
|
|
39
|
+
# nextest. For now GitHub Actions runs `cargo test`, not nextest.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Cargo build artifacts.
|
|
2
|
+
target/
|
|
3
|
+
**/target/
|
|
4
|
+
|
|
5
|
+
# VCS.
|
|
6
|
+
.git/
|
|
7
|
+
.gitignore
|
|
8
|
+
.github/
|
|
9
|
+
|
|
10
|
+
# Editor / OS noise.
|
|
11
|
+
.idea/
|
|
12
|
+
.vscode/
|
|
13
|
+
.DS_Store
|
|
14
|
+
*.swp
|
|
15
|
+
*~
|
|
16
|
+
*.log
|
|
17
|
+
|
|
18
|
+
# Test output / coverage.
|
|
19
|
+
coverage/
|
|
20
|
+
*.profraw
|
|
21
|
+
*.profdata
|
|
22
|
+
dhat-heap.json
|
|
23
|
+
.criterion/
|
|
24
|
+
|
|
25
|
+
# Runtime state.
|
|
26
|
+
.conproxy/
|
|
27
|
+
*.pid
|
|
28
|
+
|
|
29
|
+
# Rust-lang-related: only need the workspace manifest + src for a conproxy build.
|
|
30
|
+
benches/
|
|
31
|
+
docs/
|
|
32
|
+
examples/
|
|
33
|
+
tests/
|
|
34
|
+
results/
|
|
35
|
+
*.md
|
|
36
|
+
!README.md
|
|
37
|
+
!LICENSE
|
|
38
|
+
!CHANGELOG.md
|
|
39
|
+
|
|
40
|
+
# Build assets we don't need in the image.
|
|
41
|
+
.dockerignore
|
|
42
|
+
Dockerfile
|
|
43
|
+
Cross.toml
|
|
44
|
+
AGENTS.md
|
|
45
|
+
.opencode/
|
|
46
|
+
.skill/
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# conproxy CI — PR gate.
|
|
2
|
+
#
|
|
3
|
+
# Every PR (and push to the default branch) runs six jobs. Five start in
|
|
4
|
+
# parallel so we never burn heavy e2e time when a cheaper gate would
|
|
5
|
+
# block the merge. `e2e` is gated on the cheap gates so the full
|
|
6
|
+
# ignored suite + UAT + e2e-security only run when code is otherwise
|
|
7
|
+
# green.
|
|
8
|
+
#
|
|
9
|
+
# 1. unit — fmt, clippy (all feature surfaces + bins),
|
|
10
|
+
# lib tests (default / embed-api / mcp /
|
|
11
|
+
# release), mcp_test, workspace build,
|
|
12
|
+
# embed linker, release binary smoke +
|
|
13
|
+
# install-sim.
|
|
14
|
+
# 2. integration — testcontainers matrix (qdrant, ES, OS,
|
|
15
|
+
# meili, pgvector, cascade, peer,
|
|
16
|
+
# circuit, batch, metrics,
|
|
17
|
+
# context_config, singleflight).
|
|
18
|
+
# `make test-integration`.
|
|
19
|
+
# 3. integration-experimental — pinecone + milvus mocks. Default-on
|
|
20
|
+
# (cheap, no real backends). `make
|
|
21
|
+
# test-integration-experimental`.
|
|
22
|
+
# 4. security — cargo audit + cargo deny + lint-security
|
|
23
|
+
# clippy. ~1 min.
|
|
24
|
+
# 5. fuzz — cargo fuzz on every target, 60s each,
|
|
25
|
+
# best-effort (continue-on-error: true).
|
|
26
|
+
# Crash repros uploaded as artifacts.
|
|
27
|
+
# 6. e2e — needs: [unit, integration]. Full
|
|
28
|
+
# ignored e2e_proxy_suite (compose up →
|
|
29
|
+
# load → all phases: smoke/health/query,
|
|
30
|
+
# cascade, load, reload, observability,
|
|
31
|
+
# efficiency, advanced, security) + UAT
|
|
32
|
+
# CLI suite + e2e-security. Heaviest job.
|
|
33
|
+
#
|
|
34
|
+
# Out of CI scope (kept local / nightly / release.yml):
|
|
35
|
+
# - e2e_eval (LLM eval: requires Ollama or `EVAL_PROVIDER=claude` key)
|
|
36
|
+
# - rlt load tests (`make e2e-bench`)
|
|
37
|
+
# - PGO / DHAT / flamegraph / perf-tuning-full
|
|
38
|
+
# - cross-compile (lives in release.yml)
|
|
39
|
+
# - container build + Helm publish (lives in release.yml)
|
|
40
|
+
#
|
|
41
|
+
# Cache strategy:
|
|
42
|
+
# - Swatinem/rust-cache@v2 on every cargo job.
|
|
43
|
+
# - `shared-key: "ci-<job>-<os>"` so cache keys are stable across
|
|
44
|
+
# matrix renames but isolated per job (different feature graphs
|
|
45
|
+
# must not share a registry).
|
|
46
|
+
# - `cache-on-failure: true` so a failing build still leaves a warm
|
|
47
|
+
# cache for the next attempt.
|
|
48
|
+
name: ci
|
|
49
|
+
|
|
50
|
+
on:
|
|
51
|
+
pull_request:
|
|
52
|
+
push:
|
|
53
|
+
branches: [master, main]
|
|
54
|
+
workflow_dispatch:
|
|
55
|
+
|
|
56
|
+
env:
|
|
57
|
+
CARGO_TERM_COLOR: always
|
|
58
|
+
RUSTFLAGS: -D warnings
|
|
59
|
+
|
|
60
|
+
jobs:
|
|
61
|
+
# ---------------------------------------------------------------------------
|
|
62
|
+
# Job 1: unit (cheap, fast — every PR sees this fail first)
|
|
63
|
+
# ---------------------------------------------------------------------------
|
|
64
|
+
unit:
|
|
65
|
+
name: unit
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
timeout-minutes: 45
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/checkout@v4
|
|
70
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
71
|
+
with:
|
|
72
|
+
components: rustfmt
|
|
73
|
+
- name: Install protoc + python3-dev
|
|
74
|
+
run: |
|
|
75
|
+
sudo apt-get update
|
|
76
|
+
sudo apt-get install -y protobuf-compiler python3-dev
|
|
77
|
+
- uses: Swatinem/rust-cache@v2
|
|
78
|
+
with:
|
|
79
|
+
shared-key: ci-unit-${{ runner.os }}
|
|
80
|
+
cache-on-failure: true
|
|
81
|
+
- name: Format
|
|
82
|
+
run: cargo fmt -- --check
|
|
83
|
+
- name: Clippy (lib, all feature surfaces)
|
|
84
|
+
run: |
|
|
85
|
+
cargo clippy --lib -- -D warnings
|
|
86
|
+
cargo clippy --features embed-api --lib -- -D warnings
|
|
87
|
+
cargo clippy --features persistence --lib -- -D warnings
|
|
88
|
+
cargo clippy --features mcp --lib -- -D warnings
|
|
89
|
+
cargo clippy --features pgvector --lib -- -D warnings
|
|
90
|
+
cargo clippy --features linux-sandbox --lib -- -D warnings
|
|
91
|
+
cargo clippy --features release --lib -- -D warnings
|
|
92
|
+
- name: Clippy (bins)
|
|
93
|
+
run: |
|
|
94
|
+
cargo clippy --bin perf_summarize -- -D warnings
|
|
95
|
+
cargo clippy --features tokio-console --bin conproxy -- -D warnings
|
|
96
|
+
- name: Lib tests (default / embed-api / mcp / release)
|
|
97
|
+
run: |
|
|
98
|
+
cargo test --lib
|
|
99
|
+
cargo test --features embed-api --lib
|
|
100
|
+
cargo test --features mcp --lib
|
|
101
|
+
cargo test --features release --lib
|
|
102
|
+
- name: MCP integration test
|
|
103
|
+
run: cargo test --features mcp --test mcp_test
|
|
104
|
+
- name: Build (workspace)
|
|
105
|
+
run: cargo build --workspace
|
|
106
|
+
- name: Build (embed linker, hard gate)
|
|
107
|
+
run: cargo build --features embed --lib
|
|
108
|
+
- name: Release binary smoke
|
|
109
|
+
run: |
|
|
110
|
+
cargo build --release --features release --bin conproxy
|
|
111
|
+
./target/release/conproxy --version
|
|
112
|
+
./target/release/conproxy --help 2>&1 | head -40
|
|
113
|
+
- name: Install simulation (isolated --root)
|
|
114
|
+
run: |
|
|
115
|
+
cargo install --locked --path . --features release --root /tmp/conproxy-install
|
|
116
|
+
/tmp/conproxy-install/bin/conproxy --version
|
|
117
|
+
rm -rf /tmp/conproxy-install
|
|
118
|
+
|
|
119
|
+
# ---------------------------------------------------------------------------
|
|
120
|
+
# Job 2: integration (testcontainers — Docker daemon on runner)
|
|
121
|
+
# ---------------------------------------------------------------------------
|
|
122
|
+
integration:
|
|
123
|
+
name: integration
|
|
124
|
+
runs-on: ubuntu-latest
|
|
125
|
+
timeout-minutes: 30
|
|
126
|
+
steps:
|
|
127
|
+
- uses: actions/checkout@v4
|
|
128
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
129
|
+
- name: Install protoc + python3-dev
|
|
130
|
+
run: |
|
|
131
|
+
sudo apt-get update
|
|
132
|
+
sudo apt-get install -y protobuf-compiler python3-dev
|
|
133
|
+
- uses: Swatinem/rust-cache@v2
|
|
134
|
+
with:
|
|
135
|
+
shared-key: ci-integration-${{ runner.os }}
|
|
136
|
+
cache-on-failure: true
|
|
137
|
+
- name: Core testcontainers matrix
|
|
138
|
+
# qdrant, ES, OS, meili, pgvector + cascade/peer/circuit/batch/
|
|
139
|
+
# metrics/context_config/singleflight. ~10 min on a standard
|
|
140
|
+
# ubuntu-latest runner.
|
|
141
|
+
run: make test-integration
|
|
142
|
+
|
|
143
|
+
# ---------------------------------------------------------------------------
|
|
144
|
+
# Job 3: integration-experimental (pinecone + milvus mocks)
|
|
145
|
+
# Cheap — no real backends. Default-on so we catch regressions even
|
|
146
|
+
# when nobody runs the `run-integration` label.
|
|
147
|
+
# ---------------------------------------------------------------------------
|
|
148
|
+
integration-experimental:
|
|
149
|
+
name: integration-experimental
|
|
150
|
+
runs-on: ubuntu-latest
|
|
151
|
+
timeout-minutes: 10
|
|
152
|
+
steps:
|
|
153
|
+
- uses: actions/checkout@v4
|
|
154
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
155
|
+
- name: Install protoc (build.rs uses tonic-prost-build)
|
|
156
|
+
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler
|
|
157
|
+
- uses: Swatinem/rust-cache@v2
|
|
158
|
+
with:
|
|
159
|
+
shared-key: ci-integration-experimental-${{ runner.os }}
|
|
160
|
+
cache-on-failure: true
|
|
161
|
+
- name: Pinecone + Milvus mock integration tests
|
|
162
|
+
run: make test-integration-experimental
|
|
163
|
+
|
|
164
|
+
# ---------------------------------------------------------------------------
|
|
165
|
+
# Job 4: security (cargo audit + cargo deny + lint-security clippy)
|
|
166
|
+
# ---------------------------------------------------------------------------
|
|
167
|
+
security:
|
|
168
|
+
name: security
|
|
169
|
+
runs-on: ubuntu-latest
|
|
170
|
+
timeout-minutes: 10
|
|
171
|
+
steps:
|
|
172
|
+
- uses: actions/checkout@v4
|
|
173
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
174
|
+
- name: Install protoc + cargo-audit + cargo-deny
|
|
175
|
+
# protoc needed for the conproxy build.rs (tonic-prost-build)
|
|
176
|
+
# in the clippy step below.
|
|
177
|
+
run: |
|
|
178
|
+
sudo apt-get update
|
|
179
|
+
sudo apt-get install -y protobuf-compiler
|
|
180
|
+
cargo install cargo-audit --locked || true
|
|
181
|
+
cargo install cargo-deny --locked || true
|
|
182
|
+
- uses: Swatinem/rust-cache@v2
|
|
183
|
+
with:
|
|
184
|
+
shared-key: ci-security-${{ runner.os }}
|
|
185
|
+
cache-on-failure: true
|
|
186
|
+
- name: RustSec advisory scan
|
|
187
|
+
run: cargo audit
|
|
188
|
+
- name: Supply chain + license check
|
|
189
|
+
run: cargo deny check
|
|
190
|
+
- name: Security-focused clippy lints
|
|
191
|
+
# Lint the lib only. `--all-targets` / `--bins` would also
|
|
192
|
+
# compile test code and pre-existing `corpus_gen` indexing
|
|
193
|
+
# panics, which are tracked in CONTRIBUTING Known Gaps.
|
|
194
|
+
# Tier 1 unit job already covers `--bin perf_summarize` and
|
|
195
|
+
# `--bin conproxy` with the standard lib clippy surface.
|
|
196
|
+
run: |
|
|
197
|
+
cargo clippy --lib -- -D warnings \
|
|
198
|
+
-W clippy::unwrap_used \
|
|
199
|
+
-W clippy::expect_used \
|
|
200
|
+
-W clippy::panic \
|
|
201
|
+
-W clippy::indexing_slicing \
|
|
202
|
+
-W clippy::arithmetic_side_effects
|
|
203
|
+
|
|
204
|
+
# ---------------------------------------------------------------------------
|
|
205
|
+
# Job 5: fuzz (cargo fuzz, every target, 60s each, best effort)
|
|
206
|
+
# Best-effort because fuzz is by nature non-deterministic; we still
|
|
207
|
+
# gate PRs on the green gates in jobs 1–4, and any crashes found get
|
|
208
|
+
# uploaded as artifacts for triage.
|
|
209
|
+
# ---------------------------------------------------------------------------
|
|
210
|
+
fuzz:
|
|
211
|
+
name: fuzz
|
|
212
|
+
runs-on: ubuntu-latest
|
|
213
|
+
timeout-minutes: 10
|
|
214
|
+
continue-on-error: true
|
|
215
|
+
steps:
|
|
216
|
+
- uses: actions/checkout@v4
|
|
217
|
+
- uses: dtolnay/rust-toolchain@nightly
|
|
218
|
+
# cargo-fuzz needs the nightly toolchain (profiler-rt).
|
|
219
|
+
- name: Install protoc + cargo-fuzz
|
|
220
|
+
# protoc needed because fuzz/Cargo.toml links against the
|
|
221
|
+
# conproxy crate, whose build.rs uses tonic-prost-build.
|
|
222
|
+
run: |
|
|
223
|
+
sudo apt-get update
|
|
224
|
+
sudo apt-get install -y protobuf-compiler
|
|
225
|
+
cargo install cargo-fuzz --locked
|
|
226
|
+
- uses: Swatinem/rust-cache@v2
|
|
227
|
+
with:
|
|
228
|
+
shared-key: ci-fuzz-${{ runner.os }}
|
|
229
|
+
cache-on-failure: true
|
|
230
|
+
- name: Fuzz query request deserializer
|
|
231
|
+
run: cargo fuzz run fuzz_query_request -- -max_len=4096 -max_total_time=60 || true
|
|
232
|
+
- name: Fuzz config TOML parser
|
|
233
|
+
run: cargo fuzz run fuzz_config_parse -- -max_len=8192 -max_total_time=60 || true
|
|
234
|
+
- name: Fuzz ES response
|
|
235
|
+
run: cargo fuzz run fuzz_es_response -- -max_len=8192 -max_total_time=60 || true
|
|
236
|
+
- name: Fuzz Qdrant response
|
|
237
|
+
run: cargo fuzz run fuzz_qdrant_response -- -max_len=8192 -max_total_time=60 || true
|
|
238
|
+
- name: Fuzz schema fingerprint
|
|
239
|
+
run: cargo fuzz run fuzz_schema_fingerprint -- -max_len=4096 -max_total_time=60 || true
|
|
240
|
+
- name: Upload fuzz crash artifacts
|
|
241
|
+
if: always()
|
|
242
|
+
uses: actions/upload-artifact@v4
|
|
243
|
+
with:
|
|
244
|
+
name: fuzz-artifacts
|
|
245
|
+
path: |
|
|
246
|
+
fuzz/artifacts/
|
|
247
|
+
fuzz/corpus/
|
|
248
|
+
if-no-files-found: ignore
|
|
249
|
+
retention-days: 7
|
|
250
|
+
|
|
251
|
+
# ---------------------------------------------------------------------------
|
|
252
|
+
# Job 6: e2e (needs unit + integration)
|
|
253
|
+
# Real ignored e2e_proxy_suite (all phases), plus UAT CLI suite, plus
|
|
254
|
+
# the security-focused e2e filter. Uses GHA Docker layer cache
|
|
255
|
+
# (setup-buildx) + docker compose pull to keep image pulls fast.
|
|
256
|
+
# ---------------------------------------------------------------------------
|
|
257
|
+
e2e:
|
|
258
|
+
name: e2e
|
|
259
|
+
needs: [unit, integration]
|
|
260
|
+
if: success()
|
|
261
|
+
runs-on: ubuntu-latest
|
|
262
|
+
timeout-minutes: 45
|
|
263
|
+
steps:
|
|
264
|
+
- uses: actions/checkout@v4
|
|
265
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
266
|
+
- name: Install protoc + python3-dev
|
|
267
|
+
run: |
|
|
268
|
+
sudo apt-get update
|
|
269
|
+
sudo apt-get install -y protobuf-compiler python3-dev
|
|
270
|
+
- uses: docker/setup-buildx-action@v3
|
|
271
|
+
- uses: Swatinem/rust-cache@v2
|
|
272
|
+
with:
|
|
273
|
+
shared-key: ci-e2e-${{ runner.os }}
|
|
274
|
+
cache-on-failure: true
|
|
275
|
+
- name: Build release binary (conproxy)
|
|
276
|
+
run: cargo build --release --features release --bin conproxy
|
|
277
|
+
- name: Pull backend images (Docker cache)
|
|
278
|
+
run: |
|
|
279
|
+
cd tests/e2e
|
|
280
|
+
docker compose pull --quiet || true
|
|
281
|
+
- name: Bring up backends (docker compose)
|
|
282
|
+
run: |
|
|
283
|
+
cd tests/e2e
|
|
284
|
+
docker compose up -d
|
|
285
|
+
- name: Wait for backends
|
|
286
|
+
run: |
|
|
287
|
+
cargo build --bin test_runner --features default -q
|
|
288
|
+
cargo run --bin test_runner --features default -- wait all
|
|
289
|
+
- name: Load test data
|
|
290
|
+
run: cargo run --bin test_runner --features default -- load-data
|
|
291
|
+
- name: Full ignored e2e_proxy_suite (all phases)
|
|
292
|
+
# Single-threaded to avoid two phases fighting over the same
|
|
293
|
+
# proxy lifecycle; the test internally restarts the proxy
|
|
294
|
+
# between phases. PROXY_URL points the test's E2eClient (and the
|
|
295
|
+
# conproxy CLI helper) at the test's proxy on 8080/8081.
|
|
296
|
+
env:
|
|
297
|
+
E2E_SUITE: all
|
|
298
|
+
E2E_OUTPUT_DIR: ${{ github.workspace }}/e2e-results
|
|
299
|
+
PROXY_URL: http://127.0.0.1:8081
|
|
300
|
+
run: |
|
|
301
|
+
mkdir -p "$E2E_OUTPUT_DIR"
|
|
302
|
+
PROXY_BIN="${{ github.workspace }}/target/release/conproxy" \
|
|
303
|
+
cargo test --test e2e_proxy --features e2e \
|
|
304
|
+
-- --ignored --nocapture --test-threads=1 e2e_proxy_suite
|
|
305
|
+
- name: UAT (CLI lifecycle)
|
|
306
|
+
env:
|
|
307
|
+
PROXY_BIN: ${{ github.workspace }}/target/release/conproxy
|
|
308
|
+
PROXY_URL: http://127.0.0.1:8081
|
|
309
|
+
run: |
|
|
310
|
+
PROXY_BIN=$PROXY_BIN \
|
|
311
|
+
cargo test --test e2e_uat --features e2e -- --ignored --nocapture
|
|
312
|
+
- name: Security-focused e2e
|
|
313
|
+
env:
|
|
314
|
+
PROXY_BIN: ${{ github.workspace }}/target/release/conproxy
|
|
315
|
+
E2E_SUITE: security
|
|
316
|
+
E2E_FILTER: security
|
|
317
|
+
PROXY_URL: http://127.0.0.1:8081
|
|
318
|
+
run: |
|
|
319
|
+
PROXY_BIN=$PROXY_BIN \
|
|
320
|
+
cargo test --test e2e_proxy --features e2e \
|
|
321
|
+
-- --ignored --nocapture e2e_proxy_suite security
|
|
322
|
+
- name: Upload e2e results
|
|
323
|
+
if: always()
|
|
324
|
+
uses: actions/upload-artifact@v4
|
|
325
|
+
with:
|
|
326
|
+
name: e2e-results
|
|
327
|
+
path: e2e-results/
|
|
328
|
+
if-no-files-found: ignore
|
|
329
|
+
retention-days: 7
|
|
330
|
+
- name: Tear down backends
|
|
331
|
+
if: always()
|
|
332
|
+
run: |
|
|
333
|
+
cd tests/e2e
|
|
334
|
+
docker compose down -v || true
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Coverage gate (weekly).
|
|
2
|
+
#
|
|
3
|
+
# Runs `cargo tarpaulin` to produce the per-file line coverage report
|
|
4
|
+
# and the `make test-coverage-check` per-file 80% gate. **Not** part of
|
|
5
|
+
# the PR gate (lives in `ci.yml` unit job). Tarpaulin takes ~10 min on
|
|
6
|
+
# cold cache and is non-deterministic across runners, so we keep it off
|
|
7
|
+
# the PR path and report weekly instead.
|
|
8
|
+
#
|
|
9
|
+
# Triggers:
|
|
10
|
+
# - weekly: Monday 06:00 UTC (cron)
|
|
11
|
+
# - workflow_dispatch: manual rerun / ad-hoc
|
|
12
|
+
# - push to default branch: refresh the report on every merge
|
|
13
|
+
#
|
|
14
|
+
# Artifacts:
|
|
15
|
+
# - coverage-results: tarpaulin-report.json + html (when generated)
|
|
16
|
+
name: coverage
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
schedule:
|
|
20
|
+
# 06:00 UTC every Monday. Cost ~10 min on a standard runner.
|
|
21
|
+
- cron: '0 6 * * 1'
|
|
22
|
+
push:
|
|
23
|
+
branches: [master, main]
|
|
24
|
+
workflow_dispatch:
|
|
25
|
+
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
|
|
29
|
+
env:
|
|
30
|
+
CARGO_TERM_COLOR: always
|
|
31
|
+
RUSTFLAGS: -D warnings
|
|
32
|
+
|
|
33
|
+
jobs:
|
|
34
|
+
coverage:
|
|
35
|
+
name: tarpaulin (lib + bins)
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
timeout-minutes: 30
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v4
|
|
40
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
41
|
+
with:
|
|
42
|
+
# Tarpaulin wants a recent nightly for the full surface; we
|
|
43
|
+
# don't need that and stable works for lib + bins.
|
|
44
|
+
components: rustfmt
|
|
45
|
+
- name: Install protoc + python3-dev
|
|
46
|
+
run: |
|
|
47
|
+
sudo apt-get update
|
|
48
|
+
sudo apt-get install -y protobuf-compiler python3-dev
|
|
49
|
+
- uses: Swatinem/rust-cache@v2
|
|
50
|
+
with:
|
|
51
|
+
shared-key: coverage-tarpaulin-${{ runner.os }}
|
|
52
|
+
cache-on-failure: true
|
|
53
|
+
- name: Install cargo-tarpaulin
|
|
54
|
+
run: cargo install cargo-tarpaulin --locked --version '^0.32'
|
|
55
|
+
- name: Run tarpaulin
|
|
56
|
+
# `--lib --bins` keeps coverage scoped to production code (not
|
|
57
|
+
# `#[cfg(test)]` test modules). `--skip-clean` lets the cached
|
|
58
|
+
# build artifacts survive between tarpaulin passes. `--timeout
|
|
59
|
+
# 180` (per-fn) is generous for the slowest instrumented
|
|
60
|
+
# functions. Best-effort: report failure doesn't break anything
|
|
61
|
+
# — the JSON artifact is still uploaded for inspection.
|
|
62
|
+
continue-on-error: true
|
|
63
|
+
run: |
|
|
64
|
+
mkdir -p coverage
|
|
65
|
+
cargo tarpaulin --lib --bins --skip-clean --timeout 180 \
|
|
66
|
+
--out Html --out Json --output-dir coverage 2>&1 | tail -40
|
|
67
|
+
echo "--- tarpaulin-report.json (head) ---"
|
|
68
|
+
head -50 coverage/tarpaulin-report.json 2>/dev/null || echo "(no report)"
|
|
69
|
+
- name: Per-file 80% line coverage check
|
|
70
|
+
continue-on-error: true
|
|
71
|
+
run: make test-coverage-check 2>&1 | tail -20
|
|
72
|
+
- name: Upload coverage artifacts
|
|
73
|
+
if: always()
|
|
74
|
+
uses: actions/upload-artifact@v4
|
|
75
|
+
with:
|
|
76
|
+
name: coverage-results
|
|
77
|
+
path: |
|
|
78
|
+
coverage/tarpaulin-report.json
|
|
79
|
+
coverage/coverage.html
|
|
80
|
+
if-no-files-found: ignore
|
|
81
|
+
retention-days: 90
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Perf regression gate.
|
|
2
|
+
#
|
|
3
|
+
# How it works:
|
|
4
|
+
# - The criterion baseline (target/criterion/**/main/) is refreshed on every
|
|
5
|
+
# push to the default branch via `make bench-save`, and persisted with
|
|
6
|
+
# actions/cache.
|
|
7
|
+
# - Pull requests restore that baseline and run `make perf-tuning-quick`,
|
|
8
|
+
# which benches core_ops + cascade_scope and invokes perf_summarize with
|
|
9
|
+
# --fail-on-regression: any bench whose 95% CI lower bound regresses by
|
|
10
|
+
# >= 15% exits non-zero and fails the job.
|
|
11
|
+
#
|
|
12
|
+
# Bench noise note: CI runners are shared/noisy. The 15% + CI-bound verdict is
|
|
13
|
+
# deliberately conservative; a FAIL should first be reproduced locally with
|
|
14
|
+
# `make perf-tuning-quick` before treating it as real.
|
|
15
|
+
name: perf
|
|
16
|
+
|
|
17
|
+
on:
|
|
18
|
+
pull_request:
|
|
19
|
+
push:
|
|
20
|
+
branches: [master]
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
bench:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
timeout-minutes: 45
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
|
|
30
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
31
|
+
|
|
32
|
+
# build.rs runs tonic_prost_build; the Ubuntu runner image does not
|
|
33
|
+
# ship protoc, so install it before any cargo invocation.
|
|
34
|
+
- name: Install protoc
|
|
35
|
+
uses: arduino/setup-protoc@v3
|
|
36
|
+
with:
|
|
37
|
+
version: "25.x"
|
|
38
|
+
|
|
39
|
+
# Cargo dep + build cache (separate from the criterion baseline cache).
|
|
40
|
+
# Cache key is stable across matrix renames but isolated from ci.yml's
|
|
41
|
+
# cache to avoid cross-job contamination.
|
|
42
|
+
- uses: Swatinem/rust-cache@v2
|
|
43
|
+
with:
|
|
44
|
+
shared-key: perf-bench-${{ runner.os }}
|
|
45
|
+
cache-on-failure: true
|
|
46
|
+
|
|
47
|
+
# Criterion baseline cache: PRs restore-only from the latest
|
|
48
|
+
# default-branch push; default-branch pushes refresh the cache. The
|
|
49
|
+
# restore/save split avoids the "PR saves stale copy-of-a-copy" foot-gun
|
|
50
|
+
# where later PRs would restore a PR-saved cache instead of the real
|
|
51
|
+
# main-branch baseline.
|
|
52
|
+
- name: Restore criterion baseline (PRs only)
|
|
53
|
+
if: github.event_name == 'pull_request'
|
|
54
|
+
uses: actions/cache@v4
|
|
55
|
+
with:
|
|
56
|
+
path: target/criterion
|
|
57
|
+
key: criterion-baseline-master
|
|
58
|
+
restore-keys: |
|
|
59
|
+
criterion-baseline-master
|
|
60
|
+
|
|
61
|
+
- name: Save criterion baseline (default branch only)
|
|
62
|
+
if: github.event_name == 'push'
|
|
63
|
+
uses: actions/cache/save@v4
|
|
64
|
+
with:
|
|
65
|
+
path: target/criterion
|
|
66
|
+
key: criterion-baseline-master
|
|
67
|
+
|
|
68
|
+
- name: Run benches + refresh baseline (default branch)
|
|
69
|
+
if: github.event_name == 'push'
|
|
70
|
+
run: make bench-save
|
|
71
|
+
|
|
72
|
+
- name: Perf regression gate (PR)
|
|
73
|
+
if: github.event_name == 'pull_request'
|
|
74
|
+
run: make perf-tuning-quick
|
|
75
|
+
|
|
76
|
+
- name: Upload perf results
|
|
77
|
+
if: always()
|
|
78
|
+
uses: actions/upload-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
name: perf-tuning-results
|
|
81
|
+
path: tests/results/perf-tuning/
|
|
82
|
+
if-no-files-found: ignore
|
|
83
|
+
retention-days: 14
|