- Choose main development branch -
master - Install npm packages by running
npm install - Initiate some tools for development by command
npx postinstall - Build dependencies for packages
npm run build - Launch storybook
npm start
build- build production version of all entities to folderclean- remove folder with production version of all entitieslint- check all entities files for errors by linterstest- start all entities testspostinstall- initiate some tools for developmentbuild:storybook- buildstorybookwith all entities stories to folderprettier:check- check all files byprettierprettier:write- fix all files byprettierstart- startstorybookserver with all entities stories on localhost:6009set-changes- выполняет промежуточную фиксацию изменений и типа новой версии (patch/minor/major) обновленного пакета(ов) для облегчения последующей публикацииupdate-packages-versions- автоповышение версий вpackage.jsonпакетов, обновление внутренних зависимостей и генерация changelog в каждом пакетеpublish- публикация обновленных пакетов в правильном порядке (сначала зависимости, потом пакеты, зависящие от них)
- To add a new entity create a new branch
feature/new-entity-namefrom branchnext - By using
hygencreate a folder with files for a new entity
4.1. If you are usinghygenat first time, you need to install (npm install -global hygen). More abouthygen
4.2. To create a folder for your entity, use commandnpx hygen create entity-type(entity types:component,hook) - Develop new entity with tests and stories
- Check that building production version, tests, stories and linters run without problems
- Push your branch and create a PR on GitHub to merge it to the
nextbranch
build- build production version of entity to folderclean- remove folder with production version of entitylint- check entity files for errors by linterstest- start tests inside entity folder
Vitest используется как тестовый раннер для всех пакетов, объединённых в общий workspace.
Vitest Workspace позволяет писать и запускать тесты для каждого пакета изолированно, но в рамках одного общего окружения.
There are two ways to define workspaces:
- Inline in root
vitest.config.mts - In root config with glob string and vitest.config.ts in each workspace/package. Example:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../../vitest.config';
/**
* vitest.config for correct vitest workspace detection.
* export default configShared works too.
*/
export default mergeConfig(
configShared,
defineProject({
test: {
include: ['**/*.tests.(ts|tsx)'],
setupFiles: ['../../setupTests.ts']
}
})
);Command for executing only one package:
vitest run --root ../../ --project hooks"
В проекте используется Turborepo + Changesets для управления многопакетной (monorepo) React UI-библиотекой.
Каждый компонент / хук / и т.д. — отдельный пакет.
Для согласованного версионирования и автоматической публикации используется changesets.
Turborepo — это инструмент для управления монорепозиторием и оптимизации сборки. Он помогает координировать работу нескольких пакетов (компонентов, хуков и утилит) внутри одного репозитория, ускоряя сборку и упрощая разработку.
- Changesets упрощает семантическое версионирование внутри монорепо.
- Разработчик описывает изменения через
npx changeset(создаёт небольшую markdown «записку»), указывая какие пакеты изменились, тип версии (patch/minor/major) и описание изменений. - При применении
npx changeset versionавтоматически повышаются версии вpackage.json, обновляются внутренние зависимости и генерируется changelog для каждого пакета (файлы CHANGELOG.md). - При выполнении
npx changeset publishпубликуются только пакеты с изменёнными версиями в правильном порядке (сначала зависимости, потом пакеты, зависящие от них).
- Клонировать репозиторий
- Создать ветку и вносить изменения
- Запустить локальные проверки (lint, test, build)
- Создать changeset для изменённых пакетов
- Запустить
npm run set-changesи выбрать пакеты, тип изменения (patch/minor/major) и добавить краткое описание
- Запустить
- Коммит и push
- Создать Pull Request
- Заполнить чек-лист из PR template (см.
.github/pull_request_template.md) - CI запускает проверку lint, tests, build, checklist (см.
.github/workflows/ci.yml) - Код ревьюится командой Byndyusoft Frontend разработки
- Если всё в порядке, PR мёржится
- @sadcitizen запускает
npm run update-packages-versions(в workflow) и коммитит изменения версий (если есть). - @sadcitizen выполняет
npm run build. - @sadcitizen выполняет
npm run publish, который публикует обновлённые пакеты в npm (в правильном порядке). - @sadcitizen через Byndyusoft Jenkins билдит и публикует новую версию Storybook в production окружение.
- Релиз завершён — пакеты доступны в npm и залиты на production окружение.