Initial workflow and skill for changelog

generation.
This commit is contained in:
g-samroberts
2026-02-04 18:51:58 -08:00
parent 28e403ab1a
commit 12501c3e20
2 changed files with 179 additions and 0 deletions

View File

@@ -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.

74
.github/workflows/release-notes.yml vendored Normal file
View File

@@ -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