From 1495294cc07ff67d4adcb5202826d4db11a07fa4 Mon Sep 17 00:00:00 2001 From: g-samroberts <158088236+g-samroberts@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:55:46 -0800 Subject: [PATCH] Automatically generate change logs on release (#18401) Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .gemini/skills/docs-changelog/SKILL.md | 118 +++++++++++++++++++++++++ .github/workflows/release-notes.yml | 86 ++++++++++++++++++ 2 files changed, 204 insertions(+) create mode 100644 .gemini/skills/docs-changelog/SKILL.md create mode 100644 .github/workflows/release-notes.yml diff --git a/.gemini/skills/docs-changelog/SKILL.md b/.gemini/skills/docs-changelog/SKILL.md new file mode 100644 index 0000000000..2145ae2123 --- /dev/null +++ b/.gemini/skills/docs-changelog/SKILL.md @@ -0,0 +1,118 @@ +--- +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`. + +Ignore all other releases, such as nightly releases. + +### 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 can be + calculated by decreasing the minor version number by one and setting the + patch or bug fix version number. + +## 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. If it is a patch or a bug fix with few + changes, skip to the "Update `docs/changelogs/latest.md` or + `docs/changelogs/preview.md`" section. + +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, and date. + + If it is a patch or bug fix with few changes, simply add these + changes to the "What's Changed" list. Otherwise, replace 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. Update the "Full changelog:" link with the previous version and the new +version, unless it is a patch or a bug fix, in which case simply update the +link's new version and keep the previous version the same. + +6. Ensure lines are wrapped to 80 characters. + +### Update `docs/changelogs/index.md` + +Skip this step for patches, bug fixes, or 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..f1ba083ba6 --- /dev/null +++ b/.github/workflows/release-notes.yml @@ -0,0 +1,86 @@ +# 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'] + 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: + 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.inputs.version || github.event.release.tag_name }}" + BODY="${{ github.event.inputs.body || github.event.release.body }}" + 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<> "$GITHUB_OUTPUT" + echo "${BODY}" >> "$GITHUB_OUTPUT" + echo 'EOF' >> "$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 }}' + 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 + - Release Date: $TIME + - Raw Changelog Data: $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