292 lines
8.4 KiB
Markdown
292 lines
8.4 KiB
Markdown
# 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/):
|
||
|
||
```
|
||
<type>[optional scope]: <description>
|
||
|
||
[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!** 🚀 |