Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Введение
В этом руководстве показано, как создать рабочий процесс, публикующий пакеты Node.js в GitHub Packages и реестры npm после прохождения тестов непрерывной интеграции (CI).
Предварительные требования
Рекомендуется иметь базовое представление о параметрах конфигурации рабочих процессов, а также о том, как создавать файл рабочего процесса. Дополнительные сведения см. в разделе Изучение GitHub Actions.
Дополнительные сведения о создании рабочего процесса CI для проекта Node.js см. в разделе Создание и тестирование для Node.js.
Также могут быть полезны базовые знания в следующих областях:
- "Работа с реестром npm"
- "Переменные"
- "Зашифрованные секреты"
- "Автоматическая проверка подлинности токенов"
Сведения о конфигурации пакета
Поля name
и version
в файле package.json создают уникальный идентификатор, который реестры используют для связывания пакета с реестром. Чтобы добавить сводку для страницы со списком пакетов, включите поле description
в файл package.json . Дополнительные сведения см. в разделах Создание файла package.json и Создание модулей Node.js документации по npm.
Если локальный NPMRC-файл существует и имеет указанное значение registry
, команда npm publish
использует реестр, настроенный в NPMRC-файле. Действие setup-node
можно использовать для создания локального NPMRC-файла в средстве выполнения, который настраивает реестр и область по умолчанию. Действие setup-node
также принимает в качестве входных данных маркер проверки подлинности, используемый для доступа к частным реестрам или публикации пакетов узлов. Дополнительные сведения см. на веб-сайте setup-node
.
Указать версию Node.js, установленную в средстве выполнения тестов, можно с помощью действия setup-node
.
При добавлении шагов в рабочий процесс для настройки полей publishConfig
в файле package.json не нужно указывать URL-адрес реестра с помощью действия setup-node
, однако опубликовать пакет можно будет только в одном реестре. Дополнительные сведения см. в разделе publishConfig в документации npm.
Публикация пакетов в реестре npm
Вы можете активировать рабочий процесс для публикации пакета каждый раз при публикации нового выпуска. Процесс в следующем примере выполняется при активации события выпуска типа published
. Если тесты CI пройдены, процесс отправляет пакет в реестр npm. Дополнительные сведения см. в разделе Управление выпусками в репозитории.
Для выполнения аутентифицированных операций с реестром npm в рабочем процессе необходимо сохранить маркер проверки подлинности npm в виде секрета. Например, создайте секрет репозитория NPM_TOKEN
. Дополнительные сведения см. в разделе Зашифрованные секреты.
По умолчанию npm использует поле name
файла package.json для определения имени опубликованного пакета. При публикации в глобальном пространстве имен необходимо включить только имя пакета. Например, пакет с именем my-package
вы бы опубликовали в https://www.npmjs.com/package/my-package
.
При публикации пакета с префиксом области включите область в имя файла package.json. Например, если префикс npm область — "octocat", а имя пакета — "hello-world", name
в файле package.json должно быть задано @octocat/hello-world
значение . Если пакет npm использует префикс области и пакет является общедоступным, необходимо использовать параметр npm publish --access public
. Это параметр, который npm требует, чтобы запретить кому-либо непреднамеренно опубликовать частный пакет.
В этом примере секрет NPM_TOKEN
сохраняется в переменной среды NODE_AUTH_TOKEN
. При создании NPMRC-файла действие setup-node
ссылается на токен из переменной среды NODE_AUTH_TOKEN
.
name: Publish Package to npmjs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v3
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
В приведенном выше примере действие setup-node
создает в средстве выполнения тестов NPMRC-файл со следующим содержимым:
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
registry=https://registry.npmjs.org/
always-auth=true
Обратите внимание, что для правильной настройки учетных данных необходимо задать для registry-url
значение https://registry.npmjs.org/
в setup-node
.
Публикация пакетов в GitHub Packages
Вы можете активировать рабочий процесс для публикации пакета каждый раз при публикации нового выпуска. Процесс в следующем примере выполняется при активации события выпуска типа published
. Если тесты CI пройдены, процесс отправляет пакет в GitHub Packages. Дополнительные сведения см. в разделе Управление выпусками в репозитории.
Настройка целевого репозитория
Связывать пакет с GitHub Packages с помощью ключа repository
не обязательно. Если ключ repository
в файле package.json не указан, GitHub Packages публикует пакет в репозитории GitHub, указанном вами в поле name
файла package.json. Например, пакет с именем @my-org/test
публикуется в репозитории my-org/test
GitHub. Если в ключе repository
указан недопустимый url
, пакет может быть опубликован, однако он не будет связан с источником репозитория, как предполагалось.
Если ключ repository
указан в файле package.json, репозиторий в этом ключе используется в качестве целевого реестра npm для GitHub Packages. Например, публикация приведенного ниже файла package.json приводит к публикации пакета с именем my-package
в репозиторииoctocat/my-other-repo
GitHub. После публикации обновляется только источник репозитория, и пакет не наследует разрешения из целевого репозитория.
{
"name": "@octocat/my-package",
"repository": {
"type": "git",
"url": "https://github.com/octocat/my-other-repo.git"
},
Проверка подлинности в целевом репозитории
Для выполнения аутентифицированных операций в реестре GitHub Packages в рабочем процессе можно использовать GITHUB_TOKEN
. Секрет GITHUB_TOKEN
устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Вам следует установить разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ на чтение в области contents
и доступ на запись в области packages
. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.
Если вы хотите опубликовать пакет в другом репозитории, необходимо использовать personal access token, имеющий разрешение на запись в пакеты в целевом репозитории. Дополнительные сведения см. в разделах Управление личными маркерами доступа и Зашифрованные секреты.
Пример рабочего процесса
В этом примере секрет GITHUB_TOKEN
сохраняется в переменной среды NODE_AUTH_TOKEN
. При создании NPMRC-файла действие setup-node
ссылается на токен из переменной среды NODE_AUTH_TOKEN
.
name: Publish package to GitHub Packages
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v3
with:
node-version: '16.x'
registry-url: 'https://npm.pkg.github.com'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Действие setup-node
создает NPMRC-файл в средстве выполнения тестов. При использовании входных данных scope
для действия setup-node
NPMRC-файл включает префикс области. По умолчанию действие setup-node
задает в качестве области в NPMRC-файле учетную запись, содержащую этот файл рабочего процесса.
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://npm.pkg.github.com
always-auth=true
Публикация пакетов с помощью yarn
При использовании диспетчера пакетов Yarn можно устанавливать и публиковать пакеты с помощью Yarn.
name: Publish Package to npmjs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v3
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
- run: yarn
- run: yarn publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}