Skip to content

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. Создайте ветку

git checkout -b feature/your-feature-name
# или
git checkout -b fix/bug-description

Нейминг веток: - feature/ — новая функциональность - fix/ — исправление бага - docs/ — документация - refactor/ — рефакторинг

4. Разработка

Код стайл

Следуйте стандартам Go:

# Форматирование
go fmt ./...

# Линтинг
golangci-lint run

# Импорты
goimports -w .

Коммиты

Используйте conventional commits:

feat: добавить поддержку нового API
fix: исправить race condition в worker
docs: обновить README
refactor: упростить логику scraping
test: добавить тесты для Gate activity
chore: обновить зависимости

Структура сообщения:

<type>(<scope>): <subject>

<body>

<footer>

Пример:

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

git push origin feature/your-feature-name

Создайте Pull Request: - Заполните шаблон PR - Ссылайтесь на связанные issues - Добавьте скриншоты если применимо

Код ревью

Чеклист для авторов

  • [ ] Код компилируется
  • [ ] Все тесты проходят
  • [ ] Добавлены тесты для нового кода
  • [ ] Обновлена документация
  • [ ] Линтер не показывает ошибок
  • [ ] Коммиты имеют понятные сообщения

Чеклист для ревьюеров

  • [ ] Логика корректна
  • [ ] Код соответствует стайл гайду
  • [ ] Есть тесты
  • [ ] Обработка ошибок
  • [ ] Производительность
  • [ ] Безопасность

Структура кода

Добавление нового workflow

  1. Создайте workflow в internal/worker/workflows/
  2. Создайте activity в internal/worker/activities/
  3. Добавьте модели в internal/worker/models/ если нужно
  4. Добавьте миграцию если меняется схема
  5. Напишите тесты
  6. Обновите документацию

Шаблон 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

Спасибо за вклад в проект!