Семантическое версионирование NestJS и Angular приложений в NX-монорепозитории
Подключение и настройка nx-semantic-release
плагина для NX-монорепозитория для автоматического создания релиза с последующим деплоем приложений.
1. Добавляем NX-плагин для семантического версионирования
Для версионирования будем использовать https://github.com/TheUnderScorer/nx-semantic-release.
В отличие от https://github.com/semantic-release/semantic-release, плагин https://github.com/TheUnderScorer/nx-semantic-release предварительно запускает построение графика зависимостей между библиотеками и приложениями, а затем запускает процесс релиза для всего связанного кода.
После создания релиза произойдет изменение версий приложений, которые мы проверяем в CI/CD-конфигурации для того чтобы запускать или исключать часть шагов при деплое.
Команды
npm i --save-dev @theunderscorer/nx-semantic-release
Вывод консоли
$ npm i --save-dev @theunderscorer/nx-semantic-release
removed 391 packages, changed 3 packages, and audited 2764 packages in 18s
330 packages are looking for funding
run `npm fund` for details
52 vulnerabilities (31 moderate, 21 high)
To address issues that do not require attention, run:
npm audit fix
To address all issues possible (including breaking changes), run:
npm audit fix --force
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
2. Добавляем конфигурацию для плагина
В данный момент публиковать в npm-регистр мы ничего не будет, поэтому опцию npm
ставим в false
.
Созда ем файл .nxreleaserc.json
{
"changelog": true,
"npm": false,
"github": true,
"repositoryUrl": "https://github.com/nestjs-mod/nestjs-mod-fullstack",
"branches": ["master"]
}
3. Включаем семантическое версионирование у наших приложений
Сейчас в процессе деплоя мы используем только версию корневого package.json
и версию package.json
от NestJS приложения, корневую версию мы должны переключать руками когда у нас меняется список зависимостей, а вот версию приложения пусть переключает NX-плагин.
Для подключения плагина к библиотеке или приложению нужно запустить специальную команду.
Команды
npm run nx -- g @theunderscorer/nx-semantic-release:setup-project server
Вывод консоли
$ npm run nx -- g @theunderscorer/nx-semantic-release:setup-project server
> @nestjs-mod-fullstack/source@0.0.2 nx
> nx g @theunderscorer/nx-semantic-release:setup-project server
NX Generating @theunderscorer/nx-semantic-release:setup-project
✔ Would you want to create github releases? (Y/n) · true
✔ Would you want to create changelog file for this project? (Y/n) · true
✔ Would you want to create npm releases for this project? (Y/n) · false
✔ What tag format would you like to use for this project. Hint: you can use ${PROJECT_NAME} and ${VERSION} tokens here. · ${PROJECT_NAME}-v${VERSION}
UPDATE apps/server/project.json