Install and cache Python dependencies for poetry/uv/venv projects.
jobs:
dependencies:
uses: whisller/forge-ci/.github/workflows/forge-ci-python-tools-dependency-manager.yml@v1
with:
python-version: '3.12'
dependency-manager: 'poetry'| Input | Type | Required | Default | Description |
|---|---|---|---|---|
python-version |
string | No | '3.12' |
Python version to use |
working-directory |
string | No | '.' |
Working directory for dependency operations |
dependency-manager |
string | No | 'poetry' |
Dependency manager: poetry, uv, or venv |
poetry-version |
string | No | '2.2.0' |
Poetry version (if using poetry) |
uv-version |
string | No | '0.8' |
uv version (if using uv) |
runs-on |
string | No | 'ubuntu-latest' |
Runner to use |
| Output | Type | Description |
|---|---|---|
dependencies-cache-key |
string | Cache key for installed dependencies |
- Check Cache: Looks for existing cached dependencies
- Install Manager: Installs poetry/uv via pip if needed (venv is built-in)
- Install Dependencies: Installs project dependencies into
.venv/directory - Cache Dependencies: Saves
.venv/with composite cache key - Output Cache Key: Provides key for downstream jobs to restore cache
python-deps-{manager}-{os}-{python-version}-{lock-file-hash}
Example: python-deps-poetry-ubuntu-latest-3.12-a1b2c3d4
jobs:
dependencies:
uses: whisller/forge-ci/.github/workflows/forge-ci-python-tools-dependency-manager.yml@v1jobs:
dependencies:
uses: whisller/forge-ci/.github/workflows/forge-ci-python-tools-dependency-manager.yml@v1
with:
python-version: '3.11'
dependency-manager: 'uv'jobs:
dependencies:
uses: whisller/forge-ci/.github/workflows/forge-ci-python-tools-dependency-manager.yml@v1
with:
working-directory: 'services/api'
dependency-manager: 'poetry'jobs:
dependencies:
uses: whisller/forge-ci/.github/workflows/forge-ci-python-tools-dependency-manager.yml@v1
lint:
needs: dependencies
uses: whisller/forge-ci/.github/workflows/forge-ci-python-tools-ruff.yml@v1
with:
dependencies-cache-key: ${{ needs.dependencies.outputs.dependencies-cache-key }}pyproject.tomlmust existpoetry.lockmust exist and be up to date
pyproject.tomlmust existuv.lockmust exist
requirements.txtorrequirements-dev.txtmust exist
- Cache Hit: ~10-20 seconds (restore cached .venv)
- Cache Miss: ~1-3 minutes (full dependency installation)
- Cache Invalidation: Automatically invalidates when lock files change
Problem: Dependencies reinstall on every run.
Causes:
- Lock file changes between runs
- Different Python version
- Different runner OS
Solution: Ensure lock files are committed and up to date.
Problem: poetry.lock is out of sync with pyproject.toml.
Solution:
poetry lock --no-update
git add poetry.lock
git commit -m "chore: update poetry.lock"Problem: uv sync fails with "dependency resolution error".
Solution: Update uv.lock:
uv lock
git add uv.lock
git commit -m "chore: update uv.lock"