feat: M0 monorepo skeleton with services, clients, deploy and CI
ci / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 3m55s
ci / api (push) Successful in 51s
ci / mobile (Metro-бандл Android) (push) Canceled after 0s
release / images (services/api/Dockerfile, storage-agent, storage-agent) (push) Canceled after 0s
release / images (services/recommender/Dockerfile, recommender, ) (push) Canceled after 0s
ci / recommender (push) Successful in 1m11s
ci / ts (packages + web) (push) Canceled after 3s
release / verify (push) Successful in 1m16s
release / images (apps/web/Dockerfile, web, ) (push) Failing after 2m40s
release / android + release (push) Skipped
release / images (services/api/Dockerfile, api, api) (push) Canceled after 1s
ci / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 3m55s
ci / api (push) Successful in 51s
ci / mobile (Metro-бандл Android) (push) Canceled after 0s
release / images (services/api/Dockerfile, storage-agent, storage-agent) (push) Canceled after 0s
release / images (services/recommender/Dockerfile, recommender, ) (push) Canceled after 0s
ci / recommender (push) Successful in 1m11s
ci / ts (packages + web) (push) Canceled after 3s
release / verify (push) Successful in 1m16s
release / images (apps/web/Dockerfile, web, ) (push) Failing after 2m40s
release / android + release (push) Skipped
release / images (services/api/Dockerfile, api, api) (push) Canceled after 1s
- api/openapi.yaml: contract with /healthz, /readyz, /api/v1/server-info - services/api (Go): api with oapi-codegen strict server, goose migrations, readiness checks for Postgres/Redis; storage-agent stub with internal token - services/recommender (Python, uv): FastAPI health/readiness/internal status, `pipu-rec serve` and `pipu-rec analyze` entrypoints - packages: generated api-client, core (server URL + server check), i18n (ru/en + dictionary check), design-tokens (CSS vars + TS from tokens.json) - apps/web: Vite + React shell showing server status, language switch - apps/mobile: Expo (SDK 53) Android app with server connect screen - deploy: Dockerfiles, compose (prod + dev), nginx template, install/update scripts - .gitea/workflows: ci.yml and tag-based release.yml (images, signed APK, release) - scripts/version.mjs: version and Android versionCode from git tag - tests/fixtures/music/generate.sh: synthetic test library via ffmpeg - docs: versionCode formula, OpenAPI 3.0.3, dev instructions in README Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9eb1c25147
commit
ebf296542c
98 files changed
+12130
-4
No files matched your search
@@ -0,0 +1,129 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Pipu Music API
|
||||
version: 0.1.0
|
||||
description: |
|
||||
Публичный REST API Pipu Music. Источник истины для сервера (oapi-codegen)
|
||||
и клиентов (openapi-typescript). Соглашения — docs/api.md.
|
||||
servers:
|
||||
- url: /
|
||||
tags:
|
||||
- name: system
|
||||
paths:
|
||||
/healthz:
|
||||
get:
|
||||
operationId: getHealthz
|
||||
tags: [system]
|
||||
summary: Живость процесса
|
||||
responses:
|
||||
"200":
|
||||
description: Процесс жив
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/HealthStatus"
|
||||
/readyz:
|
||||
get:
|
||||
operationId: getReadyz
|
||||
tags: [system]
|
||||
summary: Готовность обслуживать запросы (зависимости доступны)
|
||||
responses:
|
||||
"200":
|
||||
description: Все зависимости доступны
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ReadyStatus"
|
||||
"503":
|
||||
description: Одна или несколько зависимостей недоступны
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ReadyStatus"
|
||||
/api/v1/server-info:
|
||||
get:
|
||||
operationId: getServerInfo
|
||||
tags: [system]
|
||||
summary: Сведения о сервере для клиентов
|
||||
description: |
|
||||
Вызывается без аутентификации: веб и Android проверяют версию сервера,
|
||||
совместимость клиента и поддерживаемые языки (экран подключения).
|
||||
responses:
|
||||
"200":
|
||||
description: Сведения о сервере
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ServerInfo"
|
||||
default:
|
||||
$ref: "#/components/responses/Problem"
|
||||
components:
|
||||
responses:
|
||||
Problem:
|
||||
description: Ошибка (RFC 9457)
|
||||
content:
|
||||
application/problem+json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/Problem"
|
||||
schemas:
|
||||
HealthStatus:
|
||||
type: object
|
||||
required: [status]
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
enum: [ok]
|
||||
ReadyStatus:
|
||||
type: object
|
||||
required: [status, checks]
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
enum: [ok, degraded]
|
||||
checks:
|
||||
type: object
|
||||
description: Результат проверки каждой зависимости
|
||||
additionalProperties:
|
||||
type: string
|
||||
description: "`ok` или текст ошибки"
|
||||
ServerInfo:
|
||||
type: object
|
||||
required: [name, version, api_version, supported_locales, min_android_version_code]
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
example: pipu-music
|
||||
version:
|
||||
type: string
|
||||
description: Версия сервера (SemVer)
|
||||
example: 0.1.0
|
||||
api_version:
|
||||
type: string
|
||||
example: v1
|
||||
supported_locales:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: [ru, en]
|
||||
min_android_version_code:
|
||||
type: integer
|
||||
description: Минимальный versionCode Android-приложения, которое поддерживает сервер
|
||||
example: 10099
|
||||
Problem:
|
||||
type: object
|
||||
required: [status, code]
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
default: about:blank
|
||||
status:
|
||||
type: integer
|
||||
code:
|
||||
type: string
|
||||
description: Машинный код ошибки для i18n, например `auth.invalid_credentials`
|
||||
detail:
|
||||
type: string
|
||||
description: Пояснение для логов (не для показа пользователю)
|
||||
params:
|
||||
type: object
|
||||
additionalProperties: true
|
||||
Reference in new issue
Block a user