76 lines
2.3 KiB
YAML
76 lines
2.3 KiB
YAML
name: CI
|
||
|
||
on: [push, pull_request]
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
jobs:
|
||
test:
|
||
name: Test
|
||
runs-on: ubuntu-22.04
|
||
container: catthehacker/ubuntu:act-latest
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
|
||
- name: Set up Node
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: "20"
|
||
|
||
- run: npm ci
|
||
- run: npm run typecheck
|
||
- run: npm run lint
|
||
- run: npm test
|
||
- run: npm run build
|
||
- run: npm pack --dry-run
|
||
|
||
# Публикация только по тегу v*. Тег обязан совпадать с версией в
|
||
# package.json: иначе в npm уехала бы версия, которой нет в истории тегов.
|
||
publish:
|
||
name: Publish to npm
|
||
needs: test
|
||
if: startsWith(github.ref, 'refs/tags/v')
|
||
runs-on: ubuntu-22.04
|
||
container: catthehacker/ubuntu:act-latest
|
||
steps:
|
||
- uses: actions/checkout@v3
|
||
|
||
- name: Set up Node
|
||
uses: actions/setup-node@v4
|
||
with:
|
||
node-version: "20"
|
||
|
||
- run: npm ci
|
||
|
||
- name: Check tag matches package.json version
|
||
env:
|
||
REF_NAME: ${{ github.ref_name }}
|
||
run: |
|
||
set -eu
|
||
pkg_version="$(node -p 'require("./package.json").version')"
|
||
tag_version="${REF_NAME#v}"
|
||
if [ "$pkg_version" != "$tag_version" ]; then
|
||
echo "версия package.json ($pkg_version) не совпадает с тегом ($REF_NAME)" >&2
|
||
exit 1
|
||
fi
|
||
|
||
- run: npm run build
|
||
|
||
# Токен подставляется через env шага, а не в текст команды: подстановка
|
||
# в run попадает в командную строку процесса и разбирается shell.
|
||
# Одинарные кавычки — в ~/.npmrc пишется литерал ${NPM_TOKEN}, npm
|
||
# раскрывает его из окружения сам, и значение не попадает на диск.
|
||
- name: Publish
|
||
env:
|
||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||
run: |
|
||
set -eu
|
||
trap 'rm -f ~/.npmrc' EXIT
|
||
printf '%s\n' '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > ~/.npmrc
|
||
npm publish --access public
|
||
|
||
- name: Cleanup
|
||
if: always()
|
||
run: rm -f ~/.npmrc
|