name: Release

on:
  push:
    tags:
      - v*

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout 🏷️
        uses: actions/checkout@v3

      - name: Match tag to package version 🧐
        id: packageVersion
        uses: geritol/match-tag-to-package-version@0.1.0
        env:
          TAG_PREFIX: refs/tags/v

      - name: Install ⚙️
        uses: pnpm/action-setup@v2
        with:
          version: 7.x

      - name: Use Node 16 🕹️
        uses: actions/setup-node@v2
        with:
          node-version: 16
          registry-url: 'https://registry.npmjs.org'
          cache: 'pnpm'

      - name: Install ⚙️
        run: pnpm install --frozen-lockfile

      - name: Build packages 📦
        run: pnpm packages

      - name: Set @h5web/lib version 📌
        uses: reedyuk/npm-version@1.1.1
        with:
          version: ${{ steps.packageVersion.outputs.PACKAGE_VERSION }}
          package: 'packages/lib'

      - name: Set @h5web/app version 📌
        uses: reedyuk/npm-version@1.1.1
        with:
          version: ${{ steps.packageVersion.outputs.PACKAGE_VERSION }}
          package: 'packages/app'

      - name: Set @h5web/h5wasm version 📌
        uses: reedyuk/npm-version@1.1.1
        with:
          version: ${{ steps.packageVersion.outputs.PACKAGE_VERSION }}
          package: 'packages/h5wasm'

      # https://github.com/silx-kit/h5web/issues/1219
      - name: 'Remove `"type": "module"` from `package.json` files'
        run: |
          cd packages
          cat <<< $(pnpm --package=node-jq dlx jq "del(.type)" app/package.json) > app/package.json
          cat <<< $(pnpm --package=node-jq dlx jq "del(.type)" h5wasm/package.json) > h5wasm/package.json
          cat <<< $(pnpm --package=node-jq dlx jq "del(.type)" lib/package.json) > lib/package.json

      - name: Publish @h5web/lib 🥳
        run: cd packages/lib && pnpm publish --access public --no-git-checks --tag $NPM_TAG
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          NPM_TAG: "${{ contains(steps.packageVersion.outputs.PACKAGE_VERSION, 'beta') && 'next' || 'latest' }}"

      - name: Publish @h5web/app 🥳
        run: cd packages/app && pnpm publish --access public --no-git-checks --tag $NPM_TAG
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          NPM_TAG: "${{ contains(steps.packageVersion.outputs.PACKAGE_VERSION, 'beta') && 'next' || 'latest' }}"

      - name: Publish @h5web/h5wasm 🥳
        run: cd packages/h5wasm && pnpm publish --access public --no-git-checks --tag $NPM_TAG
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          NPM_TAG: "${{ contains(steps.packageVersion.outputs.PACKAGE_VERSION, 'beta') && 'next' || 'latest' }}"

      - name: Build Storybook 🛠️
        run: pnpm build:storybook

      - name: Deploy Storybook 🚀
        uses: JamesIves/github-pages-deploy-action@3.7.1
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH: gh-pages
          FOLDER: apps/storybook/build
          CLEAN: true
