name: Publish

on:
  push:
    branches:
      - main
      - develop
  # manual trigger for other branches
  workflow_dispatch:

permissions:
  id-token: write
  contents: write
  pull-requests: write

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  release:
    name: Release
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [20]

    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4

      - name: Setup Node ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version:  ${{ matrix.node-version }}
          registry-url: 'https://registry.npmjs.org/'

      - name: Load cached dependencies
        uses: actions/cache@v4.2.3
        id: cache
        with:
          path: |
            **/node_modules
            **/.turbo
            /home/runner/.cache/Cypress
          key: ${{ runner.os }}-node-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }}

      - name: Install Dependencies
        run: npm ci

      - name: Create Release PR or publish stable version to npm
        id: changesets
        uses: changesets/action@v1
        with:
          createGithubReleases: false
          publish: npm run publish
          version: npm run version
          title: ${{ github.ref_name == 'main' && 'Publish a new stable version'  || 'Publish a new pre-release version' }}
          commit: >-
            ${{ github.ref_name == 'main' && 'chore(release): publish a new release version'  || 'chore(release): publish a new pre-release version' }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
          NPM_CONFIG_PROVENANCE: true

      - name: Send release notification
        if: steps.changesets.outputs.published == 'true'
        id: slack
        uses: slackapi/slack-github-action@v1.27.0
        with:
          payload: |
            {
              "message": "[Tiptap Editor Release]: New Tiptap Editor version has been released to NPM."
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

      - name: Send failure notification
        if: failure()
        id: slack_failure
        uses: slackapi/slack-github-action@v1.27.0
        with:
          payload: |
            {
              "message": "[Tiptap Editor Release]: There was an issue publishing a new version. You can find the logs here: https://github.com/ueberdosis/tiptap/actions/runs/${{ github.run_id }}"
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
