10e1075d5d
Новый push в PR отменяет ещё бегущий typecheck той же ветки — прежде 30-минутные прогоны копились очередью. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
105 lines
5.0 KiB
YAML
105 lines
5.0 KiB
YAML
name: Typecheck
|
||
|
||
# Валидация TypeScript-типов для desktop (Vue 3 + Quasar) и controller (NestJS).
|
||
#
|
||
# Зачем это отдельный workflow:
|
||
# 1. `quasar build --mode ssr` в release.yaml использует Vite/esbuild и
|
||
# vue-tsc отключён через vite-plugin-checker (см. quasar.config.cjs):
|
||
# TS-ошибки в .vue/.ts НЕ ловятся при docker build образа desktop.
|
||
# 2. У `@coopenomics/controller` нет build-скрипта вовсе — `lerna run build`
|
||
# его молча пропускает; в проде `ts-node` стартует и валится на типах
|
||
# только в рантайме при загрузке модуля. Кейс PR #392 (rename 1080→1020
|
||
# в cooptypes) проскочил именно так.
|
||
#
|
||
# Триггеры:
|
||
# - pull_request на dev — гейт перед мерджем в основную ветку;
|
||
# - workflow_call — оставлен для переиспользования, но release.yaml его
|
||
# больше НЕ вызывает (гейт из релиза убран как избыточный — типы
|
||
# проверяются на PR в dev до того, как код доедет до тэга).
|
||
#
|
||
# Push в dev/testnet/main НЕ триггерит — намеренно (PR-гейт на dev достаточен).
|
||
|
||
on:
|
||
pull_request:
|
||
branches: [dev]
|
||
workflow_call:
|
||
|
||
# Новый push в PR-ветку отменяет ещё бегущий typecheck по той же ветке —
|
||
# иначе 30-минутные прогоны копятся очередью. Группа по head_ref (исходная
|
||
# ветка PR), для workflow_call fallback на ref. Отмена только своих же
|
||
# прежних прогонов, разные PR друг друга не трогают.
|
||
concurrency:
|
||
group: typecheck-${{ github.head_ref || github.ref }}
|
||
cancel-in-progress: true
|
||
|
||
jobs:
|
||
desktop:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- uses: pnpm/action-setup@v4
|
||
with:
|
||
version: 10.33.0
|
||
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: 22
|
||
cache: pnpm
|
||
|
||
- name: Install workspace
|
||
run: pnpm install --frozen-lockfile
|
||
|
||
# Полный lerna build по всему workspace — как в корневом Dockerfile.
|
||
# Не --scope, потому что workspace-пакеты unbuild-типа (sdk, inter,
|
||
# notifications, factory, cooptypes, …) экспортируют типы только из
|
||
# сгенерированного dist/. Без dist/ tsc/vue-tsc валятся на TS2307
|
||
# «Cannot find module». Локально это маскируется ts-node-ом, но в
|
||
# CI пути резолвятся через package.json → types → dist/.
|
||
# См. Graphiti / run #148 root cause 2026-05-23.
|
||
- name: Build all workspace packages
|
||
run: pnpm lerna run build
|
||
|
||
# quasar prepare генерирует .quasar/* (auto-imports d.ts, типы для
|
||
# quasar плагинов). Без него vue-tsc ругается на отсутствующие
|
||
# глобальные компоненты QBtn/QCard/etc.
|
||
- name: Quasar prepare
|
||
run: pnpm --filter @coopenomics/desktop run prepare
|
||
|
||
# vue-tsc проверяет и .ts, и <script lang="ts"> в .vue.
|
||
# --skipLibCheck — иначе валится на типах из транзитивных deps
|
||
# (Quasar/Vue/Vite сами по себе чистые, но в графе есть legacy).
|
||
# Из памяти: на dev-сервере висло ~час из-за конкуренции с quasar dev;
|
||
# на чистом ubuntu-latest без живого стека ожидаемо в разы быстрее.
|
||
# Если упрётся в OOM/таймаут — fallback на `pnpm typecheck`
|
||
# (tsc --noEmit --skipLibCheck без vue-tsc, без SFC шаблонов).
|
||
- name: vue-tsc (desktop)
|
||
run: pnpm --filter @coopenomics/desktop exec vue-tsc --noEmit --skipLibCheck
|
||
|
||
controller:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- uses: pnpm/action-setup@v4
|
||
with:
|
||
version: 10.33.0
|
||
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: 22
|
||
cache: pnpm
|
||
|
||
- name: Install workspace
|
||
run: pnpm install --frozen-lockfile
|
||
|
||
# Полный lerna build по всему workspace — controller импортирует
|
||
# @coopenomics/sdk, @coopenomics/inter, @coopenomics/notifications
|
||
# помимо cooptypes/factory; их dist/ генерируется unbuild и без
|
||
# этого шага tsc валится на 37 TS2307. См. root cause выше.
|
||
- name: Build all workspace packages
|
||
run: pnpm lerna run build
|
||
|
||
- name: tsc --noEmit (controller)
|
||
run: pnpm --filter @coopenomics/controller run typecheck
|