ci / api (push) Successful in 50s
ci / recommender (push) Successful in 37s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (apps/web/Dockerfile, web, ) (push) Successful in 44s
release / android + release (push) Failing after 53s
ci / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 45s
ci / ts (packages + web) (push) Successful in 37s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (services/api/Dockerfile, api, api) (push) Successful in 1m30s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (services/api/Dockerfile, storage-agent, storage-agent) (push) Successful in 52s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (services/recommender/Dockerfile, recommender, ) (push) Successful in 28s
ci / mobile (Metro-бандл Android) (push) Successful in 49s
release / verify (push) Successful in 1m14s
- deploy/compose.yaml: every app service has `build:` (repo root context), local tags pipu-music-<service>:<version> - deploy/update.sh: git fetch → checkout tag (latest release by default, or vX.Y.Z / main) → docker compose build --pull → up -d → prune → /readyz; re-executes from a temp copy because checkout may replace the script - install.sh / .env.example: no REGISTRY, PIPU_VERSION set by update.sh, .env owned by the invoking user - release.yml: drop image publishing; release ships APK + sha256 only - ci.yml: new `docker` job builds all images without push - docs: install guide uses git clone, deployment/ci-cd updated, ADR-013 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
109 lines
3.8 KiB
YAML
109 lines
3.8 KiB
YAML
# Проверки на каждый 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
|
|
|
|
docker:
|
|
name: docker (образы собираются — их сервер собирает сам при обновлении)
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- { name: api, dockerfile: services/api/Dockerfile, target: api }
|
|
- { name: storage-agent, dockerfile: services/api/Dockerfile, target: storage-agent }
|
|
- { name: recommender, dockerfile: services/recommender/Dockerfile, target: "" }
|
|
- { name: web, dockerfile: apps/web/Dockerfile, target: "" }
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: docker/setup-buildx-action@v3
|
|
- uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
file: ${{ matrix.dockerfile }}
|
|
target: ${{ matrix.target }}
|
|
push: false
|
|
build-args: VERSION=ci
|
|
|
|
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
|