Skip to content

NPM publish

NPM publish #51

Workflow file for this run

name: NPM publish
on: workflow_dispatch
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Installing dependencies
run: npm ci
- name: Building sources
run: npm run build
lint:
name: Lint Code
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Installing dependencies
run: npm ci
- name: Linting
run: npm run lint
env:
CI: true
test_unit:
name: Unit Tests
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Installing dependencies
run: npm ci
- name: Running unit tests
run: npm run test:unit
test_integration:
name: Integration Tests
needs:
- lint
- test_unit
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Installing dependencies
run: npm ci
- name: Creating `.env` file
run: |
touch .env
echo HOST=${{ secrets.HOST }} >> .env
echo EMAIL=${{ secrets.EMAIL }} >> .env
echo API_TOKEN=${{ secrets.API_TOKEN }} >> .env
- name: Running integration tests
run: npm run test:integration
publish:
name: Package publish
needs:
- test_integration
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
registry-url: 'https://registry.npmjs.org'
- name: Installing dependencies
run: npm ci
- name: Building sources
run: npm run build
- name: Publishing
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
publish-docs:
name: Docs publish
needs:
- publish
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: master
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Installing dependencies
run: npm ci
- name: Generate docs
run: npm run doc
- name: Extract version
id: pkg
run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_ENV
- name: Checkout docs branch
uses: actions/checkout@v4
with:
ref: docs
clean: false
- name: Copy docs to root
run: |
cp -r docs/* .
- name: Commit and push docs
run: |
git config user.name "GitHub Actions"
git config user.email "[email protected]"
git add .
git commit -m "Update documentation for version v${{ env.VERSION }}"
git push
creating-git-tag:
name: Create Git Tag
needs:
- publish
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Extract version from package.json
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_ENV
- name: Create and Push Git Tag
run: |
git config user.name "GitHub Actions"
git config user.email "[email protected]"
TAG="v${{ env.version }}"
git tag $TAG
git push origin $TAG
creating-github-release:
name: Create GitHub Release
needs:
- creating-git-tag
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Use Node.js 18.x.x
uses: actions/setup-node@v4
with:
node-version: 18
- name: Extract version from package.json
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_ENV
- name: Extract Changelog Entry
id: changelog
uses: juliangruber/read-file-action@v1
with:
path: ./CHANGELOG.md
- name: Parse Changelog Entry
run: |
CHANGELOG_CONTENT=$(awk '/^### [0-9]+\.[0-9]+\.[0-9]+/ {if (p) exit; p=1} p' CHANGELOG.md)
# Sanitize changelog content
CHANGELOG_CONTENT=$(echo "$CHANGELOG_CONTENT" | sed ':a;N;$!ba;s/\r//g; s/\n/\\n/g')
echo "CHANGELOG=$CHANGELOG_CONTENT" >> $GITHUB_ENV
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ env.version }}
name: Release v${{ env.version }}
body: ${{ env.CHANGELOG }}