v0.1.7
ci / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m23s
ci / recommender (push) Successful in 38s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (services/api/Dockerfile, api, api) (push) Successful in 51s
ci / api (push) Successful in 58s
ci / ts (packages + web) (push) Successful in 39s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (apps/web/Dockerfile, web, ) (push) Successful in 45s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (services/api/Dockerfile, storage-agent, storage-agent) (push) Successful in 53s
ci / docker (образы собираются — их сервер собирает сам при обновлении) (services/recommender/Dockerfile, recommender, ) (push) Successful in 28s
ci / mobile (Metro-бандл Android) (push) Failing after 38s
release / verify (push) Successful in 1m17s
release / android + release (push) Failing after 12m33s
pnpm 11 ignores node-linker=hoisted in .npmrc, so node_modules uses the
isolated layout. Expo evaluates expo's react-native.config.js through the
apps/mobile/node_modules/expo symlink, where require('expo-modules-autolinking')
fails silently; autolinking then guessed the import from the Gradle namespace
(expo.core.ExpoModulesPackage) and the release Java compile failed.
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) и релиз по тегу (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" 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: проверки → подписанный APK → Gitea Release.
Docker-образы не публикуются: сервер клонирует репозиторий и собирает их сам (deploy/update.sh,
docs/install-guide.md). Нужные секреты — в шапке workflow и в docs/ci-cd.md.
Releases
30
Pipu Music 1.11.4
Latest
Languages
TypeScript
47.7%
Go
37.4%
Python
6.6%
CSS
4.1%
JavaScript
2%
Other
2.2%