ci: cache turbo, npx and Metro; install web deps before copying code
- ci-ts restores the local turbo cache, so unchanged packages skip typecheck, test and build - ci-mobile caches the npx copy of expo-doctor and Metro's transform cache - the web image copies only workspace manifests before pnpm install, so the dependency layer survives code changes (CI docker job and update.sh) - docs: table of what is cached where Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a239650075
commit
633a8f79af
4 files changed
+40
-1
No files matched your search
@@ -39,5 +39,13 @@ jobs:
|
|||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with: { node-version: "22", cache: pnpm }
|
with: { node-version: "22", cache: pnpm }
|
||||||
- run: pnpm install --frozen-lockfile
|
- run: pnpm install --frozen-lockfile
|
||||||
|
# npx expo-doctor качает пакет в кэш npm; Metro хранит трансформации в /tmp/metro-cache
|
||||||
|
- uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.npm/_npx
|
||||||
|
/tmp/metro-cache
|
||||||
|
key: mobile-${{ hashFiles('pnpm-lock.yaml') }}-${{ github.sha }}
|
||||||
|
restore-keys: mobile-${{ hashFiles('pnpm-lock.yaml') }}-
|
||||||
- run: npx expo-doctor
|
- run: npx expo-doctor
|
||||||
- run: npx expo export --platform android --output-dir dist
|
- run: npx expo export --platform android --output-dir dist
|
||||||
@@ -40,6 +40,12 @@ jobs:
|
|||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with: { node-version: "22", cache: pnpm }
|
with: { node-version: "22", cache: pnpm }
|
||||||
- run: pnpm install --frozen-lockfile
|
- run: pnpm install --frozen-lockfile
|
||||||
|
# Локальный кэш turbo: typecheck/test/build пропускаются для пакетов, чьи входы не менялись
|
||||||
|
- uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: .turbo/cache
|
||||||
|
key: turbo-ts-${{ github.sha }}
|
||||||
|
restore-keys: turbo-ts-
|
||||||
- run: pnpm i18n:check
|
- run: pnpm i18n:check
|
||||||
- run: pnpm test:scripts
|
- run: pnpm test:scripts
|
||||||
- run: pnpm typecheck
|
- run: pnpm typecheck
|
||||||
|
|||||||
+10
-1
@@ -5,9 +5,18 @@
|
|||||||
FROM node:22-alpine AS build
|
FROM node:22-alpine AS build
|
||||||
RUN npm install -g pnpm@11.9.0
|
RUN npm install -g pnpm@11.9.0
|
||||||
WORKDIR /repo
|
WORKDIR /repo
|
||||||
COPY . .
|
# Сначала только манифесты workspace: слой с установкой зависимостей пересобирается лишь при их изменении,
|
||||||
|
# а не при любой правке кода. Новый пакет в apps/ или packages/ — добавить его package.json сюда.
|
||||||
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||||
|
COPY apps/web/package.json apps/web/
|
||||||
|
COPY apps/mobile/package.json apps/mobile/
|
||||||
|
COPY packages/api-client/package.json packages/api-client/
|
||||||
|
COPY packages/core/package.json packages/core/
|
||||||
|
COPY packages/design-tokens/package.json packages/design-tokens/
|
||||||
|
COPY packages/i18n/package.json packages/i18n/
|
||||||
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
|
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
|
||||||
pnpm install --frozen-lockfile --filter @pipu/web...
|
pnpm install --frozen-lockfile --filter @pipu/web...
|
||||||
|
COPY . .
|
||||||
# Сгенерированные клиенты и токены лежат в репозитории (их актуальность проверяет CI), поэтому generate здесь не нужен.
|
# Сгенерированные клиенты и токены лежат в репозитории (их актуальность проверяет CI), поэтому generate здесь не нужен.
|
||||||
RUN pnpm --filter @pipu/web build
|
RUN pnpm --filter @pipu/web build
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,22 @@ C++-сборка React Native). APK собирается только под `ar
|
|||||||
кэш слоёв переживает job, и повторная сборка занимает секунды. Кэш растёт — на хосте раннера раз в сутки:
|
кэш слоёв переживает job, и повторная сборка занимает секунды. Кэш растёт — на хосте раннера раз в сутки:
|
||||||
`docker builder prune -af --filter until=72h` (см. [настройку раннера](#настройка-раннера)).
|
`docker builder prune -af --filter until=72h` (см. [настройку раннера](#настройка-раннера)).
|
||||||
|
|
||||||
|
### Кэши
|
||||||
|
|
||||||
|
| Что | Где кэшируется | Чем |
|
||||||
|
|---|---|---|
|
||||||
|
| pnpm store | все job с `pnpm install` | `setup-node` `cache: pnpm` (кэш actions раннера) |
|
||||||
|
| Go-модули и build cache | `api`, `contract` | `setup-go` |
|
||||||
|
| uv | `recommender` | `setup-uv` `enable-cache` |
|
||||||
|
| Результаты turbo (typecheck, test, build) | `ts` | `actions/cache` для `.turbo/cache` |
|
||||||
|
| `npx expo-doctor`, трансформации Metro | `mobile` | `actions/cache` для `~/.npm/_npx` и `/tmp/metro-cache` |
|
||||||
|
| Слои Docker и `--mount=type=cache` | `docker`, сборка на сервере | Docker хоста; манифесты копируются раньше кода |
|
||||||
|
| Gradle (дистрибутив, зависимости, build cache), Android SDK и NDK | `android` в `release.yml` | тома `/opt/ci-cache/*` |
|
||||||
|
| Node, Go, Java, скачанные setup-action'ами | все job | том `act-toolcache` раннера |
|
||||||
|
|
||||||
|
Кэш actions работает, только если он включён на раннере ([настройка](#настройка-раннера)); без него в логах
|
||||||
|
`Cache action is only supported on GHES…`, и всё скачивается заново.
|
||||||
|
|
||||||
## `release.yml` — по тегу
|
## `release.yml` — по тегу
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|||||||
Reference in new issue
Block a user