Пайплайны test и publish, реестр — организация Tansu

- test: юнит-тесты и сборка на каждый push в main, на PR и по кнопке
- publish: по кнопке тесты и публикация в реестр Tansu; ci/publish.sh сам считает патч-версию
  по реестру (major.minor — из package.json) и не публикует, если хэш кода совпал с последней
  опубликованной версией
- .npmrc и publishConfig — реестр Tansu, repository — Tansu/tnsu-ui-kit
- README: установка без токена, публикация кнопкой

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-10-28 17:19:14 +05:00
parent 048fec0696
commit 2a32b998f6
7 changed files with 201 additions and 39 deletions
+22 -37
View File
@@ -4,40 +4,15 @@
> Внутренняя память проекта (решения, план, прогресс) — в [PROJECT.md](./PROJECT.md).
## Первичная настройка (один раз на каждого разработчика)
Пакет лежит в приватном registry (Gitea), поэтому перед первой установкой нужно один
раз настроить доступ. Дальше про это можно забыть.
**Шаг 1. Создать токен в Gitea:**
1. Открой http://git.tnsu.kz → кликни на свой аватар справа вверху → **Настройки**.
2. Слева: **Приложения**.
3. В блоке «Управление токенами» → **Создать новый токен**:
- Имя: например `npm-read`.
- Права (scopes): найди строку **`package`** и поставь **«Прочитанные»** (Read).
Остальное — «Нет доступа».
4. Нажми **Генерировать токен** и **сразу скопируй** его (показывается один раз).
**Шаг 2. Прописать токен у себя на компьютере.**
Создай (или дополни) файл `.npmrc` в своей домашней папке
(`C:\Users\<твоё-имя>\.npmrc`) одной строкой:
```
//git.tnsu.kz/api/packages/timur.gorodetskiy/npm/:_authToken=ВСТАВЬ_СВОЙ_ТОКЕН
```
> ⚠️ Токен — это как пароль. Он лежит в домашней папке, **вне проекта**, и в git не попадает.
> Никогда не коммить его и не вставляй в код.
Всё. Теперь `npm i` в любом проекте, где подключён `@tnsu/ui-kit`, будет работать.
## Установка в проект
Убедись, что в корне проекта есть файл `.npmrc` со строкой (для request-portal он уже
закоммичен):
Пакет лежит в реестре организации **Tansu** на git.tnsu.kz. Реестр публичный, а сам git.tnsu.kz
доступен только из внутренней сети, поэтому **токен для установки не нужен** (из сети или по VPN).
В корне проекта — файл `.npmrc` со строкой:
```
@tnsu:registry=http://git.tnsu.kz/api/packages/timur.gorodetskiy/npm/
@tnsu:registry=http://git.tnsu.kz/api/packages/Tansu/npm/
```
Затем:
@@ -86,11 +61,21 @@ npm run storybook # витрина компонентов (localhost:6006)
### Публикация новой версии
```powershell
# 1. поднять version в package.json (напр. 0.0.1 → 0.0.2)
npm run build
npm publish
```
Публикует пайплайн **publish** в Gitea — по кнопке: Actions → publish → Run workflow. Сначала юнит-тесты
и сборка, потом публикация в реестр Tansu.
> npm не даёт перезаписать уже опубликованную версию — перед публикацией всегда
> бампай `version` в package.json.
- **Версию поднимает пайплайн.** В `package.json` задаются только major.minor (патч там не важен):
новая функциональность — поднять minor руками (`0.14.x` → `0.15.0`). Патч — следующий после самого
большого опубликованного с тем же major.minor. В git ничего не коммитится.
- **Тот же код не публикуется.** Пайплайн считает хэш исходников (`src` без тестов и историй Storybook,
`package.json`, конфиги сборки, README), кладёт его в публикуемый `package.json` (поле `sourceHash`)
и сравнивает с последней опубликованной версией. Совпало — пайплайн падает с «Публиковать нечего».
- Секреты: `PACKAGES_USER` (логин в Gitea) и `PACKAGES_TOKEN` (его токен со scope `write:package`,
участник организации Tansu с правом записи).
Пробный прогон без публикации: `DRY_RUN=1 bash ci/publish.sh`.
Версии до 0.14.0 скопированы из прежнего реестра `timur.gorodetskiy` без хэша, поэтому первая публикация
пайплайном выпустит `0.14.1` даже без изменений кода; дальше проверка работает как обычно.
На каждый push и pull request пайплайн **test** гоняет юнит-тесты и сборку.