Вдохновлен https://michaelzanggl.com/articles/github-actions-cd-setup/
Есть пара способов настроить публикацию на НПМ: 1. При толчке на определенную ветку
- При создании тега
- При создании фиксации в определенном виде
- При создании отпуска на GitHub напрямую.
Это то, что вам нужно знать о моем проекте:
- Код для последней версии находится на последнем ветке.
- Код для версии 1 находится на ветке V1-Neighle.
Причина этих названий отделений станет очевидной позже.
Создайте файл YML
// .github/workflows.yml
name: NPM publish CD workflow
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.release.target_commitish }}
# install Node.js
- name: Use Node.js 12
uses: actions/setup-node@v1
with:
node-version: 12
- run: yarn install
# set up git since we will later push to the repo
- run: git config --global user.name "GitHub CD bot"
- run: git config --global user.email "savchenkoalexander91@gmail.com"
# upgrade npm version in package.json to the tag used in the release.
- run: npm version ${{ github.event.release.tag_name }}
# build the project
- run: npm run build
# run tests just in case
- run: npm test
- run: npm config set '//registry.npmjs.org/:_authToken' "${{ secrets.NPM_TOKEN }}"
# publish to NPM -> there is one caveat, continue reading for the fix
- run: npm publish --tag ${{ github.event.release.target_commitish }}
env:
# Use a token to publish to NPM. See below for how to set it up
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
# push the version changes to GitHub
- run: git push
env:
# The secret is passed automatically. Nothing to configure.
github-token: ${{ secrets.GITHUB_TOKEN }}
Получить токен NPM
Перейдите в NPM, в настройках перейдите на «auth Tokens» и нажмите кнопку «Создать новый токен».
Добавьте токен NPM в «Секреты»
Скопируйте токен и отправляйтесь на настройки проекта вашего репозитория GitHUB. Перейдите в «Секреты» и нажмите «Новый секрет». Дайте ему имя «npm_token» и для значения, вставьте токен внутри.
Предостережение
Вы видите, когда вы делаете NPM Установить <Пакет> Это на самом деле сделает NPM Установите <Пакет> @latest за кулисами. И когда вы делаете NPM публиковать Это на самом деле сделает NPM публикует --tag последний
«Последний» является зарезервированным тегом для NPM. Однако, хотя проект уже находится в версии 2, публикация фиксации для версии 1 сделает его «последнюю» версию. Это означает, что когда кто-то устанавливает пакет потом, он получает версию 1 вместо версии 2. Это, конечно, не то, что мы хотим.
Итак, чтобы исправить это, мы должны указать другой тег при публикации.
Поэтому у нас здесь есть два варианта:
NPM Publish --tag $ {{github.event.release.target_commitish}}(мой выбор)- Добавьте тег публикации по умолчанию для Package Package V1.json:
"publishConfig": {
"tag": "v1-latest"
}
Причина, по которой я выбрал V1-новейший только V1, заключается в том, что теги NPM не должны следовать семете. В противном случае NPM не сможет отличить тег от конкретной опубликованной версии.
Оригинал: «https://dev.to/savchenko91/auto-publish-npm-package-with-github-actions-57jh»