Спасибо за интерес к проекту! Мы рады любому вкладу - от исправления опечаток до добавления новых функций.
Нашли баг? Создайте Issue с подробным описанием.
Есть идея? Создайте Feature Request.
Заметили опечатку или неточность? Отправьте PR с исправлением!
Хотите добавить функцию или исправить баг? Следуйте инструкциям ниже.
# 1. Сделайте Fork репозитория на GitHub
# 2. Клонируйте свой fork
git clone https://github.com/YOUR-USERNAME/Votobu.git
cd Votobu
# 3. Добавьте upstream remote
git remote add upstream https://github.com/ORIGINAL-OWNER/Votobu.git# Создать виртуальное окружение (рекомендуется)
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/Mac
# Установить зависимости для разработки
pip install -r requirements-dev.txt# Создайте ветку для своих изменений
git checkout -b feature/my-awesome-feature
# или
git checkout -b fix/bug-descriptionПишите код, следуя стандартам проекта.
# Запустить тесты
python test_components.py
# Проверить линтером (если есть)
flake8 src/
black src/ --check
# Протестировать вручную
python src/main.py# Добавить изменения
git add .
# Commit с понятным сообщением
git commit -m "✨ Add feature: voice activation threshold"
# Push в ваш fork
git push origin feature/my-awesome-feature- Перейдите на GitHub
- Нажмите "New Pull Request"
- Заполните template
- Дождитесь review
Следуем PEP 8:
# ✅ Хорошо
def recognize_speech(audio_file: str) -> Optional[str]:
"""Распознать речь из аудио файла."""
if not Path(audio_file).exists():
return None
return whisper.transcribe(audio_file)
# ❌ Плохо
def rec(f):
if not os.path.exists(f):return None
return whisper.transcribe(f)- Отступы: 4 пробела (не табы)
- Длина строки: максимум 100 символов
- Кавычки: двойные
"для строк - Импорты: группируются и сортируются
def function_name(param1: str, param2: int) -> bool:
"""
Краткое описание функции.
Args:
param1: Описание параметра 1
param2: Описание параметра 2
Returns:
Описание возвращаемого значения
Raises:
ValueError: Когда возникает эта ошибка
"""
pass# ✅ Хорошо: объясняет "почему"
# Whisper требует 16kHz для оптимальной работы
sample_rate = 16000
# ❌ Плохо: объясняет "что" (и так видно)
# Установить sample_rate в 16000
sample_rate = 16000Votobu/
├── src/ # Исходный код
│ ├── main.py # Точка входа
│ ├── config_manager.py # Конфигурация
│ └── ...
├── assets/ # Ресурсы (иконки)
├── config/ # Конфиги
├── tests/ # Тесты (если добавите)
├── docs/ # Документация
└── ...
Перед PR убедитесь что:
-
python test_components.pyпроходит - Приложение запускается без ошибок
- Ваши изменения работают как ожидалось
- Документация обновлена (если нужно)
Если добавляете новую функцию, добавьте тесты:
# tests/test_audio_recorder.py
def test_audio_recorder_initialization():
recorder = AudioRecorder(sample_rate=16000)
assert recorder.sample_rate == 16000
assert not recorder.is_recording()Используем Conventional Commits:
<type>: <description>
[optional body]
[optional footer]
✨ feat:- новая функция🐛 fix:- исправление бага📝 docs:- изменения в документации🎨 style:- форматирование кода♻️ refactor:- рефакторинг⚡ perf:- оптимизация✅ test:- добавление тестов🔧 chore:- изменения инфраструктуры
✨ feat: add GPU acceleration for Whisper
🐛 fix: resolve Qt platform plugin error on Windows
📝 docs: update TROUBLESHOOTING.md with ffmpeg solution
♻️ refactor: simplify audio recording logic-
Синхронизируйте с upstream:
git fetch upstream git rebase upstream/main
-
Убедитесь что все работает:
python test_components.py python src/main.py
-
Обновите документацию (если нужно)
-
Обновите CHANGELOG.md
- Будьте открыты к фидбеку
- Отвечайте на комментарии
- Вносите запрошенные изменения
- Будьте терпеливы
- Удалите свою ветку
- Синхронизируйте fork с upstream
- Празднуйте! 🎉
- Следуйте существующему стилю
- Добавьте скриншоты в PR
- Протестируйте на разных разрешениях
- Убедитесь что доступно для клавиатуры
- Краткий и понятный
- Без технического жаргона
- На русском языке (основной)
- С английским переводом (опционально)
# В src/main.py добавьте:
import logging
logging.basicConfig(level=logging.DEBUG)python test_components.pypython -m cProfile -o output.prof src/main.py- README.md - обзор проекта
- INSTALL.md - установка
- TROUBLESHOOTING.md - решение проблем
- PROJECT_STRUCTURE.md - архитектура
- Issues: Для багов и feature requests
- Discussions: Для общих вопросов и идей
- Pull Requests: Для code review
- Уважайте время других
- Будьте конструктивны
- Помогайте новичкам
- Радуйтесь успехам других
Приветствуется:
- ✅ Уважительное общение
- ✅ Конструктивная критика
- ✅ Помощь другим
- ✅ Признание ошибок
Неприемлемо:
- ❌ Оскорбления и травля
- ❌ Дискриминация
- ❌ Спам
- ❌ Деструктивная критика
Отлично! Вот с чего начать:
-
Найдите простую задачу:
- Поищите issues с меткой
good first issue - Или исправьте опечатку в документации
- Поищите issues с меткой
-
Попросите помощь:
- Не стесняйтесь задавать вопросы
- Мы все когда-то были новичками
-
Начните с малого:
- Не пытайтесь переписать все сразу
- Маленькие PR легче ревьюить
Спасибо всем контрибьюторам! Каждый вклад ценен, будь то код, документация, баг-репорт или идея.
Внося вклад, вы соглашаетесь что ваш код будет лицензирован под MIT License.
Спасибо что делаете Votobu лучше! ❤️