Примечание. В 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.