# Проверки на каждый push в main и на каждый PR (docs/ci-cd.md). name: ci on: push: branches: [main] pull_request: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true env: GO_VERSION: "1.24" NODE_VERSION: "22" jobs: contract: name: contract (сгенерированный код совпадает с openapi.yaml) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: { go-version: "${{ env.GO_VERSION }}", cache-dependency-path: services/api/go.sum } - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: { node-version: "${{ env.NODE_VERSION }}", cache: pnpm } - run: pnpm install --frozen-lockfile - name: Регенерация Go-сервера, TS-клиента и дизайн-токенов run: | (cd services/api && go generate ./...) pnpm generate - name: Проверка, что всё закоммичено run: git diff --exit-code -- services/api/internal/api/gen packages api: runs-on: ubuntu-latest defaults: { run: { working-directory: services/api } } steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: { go-version: "${{ env.GO_VERSION }}", cache-dependency-path: services/api/go.sum } - run: test -z "$(gofmt -l .)" || (gofmt -l . && exit 1) - run: go vet ./... - run: go test -race -coverprofile=coverage.out ./... - run: go build ./cmd/... recommender: runs-on: ubuntu-latest defaults: { run: { working-directory: services/recommender } } steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v6 with: { version: "0.10.2", enable-cache: true, cache-dependency-glob: services/recommender/uv.lock } - run: uv sync --frozen - run: uv run ruff check . - run: uv run ruff format --check . - run: uv run mypy pipu_rec - run: uv run pytest -q ts: name: ts (packages + web) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: { node-version: "${{ env.NODE_VERSION }}", cache: pnpm } - run: pnpm install --frozen-lockfile - run: pnpm i18n:check - run: pnpm test:scripts - run: pnpm typecheck - run: pnpm test - run: pnpm --filter @pipu/web build mobile: name: mobile (Metro-бандл Android) runs-on: ubuntu-latest defaults: { run: { working-directory: apps/mobile } } steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: { node-version: "${{ env.NODE_VERSION }}", cache: pnpm } - run: pnpm install --frozen-lockfile - run: npx expo-doctor - run: npx expo export --platform android --output-dir dist