From a0fcc0c8d19d212e5b24cbcc3563ddcbb36d88cd Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Thu, 3 Jul 2025 21:08:00 -0400 Subject: [PATCH] Speed up GitHub Actions tests with parallelization (#3107) - Add pytest-xdist and pytest-split to dev dependencies for parallel test execution - Split tests into 8 parallel groups per Python version for better distribution - Enable CPU-level parallelization with -n auto to maximize resource usage - Add fail-fast strategy and maxfail=3 to stop early on failures - Add job name to match branch protection rules - Reduce test timeout from default to 30s for faster failure detection - Remove redundant cache configuration --- .github/workflows/tests.yml | 20 ++++++++++++++++++-- pyproject.toml | 2 ++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ea69d01d0..86c0d374a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,14 +7,18 @@ permissions: env: OPENAI_API_KEY: fake-api-key + PYTHONUNBUFFERED: 1 jobs: tests: + name: tests (${{ matrix.python-version }}) runs-on: ubuntu-latest timeout-minutes: 15 strategy: + fail-fast: true matrix: python-version: ['3.10', '3.11', '3.12', '3.13'] + group: [1, 2, 3, 4, 5, 6, 7, 8] steps: - name: Checkout code uses: actions/checkout@v4 @@ -23,6 +27,9 @@ jobs: uses: astral-sh/setup-uv@v3 with: enable-cache: true + cache-dependency-glob: | + **/pyproject.toml + **/uv.lock - name: Set up Python ${{ matrix.python-version }} run: uv python install ${{ matrix.python-version }} @@ -30,5 +37,14 @@ jobs: - name: Install the project run: uv sync --dev --all-extras - - name: Run tests - run: uv run pytest --block-network --timeout=60 -vv + - name: Run tests (group ${{ matrix.group }} of 8) + run: | + uv run pytest \ + --block-network \ + --timeout=30 \ + -vv \ + --splits 8 \ + --group ${{ matrix.group }} \ + --durations=10 \ + -n auto \ + --maxfail=3 diff --git a/pyproject.toml b/pyproject.toml index 826aaee47..111d738a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -83,6 +83,8 @@ dev-dependencies = [ "pytest-recording>=0.13.2", "pytest-randomly>=3.16.0", "pytest-timeout>=2.3.1", + "pytest-xdist>=3.6.1", + "pytest-split>=0.9.0", ] [project.scripts]