name: Release

on:
  release:
    types: [published]

permissions:
  contents: read

jobs:
  setup:
    permissions:
      contents: none
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.trim.outputs.version }}
    steps:
      - id: trim
        run: echo "version=${TAG:1}" >> $GITHUB_OUTPUT
        env:
          TAG: ${{ github.event.release.tag_name }}

  release:
    permissions:
      contents: write  # for actions/upload-release-asset to upload release asset
    needs: setup
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v3.0.0
      - uses: actions/setup-node@v4
        with:
          registry-url: https://registry.npmjs.org/
          node-version: 16
          cache: pnpm
      - name: Setup and build
        run: |
          pnpm install
          pnpm install -g json
          json -I -f package.json -e "this.version=\"$VERSION\""
          pnpm run build
          ./scripts/docs-config.sh "$VERSION" release
          pnpm run docs
          pnpm pack
        env:
          VERSION: ${{ needs.setup.outputs.version }}
      - name: Publish to NPM
        run: ./scripts/publish.sh
        env:
          NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
          VERSION: ${{ needs.setup.outputs.version }}
      - name: Deploy Docs
        run: ./scripts/deploy-docs.sh "$VERSION" release
        env:
          GITHUB_TOKEN: ${{ secrets.GH_AUTH_TOKEN }}
          GH_AUTH_EMAIL: ${{ secrets.GH_AUTH_EMAIL }}
          VERSION: ${{ needs.setup.outputs.version }}
      - name: Upload NPM package file
        id: upload-npm-package-file
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          VERSION: ${{ needs.setup.outputs.version }}
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: ${{ format('chart.js-{0}.tgz', needs.setup.outputs.version) }}
          asset_name: ${{ format('chart.js-{0}.tgz', needs.setup.outputs.version) }}
          asset_content_type: application/gzip
  release-tag:
    needs: [setup, release]
    runs-on: ubuntu-latest
    if: "!github.event.release.prerelease"
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v3.0.0
      - uses: actions/setup-node@v4
        with:
          registry-url: https://registry.npmjs.org/
          node-version: 16
          cache: pnpm
      - name: Setup and build
        run: |
          pnpm install
          pnpm install -g json
          json -I -f package.json -e "this.version=\"$VERSION\""
          pnpm run build
          ./scripts/docs-config.sh "$VERSION"
          pnpm run docs
        env:
          VERSION: ${{ needs.setup.outputs.version }}
      - name: Deploy Docs
        run: ./scripts/deploy-docs.sh "$VERSION"
        env:
          GITHUB_TOKEN: ${{ secrets.GH_AUTH_TOKEN }}
          GH_AUTH_EMAIL: ${{ secrets.GH_AUTH_EMAIL }}
          VERSION: ${{ needs.setup.outputs.version }}
