name: Release

on:
  push:
    branches:
      - master

env:
  TURBO_CACHE_KEY: ubuntu-latest-16 # reuse cache key from ci workflow
  TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
  TURBO_TEAM: svelte

jobs:
  release:
    # prevents this action from running on forks
    if: github.repository == 'sveltejs/kit'
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v3
        with:
          # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits
          fetch-depth: 0
      - uses: pnpm/action-setup@v2.2.2
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
          cache: pnpm

      - run: pnpm install --frozen-lockfile
      - run: pnpm turbo run build --filter="./packages/*"

      - name: Create Release Pull Request or Publish to npm
        id: changesets
        uses: changesets/action@v1
        with:
          # This expects you to have a script called release which does a build for your packages and calls changeset publish
          publish: pnpm release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          UPDATE_TEMPLATE_SSH_KEY: ${{ secrets.UPDATE_TEMPLATE_SSH_KEY }}

      - name: Update latest tag on published packages # only needed until we release 1.0.0 and exit pre-release mode
        if: steps.changesets.outputs.published == 'true'
        # wait a bit and then run "npm dist-tag add package@version latest" for all published packages
        env:
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
          published_packages: ${{steps.changesets.outputs.publishedPackages}}
        run: |
          sleep 20
          cat << EOF > "$HOME/.npmrc"
            //registry.npmjs.org/:_authToken=$NPM_TOKEN
          EOF
          echo $published_packages | jq -r 'map((.name + "@" + .version)) | .[]' | while read pkgver; do npm dist-tag add $pkgver latest || continue;done

      # TODO alert discord
      # - name: Send a Slack notification if a publish happens
      #   if: steps.changesets.outputs.published == 'true'
      #   # You can do something when a publish happens.
      #   run: my-slack-bot send-notification --message "A new version of ${GITHUB_REPOSITORY} was published!"
