Contributing Guide
Как внести вклад
Благодарим за интерес к проекту! Вот как вы можете помочь:
Процесс
1. Создайте Issue
Перед началом работы: - Проверьте существующие issues - Создайте новый issue с описанием задачи - Дождитесь обсуждения с maintainers
2. Форк и клонирование
# Форкните репозиторий на GitHub
# Затем клонируйте свой форк
git clone https://github.com/YOUR_USERNAME/Kit.git
cd Kit
git remote add upstream https://github.com/ORIGINAL/Kit.git
3. Создайте ветку
Нейминг веток:
- feature/ — новая функциональность
- fix/ — исправление бага
- docs/ — документация
- refactor/ — рефакторинг
4. Разработка
Код стайл
Следуйте стандартам Go:
Коммиты
Используйте conventional commits:
feat: добавить поддержку нового API
fix: исправить race condition в worker
docs: обновить README
refactor: упростить логику scraping
test: добавить тесты для Gate activity
chore: обновить зависимости
Структура сообщения:
Пример:
feat(scraper): добавить retry логику для BingX
- Добавлен exponential backoff
- Увеличено timeout до 60s
- Добавлены метрики попыток
Closes #123
5. Тестирование
# Все тесты
go test ./...
# С проверкой race conditions
go test -race ./...
# Покрытие
go test -cover ./...
6. Документация
Обновите документацию если: - Изменили API - Добавили новые workflow - Изменили модели данных
7. Push и PR
Создайте Pull Request: - Заполните шаблон PR - Ссылайтесь на связанные issues - Добавьте скриншоты если применимо
Код ревью
Чеклист для авторов
- [ ] Код компилируется
- [ ] Все тесты проходят
- [ ] Добавлены тесты для нового кода
- [ ] Обновлена документация
- [ ] Линтер не показывает ошибок
- [ ] Коммиты имеют понятные сообщения
Чеклист для ревьюеров
- [ ] Логика корректна
- [ ] Код соответствует стайл гайду
- [ ] Есть тесты
- [ ] Обработка ошибок
- [ ] Производительность
- [ ] Безопасность
Структура кода
Добавление нового workflow
- Создайте workflow в
internal/worker/workflows/ - Создайте activity в
internal/worker/activities/ - Добавьте модели в
internal/worker/models/если нужно - Добавьте миграцию если меняется схема
- Напишите тесты
- Обновите документацию
Шаблон workflow
// internal/worker/workflows/my_workflow.go
package workflows
import (
"time"
"go.temporal.io/sdk/workflow"
)
func MyWorkflow(ctx workflow.Context) error {
options := workflow.ActivityOptions{
StartToCloseTimeout: 10 * time.Minute,
RetryPolicy: &temporal.RetryPolicy{
InitialInterval: 30 * time.Second,
BackoffCoefficient: 2.0,
MaximumAttempts: 3,
},
}
ctx = workflow.WithActivityOptions(ctx, options)
var result MyResult
err := workflow.ExecuteActivity(ctx, activities.MyActivity).Get(ctx, &result)
return err
}
Шаблон activity
// internal/worker/activities/my_activity.go
package activities
import (
"context"
)
type MyActivityParams struct {
// параметры
}
type MyActivityResult struct {
// результаты
}
func (a *Activities) MyActivity(ctx context.Context, params MyActivityParams) (*MyActivityResult, error) {
// логика
return &result, nil
}
Сообщество
Communication
- GitHub Issues — баги и фичи
- GitHub Discussions — вопросы и идеи
- Pull Requests — код
Code of Conduct
- Будьте уважительны
- Конструктивная критика
- Фокус на коде, а не на личности
- Помогайте новичкам
Разработка
Локальная настройка
См. setup.md
Отладка
# Запуск с логами
docker compose logs -f worker
# Доступ к контейнеру
docker compose exec worker sh
# Просмотр БД
docker compose exec postgres psql -U temporal -d kit
Лицензия
Внося изменения, вы соглашаетесь с тем, что код будет под MIT License.
Вопросы?
- Откройте issue с тегом
question - Свяжитесь с maintainers
Спасибо за вклад в проект!