From 4e8086cc1f73b9e4f6dde3c91f56bdd033a2fe85 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Wed, 17 Jun 2026 22:29:33 +0300 Subject: [PATCH] ci: cache uv + skip dev deps to speed up gate jobs (#1709) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit backend-tests и openapi-codegen-check тратят ~90% времени не на работу (дамп схемы + pytest), а на пересборку окружения с нуля каждый прогон. Доминанта — 'uv sync --frozen' тянет весь geo/WeasyPrint-стек заново, т.к. ~/.cache/uv не кэшировался между прогонами (npm уже кэширован setup-node). Изменения: - Cache uv (~/.cache/uv) через actions/cache в обоих job, ключ по backend/uv.lock, restore-keys для частичного хита. continue-on-error → сбой cache-бэкенда раннера не ломает gate. - openapi-codegen-check: 'uv sync --frozen --no-dev' — job только импортирует app.main для дампа OpenAPI, dev-группа (pytest/ruff/coverage) не нужна. Dockerfile тоже --no-dev, поэтому импорт гарантирован. Refs #1709 --- .forgejo/workflows/ci.yml | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 78008735..ff1270b0 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -88,6 +88,19 @@ jobs: curl -LsSf https://astral.sh/uv/install.sh | sh echo "$HOME/.local/bin" >> "$GITHUB_PATH" + - name: Cache uv packages + # Кросс-прогонный кэш скачанных/собранных wheel'ов (~/.cache/uv по умолч.). + # `uv sync --frozen` без него каждый прогон тянет весь geo-стек заново — + # доминирующая часть времени job (#1709). Ключ по uv.lock; continue-on-error + # чтобы сбой cache-бэкенда раннера НИКОГДА не ронял gate. + uses: actions/cache@v4 + continue-on-error: true + with: + path: ~/.cache/uv + key: uv-${{ runner.os }}-${{ hashFiles('backend/uv.lock') }} + restore-keys: | + uv-${{ runner.os }}- + - name: Install system deps for geo + WeasyPrint # libpq/gdal/proj/geos — geo-стек (geopandas/shapely/pyproj). # libcairo2/libpango* — нативные либы WeasyPrint: с ними PDF-тесты @@ -229,6 +242,16 @@ jobs: curl -LsSf https://astral.sh/uv/install.sh | sh echo "$HOME/.local/bin" >> "$GITHUB_PATH" + - name: Cache uv packages + # См. backend-tests: кросс-прогонный кэш ~/.cache/uv, тот же ключ по uv.lock. + uses: actions/cache@v4 + continue-on-error: true + with: + path: ~/.cache/uv + key: uv-${{ runner.os }}-${{ hashFiles('backend/uv.lock') }} + restore-keys: | + uv-${{ runner.os }}- + - name: Install system deps for geo + WeasyPrint # app.main транзитивно тянет geo/PDF-модули. На macOS-dev импорт схемы # проходит и без этих либ, но на ubuntu ставим как backend-tests @@ -238,9 +261,12 @@ jobs: sudo apt-get install -y libpq-dev libgdal-dev libproj-dev libgeos-dev \ libcairo2 libpango-1.0-0 libpangoft2-1.0-0 - - name: Install backend deps (uv sync --frozen) + - name: Install backend deps (uv sync --frozen --no-dev) working-directory: backend - run: uv sync --frozen + # --no-dev: этот job только дампит app.openapi() (нужен runtime app.main). + # pytest/ruff/coverage не используются → не ставим dev-группу (быстрее). + # Dockerfile тоже собирает с --no-dev → импорт app.main гарантированно ок. + run: uv sync --frozen --no-dev - name: Install frontend deps (npm ci) working-directory: frontend -- 2.45.3