Спасибо, что хотите помочь! Ниже — краткие правила для успешного PR.
-
Убедитесь, что есть issue с описанием задачи или создайте его.
-
Ответвитесь от актуальной
main:
git checkout main
git pull origin main
git checkout -b feature/краткое-имя-задачи- Имя ветки должно соответствовать шаблону:
{тип}/{краткое-описание}
Основные типы веток:
feature/— добавление нового функционалаfix/— исправление ошибокhotfix/— срочные исправления в основной веткеdocs/— обновление документацииrefactor/— рефакторинг кода без изменения функциональностиtest/— добавление или исправление тестовci/— изменения CI/CD и инфраструктурных файлов
- Держите ветку в актуальном состоянии.
Перед открытием PR и при длительной работе подтяните изменения из main:
git fetch origin
git merge origin/mainВажно: на момент отправки PR ветка должна быть синхронизирована с актуальным
main, иначе могут не пройти rule checks / CI.
Проект написан на .NET.
Перед отправкой PR код должен:
- собираться в
Releaseконфигурации; - проходить анализаторы без предупреждений;
- проходить тесты;
- не снижать покрытие тестами без причины.
Коммиты рекомендуется писать в стиле Conventional Commits или в коротком понятном формате:
[add]: add delete account outbox event
[fix]: handle revoked refresh token
[docs]: update README
[test]: cover outbox publisher
[refactor]: split outbox publisher base
Перед отправкой PR желательно выполнить те же проверки, которые запускаются в CI.
dotnet build Planara.Auth.sln \
--no-restore \
-c Release \
/p:RunAnalyzersDuringBuild=true \
/p:TreatWarningsAsErrors=trueДля запуска интеграционных тестов требуется Docker, так как тесты используют Testcontainers.
rm -rf tests/TestResults
dotnet test Planara.Auth.sln \
-c Release \
--collect:"XPlat Code Coverage" \
--settings tests/coverlet.runsettings \
--results-directory ./tests/TestResults \
-v:nPull request считается готовым к review, если проходят основные проверки:
dotnet builddotnet test- сбор покрытия тестов
- проверки GitHub Actions
- указан type label
- указан release label:
major,minor,patchилиno-release
Если CI падает, сначала исправьте причину падения в своей ветке, затем обновите PR.
В описании PR укажите:
- что изменено;
- почему это нужно;
- какие сценарии проверены;
- связанный issue, если есть;
- type label;
- release label:
major,minor,patchилиno-release.
Для связи с issue используйте:
Closes #<номер>
или укажите связь через поле Development.
Для PR используются два типа labels:
- labels типа изменения — описывают, что именно меняется;
- release labels — определяют, будет ли выпущена новая версия и какой тип обновления будет применен.
Type label описывает характер изменения в PR или issue.
Доступные type labels:
bug— исправление ошибки или неработающего поведенияdocumentation— изменения или дополнения документацииduplicate— issue или pull request уже существуетenhancement— новая функциональность или улучшение существующей логикиgood first issue— задача, подходящая для первого вкладаhelp wanted— требуется дополнительное внимание или помощьinvalid— issue или PR некорректен или неактуаленquestion— требуется дополнительная информацияwontfix— задача не будет выполняться
Для обычного PR чаще всего используются:
enhancement— для новой функциональности;bug— для исправления ошибки;documentation— для изменений документации.
Release label определяет, как PR влияет на версию сервиса.
Доступные release labels:
major— мажорное обновление, несовместимое с предыдущей версиейminor— минорное обновление, новая функциональность без breaking changespatch— patch-обновление, исправление ошибок или небольшие безопасные правкиno-release— изменения без выпуска новой версии
Release label используется CI/CD для автоматического обновления версии, создания git tag и публикации Docker image в GHCR.
Если PR не должен приводить к выпуску новой версии, используйте:
no-release
- новая mutation, endpoint или значимая фича —
enhancement+minor - breaking change в GraphQL API или Kafka message contract —
enhancement+major - исправление ошибки —
bug+patch - обновление README / CONTRIBUTING —
documentation+no-release - рефакторинг без изменения runtime-поведения —
enhancement+no-release
- Ветка создана от актуальной
main - Ветка синхронизирована с
main dotnet buildпроходит локальноdotnet testпроходит локально- Новая логика покрыта тестами
- Документация обновлена, если изменилось поведение API
- PR описан понятно и связан с issue, если issue есть
- Указан type label
- Указан release label:
major,minor,patchилиno-release
Вопросы, предложения и обсуждения — в Issues или Discussions.
Пожалуйста, соблюдайте Кодекс поведения.