diff --git a/.gemini/skills/docs-changelog/SKILL.md b/.gemini/skills/docs-changelog/SKILL.md new file mode 100644 index 0000000000..60f2415524 --- /dev/null +++ b/.gemini/skills/docs-changelog/SKILL.md @@ -0,0 +1,105 @@ +--- +name: docs-changelog +description: Provides a step-by-step procedure for generating Gemini CLI changelog files based on github release information. +--- + +# Procedure: Updating Changelog for New Releases + +The following instructions are run by Gemini CLI when processing new releases. + +## Objective + +To standardize the process of updating the Gemini CLI changelog files for a new +release, ensuring accuracy, consistency, and adherence to project style +guidelines. + +## Release Types + +This skill covers two types of releases: + +* **Standard Releases:** Regular, versioned releases that are announced to all + users. These updates modify `docs/changelogs/latest.md` and + `docs/changelogs/index.md`. +* **Preview Releases:** Pre-release versions for testing and feedback. These + updates only modify `docs/changelogs/preview.md`. + +### Expected Inputs + +Regardless of the type of release, the following information is expected: + +* **New version number:** The version number for the new release + (e.g., `v0.27.0`). +* **Release date:** The date of the new release (e.g., `2026-02-03`). +* **Raw changelog data:** A list of all pull requests and changes + included in the release, in the format `description by @author in + #pr_number`. +* **Previous version number:** The version number of the last release + (e.g., `v0.26.0`). + +## Procedure + +### Initial Setup + +1. Identify the files to be modified: + + For standard releases, update `docs/changelogs/latest.md` and + `docs/changelogs/index.md`. For preview releases, update + `docs/changelogs/preview.md`. + +2. Activate the `docs-writer` skill. + +### Analyze Raw Changelog Data + +1. Review the complete list of changes. +2. Group related changes into high-level categories such as + important features, "UI/UX Improvements", and "Bug Fixes". Use the existing + announcements in `docs/changelogs/index.md` as an example. + +### Create Highlight Summaries + +Create two distinct versions of the release highlights. + +**Important:** Carefully inspect highlights for "experimental" or +"preview" features before public announcement, and do not include them. + +#### Version 1: Comprehensive Highlights (for `latest.md` or `preview.md`) + +Write a detailed summary for each category focusing on user-facing +impact. + +#### Version 2: Concise Highlights (for `index.md`) + +Skip this step for preview releases. + +Write concise summaries including the primary PR and author +(e.g., `([#12345](link) by @author)`). + +### Update `docs/changelogs/latest.md` or `docs/changelogs/preview.md` + +1. Read current content and use `write_file` to replace it with the new + version number, date, comprehensive highlights, and the full + "What's Changed" list. + +2. For each item in the "What's Changed" list, keep usernames in plaintext, and + add github links for each issue number. Example: + + "- feat: implement /rewind command by @username in + [#12345](https://github.com/google-gemini/gemini-cli/pull/12345)" + +3. Skip entries by @gemini-cli-robot. + +4. Do not add the "New Contributors" section. + +5. Ensure lines are wrapped to 80 characters. + +### Update `docs/changelogs/index.md` + +Skip this step for preview releases. + +Insert a new "Announcements" section for the new version directly +above the previous version's section. Ensure lines are wrapped to +80 characters. + +### Finalize + +Run `npm run format` to ensure consistency. diff --git a/.github/workflows/release-notes.yml b/.github/workflows/release-notes.yml new file mode 100644 index 0000000000..13efa00b41 --- /dev/null +++ b/.github/workflows/release-notes.yml @@ -0,0 +1,74 @@ +# 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: [created] + +jobs: + generate-release-notes: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + # The user-level skills need to be available to the workflow + fetch-depth: 0 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Get release information + id: release_info + run: | + VERSION="${{ github.event.release.tag_name }}" + # Get the previous release tag + PREVIOUS_VERSION=$(gh release list --limit 1 --exclude-drafts --exclude-prereleases --json tagName -q '.[0].tagName' | sed 's/^v//') + + # Sanitize the release body to be passed as a command-line argument + # This replaces newlines with a special marker to be undone in the prompt + RAW_CHANGELOG=$(echo "${{ github.event.release.body }}" | tr '\n' '%%NEWLINE%%') + + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + echo "PREVIOUS_VERSION=$PREVIOUS_VERSION" >> $GITHUB_OUTPUT + echo "RAW_CHANGELOG=$RAW_CHANGELOG" >> $GITHUB_OUTPUT + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate Changelog with Gemini + uses: 'google-github-actions/run-gemini-cli@a3bf79042542528e91937b3a3a6fbc4967ee3c31' # ratchet:google-github-actions/run-gemini-cli@v0 + env: + VERSION: ${{ steps.release_info.outputs.VERSION }} + PREVIOUS_VERSION: ${{ steps.release_info.outputs.PREVIOUS_VERSION }} + RAW_CHANGELOG: ${{ steps.release_info.outputs.RAW_CHANGELOG }} + with: + gemini_api_key: ${{ secrets.GEMINI_API_KEY }} + prompt: | + Activate the 'docs-changelog' skill. + + **Release Information:** + - New Version: $VERSION + - Previous Version: $PREVIOUS_VERSION + - Release Date: $(date +%Y-%m-%d) + - Raw Changelog Data (newlines replaced with '%%NEWLINE%%'): $RAW_CHANGELOG + + Execute the release notes generation process using the information provided. + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.GITHUB_TOKEN }} + 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. + branch: "changelog-${{ steps.release_info.outputs.VERSION }}" + delete-branch: true \ No newline at end of file