# Publish package

<figure><img src="https://694473604-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOzA1rSlMPE3i2X5tlqgu%2Fuploads%2FZCdzczA729HO2CsFnhUE%2Fimage.png?alt=media&#x26;token=3373666c-de2d-4ae5-985d-8c0be1fbeadd" alt="" width="200"><figcaption><p>exile.watch logo</p></figcaption></figure>

{% hint style="info" %}
This page covers [`publish-package*`](https://github.com/exile-watch/doryani/blob/main/publish-package/action.yml) actions
{% endhint %}

## Usage

1. Update `package.json` with following script:

```json
// {root}/package.json
{
  "release": "voidstone"
}
```

2. Update `publish-package.yaml` workflow:

```yaml
# {root}/.github/workflows/publish-package.yaml
name: "Publish package: @exile-watch / doryani"

on:
  push:
    paths:
      - 'packages/**'
      - '!packages/**/*.md'
    branches:
      - main

concurrency: ${{ github.workflow }}-${{ github.ref }}

permissions:
  contents: write
  pull-requests: write
  issues: write
  packages: write

jobs:
  code-quality-assurance:
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    runs-on: ubuntu-latest
    name: Code quality assurance
    steps:
      - uses: exile-watch/doryani/code-quality-assurance@main
        with:
          GH_TOKEN: ${{ secrets.GH_TOKEN }}

  publish-package:
    needs: [code-quality-assurance]
    name: Publish to NPM
    runs-on: ubuntu-latest
    steps:
      - name: Authenticate to GitHub Registry
        uses: exile-watch/doryani/auth-github-registry@main
        with:
          GH_TOKEN: ${{ secrets.GH_TOKEN }}

      - name: Install deps
        uses: exile-watch/doryani/install-npm-dependencies@main
        with:
          GH_TOKEN: ${{ secrets.GH_TOKEN }}

      - run: npm run release
        env:
          GH_TOKEN: ${{ secrets.GH_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.GH_TOKEN }}
          GITHUB_REPOSITORY: ${{ github.repository }}
```
