name: Release

on:
  push:
    branches:
      - main # or whatever branch you want to use

jobs:
  release:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Check for changes in package.json
      run: |
        git diff --cached --diff-filter=d package.json || {
          echo "No changes to package.json"
          exit 1
        }
    
    - name: Get version number from package.json
      id: get_version
      run: |
        VERSION=$(jq -r '.version' package.json)
        echo "::set-output name=version::$VERSION"

    - name: Extract latest CHANGELOG entry
      id: changelog
      run: |
        CHANGELOG_CONTENT=$(awk 'BEGIN {print_section=0;} /^## \[/ {if (print_section == 0) {print_section=1;} else {exit;}} print_section {print;}' CHANGELOG.md)
        CHANGELOG_ESCAPED=$(echo "$CHANGELOG_CONTENT" | sed ':a;N;$!ba;s/\n/%0A/g')
        echo "Extracted latest release notes from CHANGELOG.md:" 
        echo -e "$CHANGELOG_CONTENT" 
        echo "::set-output name=content::$CHANGELOG_ESCAPED"

    - name: Create GitHub release
      uses: actions/github-script@v5
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
        script: |
          const changelog = `${{ steps.changelog.outputs.content }}`;
          const release = await github.rest.repos.createRelease({
            owner: context.repo.owner,
            repo: context.repo.repo,
            tag_name: `v${{ steps.get_version.outputs.version }}`,
            name: `v${{ steps.get_version.outputs.version }}`,
            body: changelog,
          })
          console.log(`Created release ${release.data.html_url}`)

    - name: Upload package to GitHub release
      uses: actions/upload-artifact@v3
      with:
        name: package
        path: .
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
