name: Create a release draft

# Caution: 
# the use of "pull_request_target" trigger allows to successfully
# run workflow even when triggered from a fork. The trigger grants
# access to repo's secrets and gives write permission to the runner.
# This can be used to run malicious code on untrusted PR, so, please
# DO NOT checkout any PR's ongoing commits (aka github.event.pull_request.head.sha)
# while using this trigger.
on:
  pull_request_target:
    branches:
      - next
    types: [closed]

jobs:
  # If pull request was merged then we should check for a package version update
  check-version-changing:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    permissions:
      actions: write
    steps:
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      # Checkout to target branch
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0

      # Get package new version name
      - name: Get package info
        id: packageNew
        uses: codex-team/action-nodejs-package-info@v1

      # Checkout to the base commit before merge
      - name: Checkout to the base commit before merge
        run: git checkout ${{ github.event.pull_request.base.sha }}

      # Get package old version name
      - name: Get package info
        id: packageOld
        uses: codex-team/action-nodejs-package-info@v1

      # Stop workflow if version was not changed
      - name: Stop workflow if version was not changed
        if: steps.packageOld.outputs.version == steps.packageNew.outputs.version
        run: |
          curl -L \
          -X POST \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/cancel

  # Create a new draft release
  release-draft:
    needs: check-version-changing
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      # Checkout to target branch
      - uses: actions/checkout@v2
        with:
          # Pull submodules
          submodules: 'recursive'

      # Setup node environment
      - uses: actions/setup-node@v1
        with:
          node-version: 16

      # Prepare, build and publish project
      - name: Install dependencies
        run: yarn

      # Build Editor.js
      - name: Build output files
        run: yarn build

      # Get package version name
      - name: Get package info
        id: package
        uses: codex-team/action-nodejs-package-info@v1

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: v${{ steps.package.outputs.version }}
          release_name: v${{ steps.package.outputs.version }}

          # Fill release description from pull request body name
          body: "${{ github.event.pull_request.title }} #${{ github.event.pull_request.number }}"

          # Save as a draft release
          draft: true

          # If version name contains "-rc" suffix than mark a "pre-release" checkbox
          prerelease: ${{ contains(steps.package.outputs.version, '-rc') }}

      # Build and upload target Editor.js UMD build to release as artifact
      - name: Upload Release Asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: dist/editorjs.umd.js
          asset_name: editorjs.umd.js
          asset_content_type: application/javascript
          
      # Build and upload target Editor.js MJS build to release as artifact
      - name: Upload Release Asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: dist/editorjs.mjs
          asset_name: editorjs.mjs
          asset_content_type: application/javascript          

      # Send a notification message
      - name: Send a message
        uses: codex-team/action-codexbot-notify@v1
        with:
          webhook: ${{ secrets.CODEX_BOT_WEBHOOK_FRONTEND }}
          message: '🦥 [Draft release v${{ steps.package.outputs.version }}](${{ steps.create_release.outputs.html_url }}) for package [${{ steps.package.outputs.name }}](${{ steps.package.outputs.npmjs-link }}) has been created. Add changelog and publish it!'
          parse_mode: 'markdown'
          disable_web_page_preview: true