From af1a90e76b9fc486e7fd68b031659f3ebbb0a774 Mon Sep 17 00:00:00 2001 From: Disco DeDisco Date: Tue, 12 May 2026 19:36:04 -0400 Subject: [PATCH] =?UTF-8?q?woodpecker=20main.yaml:=20A+B=20combined=20CI?= =?UTF-8?q?=20dependency=20speedup=20=E2=80=94=20test-UTs-n-ITs=20swaps=20?= =?UTF-8?q?image=20from=20`python:3.13-slim`=20to=20`gitea.earthmanrpg.me/?= =?UTF-8?q?discoman/python-tdd-ci:latest`=20(same=20image=20as=20the=20two?= =?UTF-8?q?=20FT=20steps)=20so=20all=203=20steps=20inherit=20the=20`requir?= =?UTF-8?q?ements.dev.txt`=20deps=20Dockerfile.ci=20already=20pre-installs?= =?UTF-8?q?;=20all=203=20steps=20switch=20`pip=20install=20-r=20requiremen?= =?UTF-8?q?ts.txt`=20=E2=86=92=20`pip=20install=20-r=20requirements.dev.tx?= =?UTF-8?q?t`=20so=20the=20install=20collapses=20to=20~5-10s=20of=20"alrea?= =?UTF-8?q?dy=20satisfied"=20verification=20per=20step=20(vs=20~30-60s=20o?= =?UTF-8?q?f=20unpinned=20PyPI=20resolver+download=20against=20requirement?= =?UTF-8?q?s.txt);=20~3-5=20min=20saved=20per=20pipeline=20run;=20drift=20?= =?UTF-8?q?safety=20net=20preserved=20=E2=80=94=20pip=20still=20installs?= =?UTF-8?q?=20deltas=20if=20requirements.dev.txt=20is=20ahead=20of=20the?= =?UTF-8?q?=20image,=20so=20a=20stale=20image=20doesn't=20break=20CI,=20it?= =?UTF-8?q?=20just=20runs=20slower=20until=20the=20image=20is=20rebuilt=20?= =?UTF-8?q?+=20pushed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Code architected by Disco DeDisco Git commit message Co-Authored-By: Claude Opus 4.7 (1M context) --- .woodpecker/main.yaml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.woodpecker/main.yaml b/.woodpecker/main.yaml index cefe6e2..c8b151b 100644 --- a/.woodpecker/main.yaml +++ b/.woodpecker/main.yaml @@ -11,19 +11,21 @@ services: steps: - name: test-UTs-n-ITs - image: python:3.13-slim + image: gitea.earthmanrpg.me/discoman/python-tdd-ci:latest environment: DATABASE_URL: postgresql://postgres:postgres@postgres/python_tdd_test CELERY_BROKER_URL: redis://redis:6379/0 REDIS_URL: redis://redis:6379/1 - # Workspace-shared pip cache — Woodpecker mounts the workspace across - # all steps in a run, so the wheels populated here are reused by - # test-two-browser-FTs + test-FTs (saves ~30-60s × 2 = ~1-2 min per - # run). Cache lives only inside one run; cross-run caching would - # need a volume plugin. PIP_CACHE_DIR: .pip-cache commands: - - pip install -r requirements.txt + # `requirements.dev.txt` is the pinned superset Dockerfile.ci pre- + # installs; pinning here means pip skips resolver+download and just + # verifies "already satisfied" (~5-10s) instead of resolving unpinned + # requirements.txt against PyPI from scratch (~30-60s). Drift safety + # net: if requirements.dev.txt has changed since the CI image was + # last rebuilt + pushed, pip installs the delta — slower for that + # run but never broken. See TDD SKILL.md § CI dependency discipline. + - pip install -r requirements.dev.txt - cd ./src - python manage.py test apps when: @@ -45,7 +47,7 @@ steps: from_secret: stripe_publishable_key PIP_CACHE_DIR: .pip-cache commands: - - pip install -r requirements.txt + - pip install -r requirements.dev.txt - cd ./src - python manage.py collectstatic --noinput - python manage.py test functional_tests --tag=two-browser @@ -70,7 +72,7 @@ steps: from_secret: stripe_publishable_key PIP_CACHE_DIR: .pip-cache commands: - - pip install -r requirements.txt + - pip install -r requirements.dev.txt - cd ./src - python manage.py collectstatic --noinput - python manage.py test functional_tests --parallel --exclude-tag=channels --exclude-tag=two-browser