Публикация: npm-пакет и Docker-образ
Автоматизируем выпуск: пакет в npm и образ в registry — без ручных команд.
Публикация — частный случай деплоя: артефакт собирается в CI и отправляется в реестр (npm, Docker registry), откуда его берут пользователи.
Публикация npm-пакета
Типичный сценарий: по релизному тегу собрать пакет и выложить в npm. Токен npm — секрет:
name: Publish npm
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"
- run: npm ci
- run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Ключевые детали: registry-url в setup-node настраивает .npmrc, а npm publish читает токен из переменной NODE_AUTH_TOKEN — её и заполняем из секрета.
Сборка и публикация Docker-образа
Образы удобно публиковать в GitHub Container Registry (ghcr.io) — авторизация там идёт встроенным GITHUB_TOKEN, отдельный секрет не нужен:
name: Build and push image
on:
push:
tags: ["v*"]
jobs:
docker:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write # право публиковать пакеты/образы
steps:
- uses: actions/checkout@v4
- name: Login to GHCR
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build
run: docker build -t ghcr.io/${{ github.repository }}:${{ github.ref_name }} .
- name: Push
run: docker push ghcr.io/${{ github.repository }}:${{ github.ref_name }}
Разбор:
permissions: packages: writeобязательно — без него push в registry запрещён.- Тег образа собираем из имени репозитория и версии:
ghcr.io/owner/repo:v1.4.0. - Логинимся встроенным токеном — не нужно заводить отдельные креды.
Готовые экшены
Для Docker есть официальные экшены docker/login-action и docker/build-push-action, которые делают то же самое декларативно и умеют кэш слоёв. На старте достаточно понимать ручные команды выше — экшены лишь оборачивают их.
Итог
- Публикация — деплой артефакта в реестр; запускают по релизу/тегу.
- npm:
registry-urlв setup-node + токен вNODE_AUTH_TOKEN. - Docker в ghcr.io: логин встроенным
GITHUB_TOKENи обязательныйpackages: write.
Проверьте себя
1. Из какой переменной npm publish берёт токен авторизации?
ANPM_PASSWORD
BNODE_AUTH_TOKEN
CGITHUB_TOKEN
DREGISTRY_KEY
2. Что обязательно указать в permissions, чтобы запушить Docker-образ в ghcr.io?
Acontents: write
Bpackages: write
Cissues: write
Dactions: read
3. Чем удобна публикация образа именно в GitHub Container Registry (ghcr.io)?
AОна бесплатна для всех образов навсегда
BАвторизация идёт встроенным GITHUB_TOKEN, отдельный секрет с кредами не нужен
CНе требует Dockerfile
DОбразы не нужно тегировать