Окружение разработки
Требования
Заголовок раздела «Требования»- Python 3.12+
- uv —
curl -LsSf https://astral.sh/uv/install.sh | sh - ffmpeg 6.1+ (для интеграционных тестов MA)
- macOS:
brew install ffmpeg - Ubuntu:
sudo apt-get install ffmpeg
- macOS:
- Форк trudenboy/ma-server (для dev-сервера)
Установка
Заголовок раздела «Установка»./scripts/setup.shПерезапускайте после git pull — версия моделей MA может измениться.
Запуск тестов
Заголовок раздела «Запуск тестов»# Только unit-тесты (быстро, без MA-сервера)pytest tests/ -m "not integration"
# Полный набор тестовpytest tests/
# С отчётом покрытияpytest --cov=provider --cov-report=html tests/Ежедневный рабочий процесс
Заголовок раздела «Ежедневный рабочий процесс»Наименование веток
Заголовок раздела «Наименование веток»feature/<описание> # новый функционалfix/<описание> # исправления баговchore/<описание> # обслуживание, обновление зависимостей<описание> — kebab-case, 2–4 слова. Примеры:
feature/radio-mode-supportfix/seek-position-resetchore/update-depsЖизненный цикл feature-ветки
Заголовок раздела «Жизненный цикл feature-ветки»# 1. Создать ветку от devgit checkout dev && git pullgit checkout -b feature/radio-mode-support
# 2. Разработка + тестыpytest tests/pre-commit run --all-files
# 3. PR: feature/* → devgit push origin feature/radio-mode-supportgh pr create --base dev --title "feat: add radio mode support"
# 4. CI проходит → merge → удалить веткуgit push origin --delete feature/radio-mode-supportЗапуск dev-сервера
Заголовок раздела «Запуск dev-сервера»Запускает Music Assistant с актуальным кодом провайдера (без Docker, изолированно от остальной работы):
./scripts/dev-server.sh# UI: http://localhost:8095Требует форк ma-server. Порядок обнаружения:
MA_SERVER_REPO=/path/to/ma-server ./scripts/dev-server.shecho "/path/to/ma-server" > ma-server.repo(gitignored)- Автообнаружение:
../ma-server,~/Projects/ma-server,~/src/ma-server,~/dev/ma-server
Качество кода
Заголовок раздела «Качество кода»pre-commit run --all-filesЗапускает: ruff (lint + format), mypy (проверка типов), codespell.
Conventional Commits
Заголовок раздела «Conventional Commits»Используются для автоматической генерации CHANGELOG:
feat: add radio mode supportfix: fix seek position resetchore: update zvuk dependenciestest: add streaming testПроцесс релиза
Заголовок раздела «Процесс релиза»- PR:
dev→main - Слияние в
main - Запустить Release workflow: Actions → Release → Run workflow → ввести версию (например
1.1.0) - Workflow создаёт тег и GitHub Release (с авто-сгенерированными release notes)
- Авто-создаётся sync-PR в trudenboy/ma-server
Устранение неполадок
Заголовок раздела «Устранение неполадок»sync-to-fork.yml падает — истёк FORK_SYNC_PAT
Обнови PAT (нужны права contents:write на trudenboy/ma-server) и обнови секрет:
gh secret set FORK_SYNC_PAT --body "$NEW_PAT" --repo trudenboy/ma-provider-zvuk-musicПорт 8095 занят
lsof -i :8095kill <PID>dev-server.sh не находит форк
# Вариант 1: переменная окруженияMA_SERVER_REPO=~/work/ma-server ./scripts/dev-server.sh
# Вариант 2: файл локального переопределения (gitignored)echo "~/work/ma-server" > ma-server.repoЧеклист E2E
Заголовок раздела «Чеклист E2E»Запускай перед upstream PR или крупным релизом:
- Провайдер подключается успешно
- Browse → Zvuk Music открывается, библиотека отображается
- Поиск треков/исполнителей/альбомов возвращает результаты
- Трек воспроизводится корректно, перемотка работает
- Избранные треки синхронизируются в библиотеку