Перейти к содержимому
Загрузка статьи…

Трек Вынос фронтовых библиотек в монорепу и автопубликация в npm через release-please · Модуль №2

← Обзор трека

Публикация в npm ​

Два способа публикации ​

Рекомендуемый способ — Trusted Publishing через OIDC. npm-токен оставлен для сравнения. Подготовка версии и проверки пакета одинаковы при обоих способах авторизации:

  1. release-please готовит release PR с версиями и CHANGELOG.
  2. Bun устанавливает зависимости, проверяет и собирает пакет.
  3. npm CLI получает права одним из способов ниже и публикует подготовленный архив.

Авторизация подтверждает право публикации; качество архива проверяется отдельно.

Это сравниваемый подход, а не установленная история старого CI CDD. В исходниках подтверждены ручные release:* с bun publish у React и OpenAPI.

  1. Владелец создаёт granular token в npm и сохраняет его в GitHub Secrets как NPM_TOKEN. Обычная repository variable для этого не подходит.
  2. Нужный шаг job получает токен в env NODE_AUTH_TOKEN, откуда npm CLI читает секрет через настройку registry.
  3. Одного env недостаточно: конфигурация .npmrc должна содержать ссылку на переменную, а не значение секрета:
.npmrc
ini
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}

Компактный фрагмент публикации одного уже выпущенного пакета. Checkout, установка, проверки и сборка через Bun выполняются до показанного шага; Node.js и npm CLI уже установлены. packages/react — пример рабочего каталога с публикуемым package.json и собранным dist, а не запуск публикации из корня монорепозитория. setup-node с registry-url создаёт npm-конфигурацию, читающую NODE_AUTH_TOKEN.

yaml
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      # Checkout и подготовка пакета через Bun опущены.
      - uses: actions/setup-node@v6
        with:
          node-version: '24'
          registry-url: 'https://registry.npmjs.org'
          package-manager-cache: false
      - run: npm publish --access public
        working-directory: packages/react
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
modules/2/front-libs-npm-token

Общие ограничения и права ​

Уточнение на 2026-10-17: поддерживаются granular tokens; classic/automation tokens удалены. Для этого примера нужны права пакета/scoped packages Read and write (publish and stage) и допустимый политиками Bypass 2FA; stage-only не разрешает npm publish. npm объявил прекращение прямой публикации granular-токенами в январе 2027 года. Это контекст сравнения, не рекомендация внедрять такой CI. Правила npm access tokens.

Workflow с другим filename или repo не совпадёт с этим доверием и не получит npm-права. Не передаём постоянный npm-секрет в env или .npmrc публикации. repository.url пакета должен совпадать с GitHub-репозиторием. Новую конфигурацию надо подтвердить первым успешным выпуском за два дня, иначе её пересоздают; это срок первичной проверки, а не каждого релиза. npm Trusted Publishing, проверено 2026-10-17.

GitHub-авторизация release-please остаётся отдельной: для создания PR и GitHub Releases нужны соответствующие GitHub-права (pull-requests: write, contents: write). Их не заменяет id-token: write; права в показанном publish job относятся только к его работе.

Сравнение ​

Критерийnpm-токенTrusted Publishing
Источник полномочийПрава npm-пользователя и ограничения granular tokenGitHub выдаёт identity; npm проверяет доверие и выдаёт права
Хранение npm-секретаGitHub Secrets → env NODE_AUTH_TOKEN → npm CLI через registry authПостоянный npm-секрет не нужен
Срок полномочийДо истечения или отзыва токенаКраткоживущие права на публикацию
Отзыв и обслуживаниеОтозвать токен в npm, обновлять секрет при ротацииУдалить доверие в npm; при смене repo/workflow пересоздать настройку
Настройка пакета/workflowПрава на нужные пакеты/скоупы, режим прямой публикации, Secrets и .npmrcTrusted Publisher каждого пакета: точные owner/repo/filename, environment при использовании, Allow npm publish
Ограничения runner/CLIНет требования OIDC runner; прямой режим granular tokens прекращается в январе 2027GitHub-hosted runner, Node.js ≥ 22.14.0, npm CLI ≥ 11.5.1, id-token: write

OIDC удостоверяет workflow. Совместимость кода, качество архива и право менять сам workflow проверяются отдельно: успешная авторизация не доказывает работу React/Zustand. Версии npm-правил в сравнении — по официальным источникам выше на 2026-10-17.