Skip to content

Latest commit

 

History

History
101 lines (65 loc) · 6.24 KB

CONTRIBUTION.md

File metadata and controls

101 lines (65 loc) · 6.24 KB

Как участвовать в разработке

Работа с Git

При выпуске каждой новой версии пакета коммиту должен проставляться тэг с названием этого пакета и версией: @csssr/[email protected].

Новые версии выпускаются только с ветки master после слития туда релизной ветки.

Ветки

В работе с ветками используется адаптированный git-flow подход.

Если в двух словах, то git-flow упрощает и упорядочивает работу с ветками. Для каждого вида работы отводится определенная ветка. Существуют следующие ветки: master, develop, feature, fix и release.

Основной (максимально стабильный) код хранится в ветке master.

Новый функционал разрабатывается в ветках feature.

В ветках fix происходит фикс багов.

Разработка ведется в ветке develop, куда следует направлять Pull Request-ы feature и fix веток. Из этой ветки отпачковыется ветка release.

В release копятся изменения, исправляются ошибки перед очередным обновлением master.

Название веток с фичами или фиксами должны начинаться с префиксов feature/ и fix/, далее за которым обычно идет номер issue из JIRA, а после — короткое описание на английском.

Примеры:

feature/CORE-99-awesome-feature // Правильно
feat/CORE-99-awesome-feature    // Неправильный префикс
fix/awesome-fix                 // Нежелательно, не указан issueId
fix/CORE-100                    // Нежелательно, нет короткого описания

Коммиты

Сообщение коммита (commit message) должно быть валидным в соответствии с conventional commits, это строго контролируется precommit-хуком.

В сообщении коммита желательно всегда указывать номер задачи, если это возможно.

Сам текст сообщения пишется на русском языке, с заглавной буквы.

Примеры:

feat: CORE-99 Добавил обалденную штуку    // Правильно
fix: СORE-99 Добавил обалденную штуку     // Неправильный префикс, т.к. была добавлена фича
fix: Исправил странный баг                // Нежелательно, не указан issueId
chore(webpack): CORE-9 Поправил сборку    // Правильно, с указанием scope даже лучше

Публикация пакетов

Это монорепозиторий, в котором хранится код нескольких пакетов, каждый из которых имеет независимую версию, и некоторые из них публикуются в npm.

За поднятие версии в package.json файлах пакетов и публикацию их в npm отвечает lerna, настроеная в independent режиме.

Анализируя новые коммиты и тэги репозитория, lerna понимает, какую (и можно ли) выпустить версию. Благодаря conventional commits и анализу измененных с момента выпуска последней версии файлов, lerna может автоматически определить, какая версия какого пакета должна быть выпущена.

Для этого нужно:

  1. Слить всё новое в ветку master;
  2. Запустить команду: yarn lerna version --conventional-commits --no-changelog --yes;

Lerna внесет изменения в package.json файлы пакетов (поднимет версии), закоммитит их, выставит теги и сделает push в удаленный репозиторий.

Следующим этапом нужно опубликовать пакеты: yarn lerna publish from-git --yes

Новые версии пакетов должны быть опубликованы. Можно быстро проверить результат публикации:

# Скачиваем архив с пакетом @csssr/core-design и распаковываем
$ npm v @csssr/core-design dist.tarball | xargs curl | tar -xz

# Переходим в директорию и смотрим версию
$ cd package && cat package.json | grep "version"

# Удаляем временную папку
$ cd .. && rm -rf ./package

CI/CD

Процесс сборки описан в другом месте, в этом документе приведены некоторые уточнения по автоматизированной работе Депломата.

Депломат (на май 2019 года) не умеет пропускать сборку, которая была вызвана push-эвентом с коммитом, сообщение которого имеет что-то наподобие [ci skip].

Выполняя приведенные выше команды для поднятия версии (выполняет их Депломат при push-e в ветку master) в репозиторий попадает новый коммит, и процесс публикации нарушается, т.к. запускается ещё одна сборка.