name: Release Please

on:
  push:
    branches:
      - master

jobs:
  release-please:
    runs-on: ubuntu-latest
    steps:
      - uses: googleapis/release-please-action@v4
        id: release
        with:
          command: manifest
          token: ${{ secrets.GITHUB_TOKEN }}

      - uses: actions/checkout@v4
        if: ${{ steps.release.outputs.release_created }}

      - name: Setup Node.js
        if: ${{ steps.release.outputs.release_created }}
        uses: actions/setup-node@v4
        with:
          node-version: 'lts/hydrogen'  # Adjust this to your Node.js version

      - name: Update Node.js package versions
        if: ${{ steps.release.outputs.release_created }}
        run: |
          version="${{ steps.release.outputs.version }}"
          find . -name "package.json" -type f -print0 | while IFS= read -r -d '' file; do
            jq ".version = \"${version}\"" "$file" > temp.json && mv temp.json "$file"
          done

      - name: Update CHANGELOG.md
        if: ${{ steps.release.outputs.release_created }}
        run: |
          version="${{ steps.release.outputs.version }}"
          date=$(date +"%Y-%m-%d")
          echo -e "# Changelog\n\n## [${version}] - ${date}\n\n${{ steps.release.outputs.changelog }}\n\n$(cat CHANGELOG.md)" > CHANGELOG.md

      - name: Commit changes
        if: ${{ steps.release.outputs.release_created }}
        run: |
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          git add .
          git commit -m "chore: update versions and CHANGELOG for ${{ steps.release.outputs.version }}" || echo "No changes to commit"
          git push

      - name: Create Release
        if: ${{ steps.release.outputs.release_created }}
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.release.outputs.tag_name }}
          release_name: Release ${{ steps.release.outputs.version }}
          body: ${{ steps.release.outputs.changelog }}
          draft: false
          prerelease: false
