feat: add delta benchmark script and CI integration for testing efficiency monitoring

This commit is contained in:
aliowka 2026-06-17 01:12:55 +03:00
parent 3cc4cda13f
commit 16587d9abf
3 changed files with 218 additions and 43 deletions

View File

@ -1,43 +0,0 @@
name: DeltaTest
on:
push:
branches: master
pull_request:
branches: master
permissions:
contents: read
checks: write
jobs:
deltatest:
name: DeltaTest Runner
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0 # DeltaTest requires the full Git history to calculate diffs and find affected tests
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f docs/requirements.txt ]; then pip install -r docs/requirements.txt || echo "docs/requirements install failed, continuing"; fi
pip install --no-cache-dir pytest twisted deltatest-cli
pip install -e .
- name: Run Affected Tests
env:
DELTA_API_KEY: ${{ secrets.DELTA_API_KEY }}
DELTA_REPO_ID: ${{ secrets.DELTA_REPO_ID }}
run: |
delta run

118
.github/workflows/deltatest.yml vendored Normal file
View File

@ -0,0 +1,118 @@
name: Delta Smart Tests
on:
push:
branches:
- master
- '[0-9]+.[0-9]+'
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
delta:
name: Delta affected tests only
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
# Fetch full history so Delta can diff against the base branch
fetch-depth: 0
- name: Set up Python 3.13
uses: actions/setup-python@v6
with:
python-version: "3.13"
# ── System libraries (same condition as tests-ubuntu.yml) ────────────
- name: Install system libraries
run: |
sudo apt-get update
sudo apt-get install -y libxml2-dev libxslt-dev
# ── Scrapy + all runtime deps (from pyproject.toml [project].dependencies) ──
- name: Install Scrapy and runtime dependencies
run: |
pip install -U pip
pip install -e .
# ── Core test dependencies (from tox.ini [test-requirements]) ────────
- name: Install test dependencies
run: |
pip install \
"pytest>=8.4.1" \
"pytest-cov>=7.0.0" \
pytest-xdist \
pytest-twisted>=1.14.3 \
attrs \
"coverage>=7.10.6" \
httpx \
"pexpect>=4.8.0" \
pygments \
"pyftpdlib>=2.0.1" \
"sybil>=1.3.0" \
testfixtures
# ── Extra optional deps (mirrors tox.ini [testenv:extra-deps]) ───────
# Included so Delta can map tests that import these packages.
- name: Install optional/extra test dependencies
run: |
pip install \
Pillow \
"Twisted[http2]" \
boto3 \
"brotli>=1.2.0" \
google-cloud-storage \
"httpx[http2,socks]" \
ipython \
robotexclusionrulesparser \
uvloop \
zstandard \
pytest-asyncio
# ── Delta CLI ─────────────────────────────────────────────────────────
- name: Install Delta
run: pip install deltatest-cli
# ── Run only tests affected by this diff ─────────────────────────────
- name: Run Delta (affected tests only)
env:
DELTA_API_KEY: ${{ secrets.DELTA_API_KEY }}
run: |
BASE=${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'master' }}
echo "Diffing against: origin/${BASE}"
delta run \
--base-branch "origin/${BASE}" \
-- \
--cov-config=pyproject.toml \
--cov=scrapy \
--cov-report= \
--cov-report=term-missing \
--cov-report=xml \
--junitxml=delta.junit.xml \
-o junit_family=legacy \
--durations=10 \
scrapy tests \
--doctest-modules
# ── Push updated mapping back to Delta Cloud ──────────────────────────
- name: Push mapping to Delta Cloud
if: always()
env:
DELTA_API_KEY: ${{ secrets.DELTA_API_KEY }}
run: delta push
# ── Upload results ────────────────────────────────────────────────────
- name: Upload coverage report
if: always()
uses: codecov/codecov-action@v5
- name: Upload test results
if: always()
uses: codecov/codecov-action@v5
with:
report_type: test_results
files: delta.junit.xml

View File

@ -11,7 +11,107 @@ concurrency:
cancel-in-progress: true
jobs:
# ── Delta pre-check ────────────────────────────────────────────────────────
# Runs only the tests affected by the diff. The full matrix below is gated
# behind this job if Delta fails, the expensive tox runners never start.
delta:
name: Delta affected tests only
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up Python 3.13
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install system libraries
run: |
sudo apt-get update
sudo apt-get install -y libxml2-dev libxslt-dev
- name: Install Scrapy and runtime dependencies
run: |
pip install -U pip
pip install -e .
- name: Install test dependencies
run: |
pip install \
"pytest>=8.4.1" \
"pytest-cov>=7.0.0" \
pytest-xdist \
"pytest-twisted>=1.14.3" \
attrs \
"coverage>=7.10.6" \
httpx \
"pexpect>=4.8.0" \
pygments \
"pyftpdlib>=2.0.1" \
"sybil>=1.3.0" \
testfixtures
- name: Install optional/extra test dependencies
run: |
pip install \
Pillow \
"Twisted[http2]" \
boto3 \
"brotli>=1.2.0" \
google-cloud-storage \
"httpx[http2,socks]" \
ipython \
robotexclusionrulesparser \
uvloop \
zstandard \
pytest-asyncio
- name: Install Delta
run: pip install deltatest-cli
- name: Run Delta (affected tests only)
env:
DELTA_API_KEY: ${{ secrets.DELTA_API_KEY }}
run: |
BASE=${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'master' }}
echo "Diffing against: origin/${BASE}"
delta run \
--base-branch "origin/${BASE}" \
-- \
--cov-config=pyproject.toml \
--cov=scrapy \
--cov-report= \
--cov-report=term-missing \
--cov-report=xml \
--junitxml=delta.junit.xml \
-o junit_family=legacy \
--durations=10 \
scrapy tests \
--doctest-modules
- name: Push mapping to Delta Cloud
if: always()
env:
DELTA_API_KEY: ${{ secrets.DELTA_API_KEY }}
run: delta push
- name: Upload coverage report
if: always()
uses: codecov/codecov-action@v5
- name: Upload test results
if: always()
uses: codecov/codecov-action@v5
with:
report_type: test_results
files: delta.junit.xml
# ── Full tox matrix ────────────────────────────────────────────────────────
# Only starts after Delta passes.
tests:
needs: delta
runs-on: ubuntu-latest
env:
PYTEST_ADDOPTS: -n auto