# Contributing ## Спасибо за интерес к Quoter! 🎉 Мы приветствуем вклад от сообщества. Этот документ содержит руководство по участию в разработке проекта. ## Как внести свой вклад ### 1. Сообщить о баге Если вы нашли баг, создайте issue с: - **Кратким описанием** проблемы - **Шагами для воспроизведения** - **Ожидаемым и фактическим поведением** - **Версией** Rust, Redis, и других зависимостей - **Логами** (если применимо) ### 2. Предложить новую функциональность Для предложения новой функциональности: - Опишите проблему, которую решает ваше предложение - Предложите решение - Обсудите альтернативы - Укажите приоритет ### 3. Внести код #### Подготовка 1. **Fork** репозиторий 2. **Clone** ваш fork локально 3. Создайте **feature branch**: ```bash git checkout -b feature/amazing-feature ``` #### Разработка 1. **Следуйте стандартам кода**: ```bash cargo fmt cargo clippy ``` 2. **Добавьте тесты** для новой функциональности 3. **Обновите документацию** если необходимо 4. **Проверьте сборку**: ```bash cargo build cargo test ``` #### Commit и Push 1. **Создайте commit** с описательным сообщением: ```bash git commit -m "feat: add amazing feature" ``` 2. **Push** в ваш fork: ```bash git push origin feature/amazing-feature ``` 3. **Создайте Pull Request** ## Стандарты кода ### Rust - Следуйте [Rust Style Guide](https://doc.rust-lang.org/1.0.0/style/style/naming/README.html) - Используйте `cargo fmt` для форматирования - Используйте `cargo clippy` для проверки стиля - Документируйте публичные API ### Commit Messages Используйте [Conventional Commits](https://www.conventionalcommits.org/): ``` [optional scope]: [optional body] [optional footer(s)] ``` Типы: - `feat:` - новая функциональность - `fix:` - исправление бага - `docs:` - изменения в документации - `style:` - форматирование кода - `refactor:` - рефакторинг - `test:` - добавление тестов - `chore:` - обновление зависимостей Примеры: ``` feat: add user quota management API fix(auth): handle expired tokens properly docs: update API documentation style: format code with cargo fmt ``` ### Тестирование - **Unit тесты** для всех новых функций - **Интеграционные тесты** для API endpoints - **Тесты производительности** для критических участков - Минимальное покрытие кода: **80%** ### Документация - Обновляйте README.md если необходимо - Добавляйте комментарии к сложному коду - Документируйте API изменения - Обновляйте примеры использования ## Процесс Pull Request ### Создание PR 1. **Заполните шаблон** Pull Request 2. **Опишите изменения** подробно 3. **Укажите связанные issues** 4. **Добавьте скриншоты** если применимо ### Code Review - **Два approval** требуются для merge - **CI/CD** должен пройти успешно - **Code coverage** не должен уменьшиться - **Безопасность** проверяется автоматически ### После Merge - **Feature branch** удаляется автоматически - **Release** создается для значительных изменений - **Документация** обновляется ## Настройка среды разработки ### Требования - Rust 1.70+ - Redis 6.0+ - Git ### Установка ```bash # Fork и clone git clone https://github.com/YOUR_USERNAME/quoter.git cd quoter # Установка зависимостей cargo build # Настройка pre-commit hooks cargo install cargo-husky cargo husky install ``` ### Локальная разработка ```bash # Запуск Redis docker run -d -p 6379:6379 redis:7-alpine # Настройка переменных окружения cp .env.example .env # Отредактируйте .env # Запуск приложения cargo run # Запуск тестов cargo test ``` ## Структура проекта ``` quoter/ ├── src/ # Исходный код │ ├── main.rs # Точка входа │ ├── app_state.rs # Состояние приложения │ ├── auth.rs # Аутентификация │ ├── core.rs # API ядра │ ├── handlers/ # HTTP обработчики │ ├── lookup.rs # Поиск файлов │ ├── overlay.rs # Оверлеи │ ├── s3_utils.rs # S3 утилиты │ └── thumbnail.rs # Миниатюры ├── docs/ # Документация ├── tests/ # Интеграционные тесты ├── Cargo.toml # Зависимости └── README.md # Основная документация ``` ## Роли в проекте ### Maintainers - **Code review** всех PR - **Release management** - **Architecture decisions** - **Community management** ### Contributors - **Feature development** - **Bug fixes** - **Documentation** - **Testing** ### Reviewers - **Code review** assigned PRs - **Quality assurance** - **Performance review** ## Коммуникация ### Issues - Используйте **labels** для категоризации - **Assign** issues к себе если работаете над ними - **Update** статус регулярно ### Discussions - **GitHub Discussions** для общих вопросов - **RFC** для значительных изменений - **Architecture** для архитектурных решений ### Code Review - **Будьте конструктивными** - **Объясняйте причины** изменений - **Предлагайте альтернативы** - **Отвечайте на комментарии** ## Безопасность ### Отчеты о уязвимостях Для критических уязвимостей: 1. **НЕ создавайте публичный issue** 2. **Отправьте email** на security@example.com 3. **Опишите уязвимость** подробно 4. **Предложите решение** если возможно ### Безопасность кода - **Не коммитьте секреты** - **Валидируйте входные данные** - **Используйте безопасные зависимости** - **Проверяйте код на уязвимости** ## Лицензия Внося код в проект, вы соглашаетесь с тем, что ваш вклад будет лицензирован под MIT License. ## Благодарности Спасибо всем контрибьюторам, которые помогают сделать Quoter лучше! 🙏 ### Способы поддержки - **Code contributions** - **Bug reports** - **Feature requests** - **Documentation improvements** - **Community support** - **Financial support** (если применимо) ## Контакты - **Issues**: [GitHub Issues](https://github.com/your-org/quoter/issues) - **Discussions**: [GitHub Discussions](https://github.com/your-org/quoter/discussions) - **Email**: maintainers@example.com - **Chat**: [Discord/Slack] (если есть) --- **Спасибо за ваш вклад в Quoter!** 🚀