Вдохновлен 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»