Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:07:10 +08:00
commit 169a5fc5cd
99 changed files with 25560 additions and 0 deletions

321
commands/changelog.md Normal file
View File

@@ -0,0 +1,321 @@
---
description: generate-changelog
allowed-tools: Bash, Read, Edit, Write, Glob, Grep
---
# generate-changelog
Automatically generate changelog from PR titles, commits, and tags.
## Prompt
ROLE: Changelog Generator
OBJECTIVE
Create or update CHANGELOG.md based on merged PRs, commits, and version tags following Keep a Changelog format.
INPUTS (optional)
- VERSION=<version number> (e.g., 1.2.0) (default: auto-detect from latest tag)
- SINCE=<tag or commit> (default: last version tag)
- FORMAT=keepachangelog|simple|github (default: keepachangelog)
- AUTO_COMMIT=yes|no (default: no, ask first)
CHANGELOG FORMAT
Follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) standard:
```markdown
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.2.0] - 2025-10-16
### Added
- New feature X for users to do Y (#123)
- Support for Z configuration (#125)
### Changed
- Improved performance of A by 40% (#124)
- Updated B to use new API (#126)
### Deprecated
- Old method C will be removed in v2.0 (#127)
### Removed
- Unused dependency D (#128)
### Fixed
- Bug where E caused F (#129)
- Crash when G is null (#130)
### Security
- Patched XSS vulnerability in H (#131)
## [1.1.0] - 2025-09-15
[...]
```
DATA COLLECTION
### 1. Get Version Info
```bash
# Get latest tag
git describe --tags --abbrev=0
# If no VERSION provided, suggest next version based on changes:
# - Major (2.0.0): Breaking changes
# - Minor (1.X.0): New features (Added)
# - Patch (1.1.X): Bug fixes only (Fixed)
```
### 2. Get Commits Since Last Release
```bash
git log <SINCE>..HEAD --oneline --no-merges
```
### 3. Get Merged PRs (if using GitHub)
```bash
gh pr list --state merged --base main --json number,title,mergedAt,labels
```
### 4. Parse Conventional Commits
Recognize commit prefixes:
- `feat:` or `feat(scope):`**Added**
- `fix:` or `fix(scope):`**Fixed**
- `docs:` → (skip or **Documentation**)
- `style:` → (skip)
- `refactor:`**Changed**
- `perf:`**Changed** (note performance improvement)
- `test:` → (skip)
- `chore:` → (skip unless important)
- `BREAKING CHANGE:` or exclamation mark → **Changed** (breaking) + note
- `security:`**Security**
CATEGORIZATION
### Auto-Categorize Commits
```
commit: feat(auth): add OAuth2 support (#123)
→ Added: OAuth2 authentication support (#123)
commit: fix(api): handle null user in login endpoint (#124)
→ Fixed: Crash when user is null in login endpoint (#124)
commit: perf(db): optimize user query with index (#125)
→ Changed: Improved user query performance by 50% (#125)
commit: feat(ui)!: redesign dashboard layout (#126)
→ Changed: **BREAKING** Redesigned dashboard layout (#126)
```
### Manual Review
If commit messages are unclear, suggest manual categorization:
```
Unclear commits (need categorization):
- "update stuff" (abc123)
- "fix things" (def456)
Please categorize:
1. Added / Changed / Fixed / Security? update stuff
→ [User inputs: Changed]
2. Added / Changed / Fixed / Security? fix things
→ [User inputs: Fixed]
```
BREAKING CHANGES
Detect breaking changes:
- Commit with exclamation mark after type: `feat!: new API`
- Commit with `BREAKING CHANGE:` footer
- PR label: `breaking-change`
Highlight prominently:
```markdown
### Changed
- ⚠️ **BREAKING**: Redesigned API endpoints. See migration guide. (#126)
- ...
```
VERSION SUGGESTION
Based on changes:
```
Changes detected:
- 3 Added (feat:)
- 5 Fixed (fix:)
- 1 BREAKING (feat!:)
Suggested version: 2.0.0 (MAJOR - breaking change)
Current version: 1.5.2
Accept suggested version? (YES/NO/CUSTOM)
```
CHANGELOG GENERATION
### New Changelog (if doesn't exist)
Create CHANGELOG.md with:
- Header (Keep a Changelog notice)
- `[Unreleased]` section (empty)
- `[VERSION]` section with all changes
- Footer links
### Update Existing Changelog
1. Read existing CHANGELOG.md
2. Find `## [Unreleased]` section
3. Move unreleased items to new `[VERSION]` section
4. Add new changes to `[VERSION]` section
5. Clear `[Unreleased]` section
6. Update footer links
EXAMPLE OUTPUT
```markdown
# Changelog
All notable changes to this project will be documented in this file.
## [Unreleased]
## [2.0.0] - 2025-10-16
### Added
- OAuth2 authentication support for Google and GitHub providers (#123)
- User profile settings page with avatar upload (#135)
- Dark mode toggle in user preferences (#137)
### Changed
- ⚠️ **BREAKING**: Redesigned API endpoints to RESTful structure. See [migration guide](docs/migration-v2.md). (#126)
- Improved user query performance by 50% with database indexing (#125)
- Updated UI component library from v3 to v4 (#138)
### Fixed
- Crash when user object is null in login endpoint (#124)
- Memory leak in WebSocket connection handler (#139)
- Incorrect timezone display in activity logs (#140)
### Security
- Patched XSS vulnerability in comment rendering (#131)
- Updated dependencies with known CVEs (#141)
## [1.5.2] - 2025-09-15
[Previous release...]
---
[unreleased]: https://github.com/user/repo/compare/v2.0.0...HEAD
[2.0.0]: https://github.com/user/repo/compare/v1.5.2...v2.0.0
[1.5.2]: https://github.com/user/repo/compare/v1.5.1...v1.5.2
```
WORKFLOW
1. Detect current version and changes since last release
2. Parse commits/PRs and categorize
3. Suggest next version number
4. Generate changelog entry preview (diff-first)
5. Ask: "Update CHANGELOG.md? (YES/NO)"
6. If YES:
- Update CHANGELOG.md
- Optionally commit:
```bash
git add CHANGELOG.md
git commit -m "chore(release): update CHANGELOG for v${VERSION}"
```
7. Optionally create release:
- Git tag: `git tag -a v${VERSION} -m "Release v${VERSION}"`
- GitHub release: `gh release create v${VERSION} --notes-file CHANGELOG-${VERSION}.md`
INTEGRATION
### CI Automation
Suggest adding to release workflow:
```yaml
name: Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version number (e.g., 1.2.0)'
required: true
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Get all tags
- name: Generate changelog
run: npx claude-code /AgileFlow:generate-changelog VERSION=${{ github.event.inputs.version }}
- name: Commit changelog
run: |
git config user.name "github-actions"
git config user.email "actions@github.com"
git add CHANGELOG.md
git commit -m "chore(release): update CHANGELOG for v${{ github.event.inputs.version }}"
- name: Create tag
run: git tag -a v${{ github.event.inputs.version }} -m "Release v${{ github.event.inputs.version }}"
- name: Push changes
run: |
git push origin main
git push origin v${{ github.event.inputs.version }}
- name: Create GitHub release
run: gh release create v${{ github.event.inputs.version }} --generate-notes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
### Story Integration
Create story after release:
```
US-XXXX: Post-release tasks for v${VERSION}
- [ ] Announce release (blog, social media)
- [ ] Update documentation
- [ ] Monitor error tracking for new issues
```
CUSTOMIZATION
Read project-specific settings from `.agileflow/changelog-config.json`:
```json
{
"categories": {
"feat": "Added",
"fix": "Fixed",
"perf": "Changed",
"docs": "Documentation"
},
"excludeLabels": ["wip", "draft"],
"includeAuthors": true,
"groupByScope": true
}
```
RULES
- Follow Keep a Changelog format strictly
- Include PR/issue numbers for traceability
- Highlight breaking changes prominently
- Use consistent verb tense (past tense)
- Group similar changes together
- Never remove old changelog entries
- Diff-first, YES/NO before updating
- Suggest semantic version based on changes
OUTPUT
- Version suggestion
- Changelog entry preview
- Updated CHANGELOG.md (if approved)
- Optional: Git tag and release creation