Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Введение
В этом руководстве показано, как создать рабочий процесс, публикующий пакеты Node.js в GitHub Packages и реестры npm после прохождения тестов непрерывной интеграции (CI).
Необходимые компоненты
Рекомендуется иметь базовое представление о параметрах конфигурации рабочих процессов, а также о том, как создавать файл рабочего процесса. Дополнительные сведения см. в разделе Изучение GitHub Actions.
Дополнительные сведения о создании рабочего процесса CI для проекта Node.js см. в разделе "Создание и тестирование для Node.js".
Также могут быть полезны базовые знания в следующих областях:
- "Работа с реестром npm"
- "Переменные"
- "Использование секретов в GitHub Actions"
- "Автоматическая проверка подлинности токенов"
Сведения о конфигурации пакета
version Поля name в 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. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.
По умолчанию 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. setup-node Когда действие создает .npmrc файл, он ссылается на маркер из переменной NODE_AUTH_TOKEN среды.
name: Publish Package to npmjs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
with:
node-version: '16.x'
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
name: Publish Package to npmjs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
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 файле, то После публикации обновляется только источник репозитория, и пакет не наследует какие-либо разрешения из целевого репозитория.
{
"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 с разрешением на запись в пакеты в целевом репозитории. Дополнительные сведения см. в разделе "[AUTOTITLE" и "Управление личными маркерами доступа](/actions/security-guides/using-secrets-in-github-actions)".
Пример рабочего процесса
В этом примере секрет GITHUB_TOKEN сохраняется в переменной среды NODE_AUTH_TOKEN. setup-node Когда действие создает .npmrc файл, он ссылается на маркер из переменной 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@v4
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v4
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 }}
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@v4
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v4
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@v4
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
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 npm publish // for Yarn version 1, use `yarn publish` instead
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
name: Publish Package to npmjs
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
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 npm publish // for Yarn version 1, use `yarn publish` instead
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Чтобы пройти проверку подлинности в реестре во время публикации, убедитесь, что маркер проверки подлинности также определен в yarnrc.yml файле. Дополнительные сведения см. в статье Параметры документации Yarn.