@@ -13,14 +13,26 @@ jobs:
1313 runs-on : ubuntu-latest
1414 container :
1515 image : python:3.12-bookworm
16+ env :
17+ UV_LINK_MODE : copy
18+ UV_CACHE_DIR : /github/home/.cache/uv
1619 permissions :
20+ actions : write
1721 contents : read
1822 checks : write
1923
2024 steps :
2125 - name : Checkout code
2226 uses : actions/checkout@v4
2327
28+ - name : Cache uv downloads/builds
29+ uses : actions/cache@v5
30+ with :
31+ path : /github/home/.cache/uv
32+ key : uvcache-${{ runner.os }}-${{ hashFiles('uv.lock', 'pyproject.toml') }}
33+ restore-keys : |
34+ uvcache-${{ runner.os }}-
35+
2436 - name : Add Debian sid repository
2537 run : |
2638 echo "deb http://deb.debian.org/debian sid main" >> /etc/apt/sources.list.d/sid.list
@@ -29,18 +41,26 @@ jobs:
2941 - name : Install system dependencies
3042 run : |
3143 apt-get update
44+ # Ensure /etc/os-release exists (required by some actions' OS detection).
45+ apt-get install -y base-files
3246 apt-get install -y build-essential pkg-config libbz2-dev
3347 apt-get install -y -t sid libmapnik-dev fonts-noto-cjk
3448
3549 - name : Install uv
36- uses : astral-sh/setup-uv@v4
50+ uses : astral-sh/setup-uv@v7
3751 with :
38- enable-cache : true
39- cache-dependency-glob : " uv.lock"
52+ # Work around container-job failures determining Linux distribution during
53+ # setup-uv's built-in caching path; we cache UV_CACHE_DIR ourselves above.
54+ enable-cache : false
4055
4156 - name : Install Python dependencies and build package
4257 run : |
43- uv sync --frozen --verbose || uv sync --verbose
58+ # Use lockfile when present; avoid doing two full syncs (which can rebuild twice).
59+ if [ -f uv.lock ]; then
60+ uv sync --extra test --frozen --verbose
61+ else
62+ uv sync --extra test --verbose
63+ fi
4464
4565 - name : Run tests with coverage
4666 run : |
0 commit comments