Files
quoter/docs/contributing.md
Untone ea92a376ed
Some checks failed
CI / test (push) Failing after 4m0s
CI / lint (push) Failing after 4s
CI / deploy (push) Has been skipped
docs
2025-08-02 00:18:09 +03:00

292 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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!** 🚀