Теперь, когда мы все сделаны с CI, давайте решаем CD.
Есть пара способов настроить публикацию на NPM. Например, мы могли бы опубликовать при нажатии на определенную ветку, создавая тег, создавая коммит в определенном шаблоне или путем создания отпуска на GitHub напрямую.
Для моего проекта флюи Я пошел с последним вариантом.
Вот что я хочу:
Мой проект в настоящее время находится на версии 2. Код для этого (последняя версия) находится на ветке «Последние». Код для версии 1 находится на ветке «V1-Neighle». Причина этих названий отделений станет очевидной позже. Я хочу быть в состоянии опубликовать, конечно, текущую версию, но и версию 1 в случае необходимости патча.
И вот что мне нужен трубопровод, чтобы сделать:
- При публикации выпуска срабатывайте рабочий процесс
- В построении, сначала проверьте ветку Выпуск зависит от
- Обновите версию в Package.json на основе тега выпуска
- Создайте проект и запустите тесты, чтобы убедиться, все работает
- Опубликовать проект в реестре NPM
- Нажмите изменить версию в GitHub
Файл .yml
Если вы еще этого не сделали, создайте каталоги .Github/Workflows
в корне вашего репозитория. Внутри создайте файл «CD.yml».
Чтобы получить информацию об выпуске, мы будем использовать данные, переданные GitHub, доступные под переменной «Github».
Чтобы увидеть все, что он содержит, вы можете повторять его в своем рабочем процессе:
- run: echo "${{ toJson(${{ github.event) }}"
И вот содержание CD.YML
файл. Я не буду проходить через его линию по линии, вместо этого я добавил комментарии к каждой линии, объясняя, что происходит.
name: NPM publish CD workflow on: release: # This specifies that the build will be triggered when we publish a release types: [published] jobs: build: # Run on latest version of ubuntu runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: # "ref" specifies the branch to check out. # "github.event.release.target_commitish" is a global variable and specifies the branch the release targeted ref: ${{ github.event.release.target_commitish }} # install Node.js - name: Use Node.js 12 uses: actions/setup-node@v1 with: node-version: 12 # Specifies the registry, this field is required! registry-url: https://registry.npmjs.org/ # clean install of your projects' deps. We use "npm ci" to avoid package lock changes - run: npm ci # 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 "github-cd-bot@example.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 # publish to NPM -> there is one caveat, continue reading for the fix - run: npm publish env: # Use a token to publish to NPM. See below for how to set it up NODE_AUTH_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 Auth Token
Мы публикуем NPM, используя токен Node_auth_token: $ {{secrets. Npm_token}}
Отказ Но мы все еще должны настроить секрет «NPM_Token».
Во-первых, перейдите к NPM В настройках перейдите к «auth Tokens» и нажмите кнопку «Создать новый токен».
Скопируйте токен и отправляйтесь на настройки проекта вашего репозитория GitHUB. Перейдите в «Секреты» и нажмите «Новый секрет». Дайте ему имя «npm_token» и для значения, вставьте токен внутри.
С секретной настройкой GitHub теперь сможет решить $ {{Секреты. Npm_token}}
с токеном из ваших секретов GitHub.
Исправление предостережения NPM
Это уже работает в этот момент!
Мы можем создать релиз с тегом 2.1.0 и нацелиться на «последнюю» филиал. Мы также можем создать релиз с тегом «1.3.4», нацеленные на ветку «V1-Neighle».
Убедитесь, что когда вы создаете релиз, использовать тег после Semver. Например. 2.0.0, v2.0.0, 2.0.0-beta.1 и т. Д.
Тем не менее, есть одно предупреждение при публикации старой версии.
Вы видите, когда вы делаете NPM установить флуоту
Это на самом деле сделает NPM Установить Floot @ Последние
за кулисами. И когда вы делаете NPM публиковать
Это на самом деле сделает NPM опубликовать --tag Последнее
Отказ
«Последний» является зарезервированным тегом для NPM. Однако, хотя проект уже находится в версии 2, публикация фиксации для версии 1 сделает его «последнюю» версию. Это означает, что когда кто-то устанавливает пакет потом, он получает версию 1 вместо версии 2. Это, конечно, не то, что мы хотим.
Итак, чтобы исправить это, мы должны указать другой тег при публикации. Один из способов сделать это, добавив тег публикации по умолчанию в Package Package V1.json:
"publishConfig": { "tag": "v1-latest" }
Но есть и еще один способ. Помните имена ветвей, которые я выбрал? «Последние» и «V1-последнее». Звучит так же, как теги, которые мы можем использовать для NPM.
Так Вместо того, чтобы возобновить с помощью package.json в каждой ветви, все, что нам нужно сделать, это перейти к нашему файлу yaml и заменить
- run: npm publish
с участием
- run: npm publish --tag ${{ github.event.release.target_commitish }}
Причина, по которой я выбрал V1-Neighle
Просто V1
это теги NPM должны не Следуйте семете. В противном случае NPM не сможет отличить тег от конкретной опубликованной версии.
Настройка разных частей для компакт-диска была по общему признанию, самая сложная часть, чтобы получить правильно, но полученный файл YAML на самом деле довольно маленький и прямой.
Оригинал: «https://dev.to/michi/publish-to-npm-automatically-with-github-actions-5805»