ci: parallelize integration suite with pytest-xdist; fast PR gate + full coverage on merge
CI / lint (pull_request) Failing after 0s
CI / build-and-test (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
CI / lint (pull_request) Failing after 0s
CI / build-and-test (pull_request) Skipped
CI / sanitizers (address) (pull_request) Skipped
CI / sanitizers (undefined) (pull_request) Skipped
CI / fuzz-build (pull_request) Skipped
CI / coverage (pull_request) Skipped
CI / valgrind (pull_request) Skipped
- Add pytest-xdist to the CI Dockerfile (image -> v10). - Worker-isolate TEST_DATA_DIR (PYTEST_XDIST_WORKER) so concurrent xdist workers never collide on shared-filesystem fixtures. - Register a 'ci' marker and tag a fast representative subset of integration tests (basic TCP, incremental, compression, delete, basis, append). - ci.yaml: lint + build + unit + the marked subset (-n4) on every PR; the full integration suite plus sanitizer/fuzz/coverage/valgrind run only on push to dev/main. - Integration step runtime drops from ~860s (serial) to ~230s (-n4); the PR gate lands well under ~3 minutes.
This commit is contained in:
@@ -13,7 +13,12 @@ PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..
|
||||
BUILD_DIR = os.path.join(PROJECT_ROOT, "build")
|
||||
SERVER_CMD = [os.path.join(BUILD_DIR, "server")]
|
||||
CLIENT_CMD = [os.path.join(BUILD_DIR, "client")]
|
||||
TEST_DATA_DIR = os.path.join(PROJECT_ROOT, "test_data")
|
||||
# Under pytest-xdist each worker process gets its own PYTEST_XDIST_WORKER id
|
||||
# ('gw0', 'gw1', ...). Worker-key the transient working dir so concurrent
|
||||
# workers on the shared filesystem never collide on fixtures. Outside xdist
|
||||
# (or with -n1) this stays the historical 'test_data' path.
|
||||
_WORKER = os.environ.get("PYTEST_XDIST_WORKER")
|
||||
TEST_DATA_DIR = os.path.join(PROJECT_ROOT, f"test_data-{_WORKER}" if _WORKER else "test_data")
|
||||
|
||||
|
||||
class ServerManager:
|
||||
|
||||
Reference in New Issue
Block a user