A hard reboot of the runner VM mid-build left broken transform metadata
in the persistent Gradle cache ("Could not read workspace metadata").
The APK step now detects it, drops the transforms cache and retries the
build once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pipu-music
Self-hosted музыкальный сервис: веб и Android-приложение, библиотека на NFS, умная бесконечная лента «Моя волна» с учётом вкуса, звучания треков и настроения.
- Идея продукта: docs/IDEA.md
- Документация для разработки: docs/README.md
- План: docs/roadmap.md
- Установка сервера на свой домен: docs/install-guide.md
Структура
| Путь | Что |
|---|---|
api/openapi.yaml |
Контракт публичного API — источник истины для сервера и клиентов |
services/api |
Go: публичный API (cmd/api) и агент хранилищ (cmd/storage-agent) |
services/recommender |
Python: рекомендации (pipu-rec serve) и аудиоанализ (pipu-rec analyze) |
apps/web |
Веб-клиент (React + Vite) |
apps/mobile |
Android-приложение (React Native + Expo) |
packages/* |
Общий TS-код: api-client, core, i18n, design-tokens |
deploy/ |
Docker Compose, nginx, скрипты установки и обновления |
tests/fixtures/music |
Генератор тестовой библиотеки (нужен ffmpeg) |
.gitea/workflows |
CI по областям (ci-*.yml, docker.yml) и релиз по тегу (release.yml) |
Разработка
Нужны: Go 1.24+, Node 22 + pnpm 11, uv, Docker; для Android — JDK 17 и Android SDK.
pnpm install
docker compose -f deploy/compose.dev.yaml up -d
API (из services/api):
DATABASE_URL="postgres://pipu:pipu@localhost:5432/pipu?sslmode=disable" REDIS_URL="redis://localhost:6379/0" MEILI_URL="http://localhost:7700" MEILI_MASTER_KEY="dev-master-key-change-me" LIBRARY_HOST_ROOT="$PWD/../../tests/fixtures/music/out" X_ACCEL=false CACHE_DIR="$PWD/.cache" go run ./cmd/api
Веб на http://localhost:5173 (проксирует /api на :8080):
pnpm --filter @pipu/web dev
Проверки — те же, что в CI:
pnpm typecheck && pnpm test && pnpm i18n:check && pnpm test:scripts
cd services/api && go vet ./... && go test ./...
cd services/recommender && uv run ruff check . && uv run mypy pipu_rec && uv run pytest
После изменения api/openapi.yaml или packages/design-tokens/tokens.json перегенерируйте код и закоммитьте результат:
pnpm generate && (cd services/api && go generate ./...)
Релиз
Тег vX.Y.Z (или vX.Y.Z-rc.N) запускает .gitea/workflows/release.yml: Gitea Release с заметками → подписанный APK докладывается в него.
Docker-образы не публикуются: сервер клонирует репозиторий и собирает их сам (deploy/update.sh,
docs/install-guide.md). Нужные секреты — в шапке workflow и в docs/ci-cd.md.