name: Publish Pre-releases
description: 'Publish packages pre-releases to npm'

branding:
  color: 'red'
  icon: 'package'

inputs:
  tag:
    description: 'the npm dist-tag'
    required: true
  template:
    description: 'the snapshot template'
    required: true
    default: '{tag}.{datetime}'
  hasChangesets:
    description: 'are there any changesets'
    required: true
  GITHUB_TOKEN:
    description: 'GitHub Token'
    required: true
  NPM_TOKEN:
    description: 'NPM Token'
    required: true

outputs:
  tag:
    description: 'the npm dist-tag'
    value: ${{inputs.tag }}
  packages:
    description: 'markdown list of published packages and version'
    value: ${{ steps.publish.output.packages }}

runs:
  using: 'composite'
  steps:
    - name: 📝  Ensure atleast one changeset exists
      if: ${{ inputs.hasChangesets != 'true' }}
      shell: bash
      run: pnpm changeset --empty

    - name: 📦  Update packages
      shell: bash
      run: pnpm changeset version --no-git-tag --snapshot ${{ inputs.tag }} --snapshot-prerelease-template "${{ inputs.template }}"
      env:
        GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}

    - name: 📦  Update lockfile
      shell: bash
      run: pnpm install --lockfile-only --no-frozen-lockfile --prefer-offline --filter="." --filter="./packages/*" --filter="./sites/*"

    - name: 🏗️  Build packages
      shell: bash
      run: pnpm build

    - name: 🚀  Publish packages
      shell: bash
      run: |
        cat << EOF > "$HOME/.npmrc"
          //registry.npmjs.org/:_authToken=$NPM_TOKEN
        EOF
        pnpm --recursive publish --tag ${{ inputs.tag }} --no-git-checks --report-summary
      env:
        NPM_TOKEN: ${{ inputs.NPM_TOKEN }}

    - name: 💡  Publish Info
      shell: bash
      run: |
        echo "## Published packages to npm" >> $GITHUB_STEP_SUMMARY
        echo "**Dist Tag**: ${{ inputs.tag }}" >> $GITHUB_STEP_SUMMARY
        echo "**Packages**:" >> $GITHUB_STEP_SUMMARY
        jq '.publishedPackages | map("- [" +.name+"@"+.version+"](https://www.npmjs.com/package/"+.name+"/v/"+.version+")") | join("\n")' pnpm-publish-summary.json >> $GITHUB_STEP_SUMMARY
