# This workflow is triggered on every new release.
# It uses Gemini to generate release notes and creates a PR with the changes.
name: 'Generate Release Notes'

on:
  release:
    types: ['published']
  workflow_dispatch:
    inputs:
      version:
        description: 'New version (e.g., v1.2.3)'
        required: true
        type: 'string'
      body:
        description: 'Release notes body'
        required: true
        type: 'string'
      time:
        description: 'Release time'
        required: true
        type: 'string'

jobs:
  generate-release-notes:
    if: "github.repository == 'google-gemini/gemini-cli'"
    runs-on: 'ubuntu-latest'
    permissions:
      contents: 'write'
      pull-requests: 'write'
    steps:
      - name: 'Checkout repository'
        uses: 'actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5' # ratchet:actions/checkout@v4
        with:
          persist-credentials: false
          # The user-level skills need to be available to the workflow
          fetch-depth: 0
          ref: 'main'

      - name: 'Set up Node.js'
        uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4
        with:
          node-version: '20'

      - name: 'Get release information'
        id: 'release_info'
        run: |
          VERSION="${{ github.event.inputs.version || github.event.release.tag_name }}"
          TIME="${{ github.event.inputs.time || github.event.release.created_at }}"

          echo "VERSION=${VERSION}" >> "$GITHUB_OUTPUT"
          echo "TIME=${TIME}" >> "$GITHUB_OUTPUT"

          # Use a heredoc to preserve multiline release body
          echo 'RAW_CHANGELOG<<EOF' >> "$GITHUB_OUTPUT"
          printf "%s\n" "$BODY" >> "$GITHUB_OUTPUT"
          echo 'EOF' >> "$GITHUB_OUTPUT"
        env:
          GH_TOKEN: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
          BODY: '${{ github.event.inputs.body || github.event.release.body }}'

      - name: 'Validate version'
        id: 'validate_version'
        run: |
          if echo "${{ steps.release_info.outputs.VERSION }}" | grep -q "nightly"; then
            echo "Nightly release detected. Stopping workflow."
            echo "CONTINUE=false" >> "$GITHUB_OUTPUT"
          else
            echo "CONTINUE=true" >> "$GITHUB_OUTPUT"
          fi

      - name: 'Generate Changelog with Gemini'
        if: "steps.validate_version.outputs.CONTINUE == 'true'"
        uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0
        env:
          GEMINI_CLI_TRUST_WORKSPACE: true
        with:
          gemini_api_key: '${{ secrets.GEMINI_API_KEY }}'
          prompt: |
            Activate the 'docs-changelog' skill.

            **Release Information:**
            - New Version: ${{ steps.release_info.outputs.VERSION }}
            - Release Date: ${{ steps.release_info.outputs.TIME }}
            - Raw Changelog Data: ${{ steps.release_info.outputs.RAW_CHANGELOG }}

            Execute the release notes generation process using the information provided.

            When you are done, please output your thought process and the steps you took for future debugging purposes.

      - name: 'Create Pull Request'
        if: "steps.validate_version.outputs.CONTINUE == 'true'"
        uses: 'peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c' # ratchet:peter-evans/create-pull-request@v6
        with:
          token: '${{ secrets.GEMINI_CLI_ROBOT_GITHUB_PAT }}'
          commit-message: 'docs(changelog): update for ${{ steps.release_info.outputs.VERSION }}'
          title: 'Changelog for ${{ steps.release_info.outputs.VERSION }}'
          body: |
            This PR contains the auto-generated changelog for the ${{ steps.release_info.outputs.VERSION }} release.

            Please review and merge.

            Related to #18505
          branch: 'changelog-${{ steps.release_info.outputs.VERSION }}'
          base: 'main'
          team-reviewers: 'gemini-cli-docs, gemini-cli-maintainers'
          delete-branch: true
