🎯

changelog

🎯Skill

from johnlindquist/claude

VibeIndex|
What it does

Generates and manages changelogs by extracting and categorizing git commit history, supporting release notes and project documentation.

πŸ“¦

Part of

johnlindquist/claude(50 items)

changelog

Installation

pip installInstall Python package
pip install google-generativeai
πŸ“– Extracted from docs: johnlindquist/claude
12Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Generate and manage changelogs from git history. Use for release notes, tracking breaking changes, and maintaining project history.

Overview

# Changelog Generator

Generate changelogs from git commits and manage release notes.

Prerequisites

```bash

# Git

git --version

# GitHub CLI (for release notes)

brew install gh

gh auth login

# Gemini (for AI summaries)

pip install google-generativeai

export GEMINI_API_KEY=your_api_key

```

CLI Reference

Git History Commands

```bash

# Recent commits

git log --oneline -20

# Since last tag

git log $(git describe --tags --abbrev=0)..HEAD --oneline

# Between tags

git log v1.0.0..v1.1.0 --oneline

# With full messages

git log v1.0.0..v1.1.0 --pretty=format:"%h %s%n%b"

# By author

git log --author="name" --oneline -10

# With dates

git log --format="%h %ad %s" --date=short

```

Finding Tags

```bash

# List all tags

git tag

# List tags with dates

git tag --sort=-creatordate --format='%(refname:short) %(creatordate:short)'

# Latest tag

git describe --tags --abbrev=0

# Tags matching pattern

git tag -l "v1.*"

```

Generating Changelogs

#### From Git Log

```bash

# Simple changelog since tag

git log v1.0.0..HEAD --oneline > CHANGELOG_DRAFT.md

# Categorized by conventional commits

git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* feat:"

git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* fix:"

git log v1.0.0..HEAD --oneline | grep "^[a-f0-9]* chore:"

```

#### Using GitHub CLI

```bash

# Generate release notes

gh release create v1.1.0 --generate-notes

# View release notes draft

gh release create v1.1.0 --generate-notes --notes-start-tag v1.0.0 --dry-run

# From existing release

gh release view v1.0.0

```

AI-Generated Changelog

```bash

# Get commits since last tag

COMMITS=$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%s%n%b")

# Generate polished changelog

gemini -m pro -o text -e "" "Generate a changelog from these commits:

$COMMITS

Format as:

[Version] - Date

Added

  • New features

Changed

  • Modifications

Fixed

  • Bug fixes

Breaking Changes

  • Any breaking changes

Write user-friendly descriptions, not raw commit messages."

```

Workflow Patterns

Release Preparation

```bash

#!/bin/bash

VERSION=$1

LAST_TAG=$(git describe --tags --abbrev=0)

echo "# Release $VERSION"

echo ""

echo "Changes since $LAST_TAG:"

echo ""

# Categorize commits

echo "## Features"

git log $LAST_TAG..HEAD --oneline | grep -i "feat:" | sed 's/^[a-f0-9]* feat: /- /'

echo ""

echo "## Fixes"

git log $LAST_TAG..HEAD --oneline | grep -i "fix:" | sed 's/^[a-f0-9]* fix: /- /'

echo ""

echo "## Other"

git log $LAST_TAG..HEAD --oneline | grep -v -i "feat:\|fix:" | sed 's/^[a-f0-9]* /- /'

```

Breaking Changes Detection

```bash

# Find breaking changes in commit messages

git log v1.0.0..HEAD --oneline | grep -i "breaking\|BREAKING"

# Find in commit bodies

git log v1.0.0..HEAD --grep="BREAKING" --pretty=format:"%h %s"

```

Maintaining CHANGELOG.md

Standard format (Keep a Changelog):

```markdown

# Changelog

All notable changes to this project will be documented in this file.

[Unreleased]

Added

  • New feature X

Changed

  • Updated Y

Fixed

  • Bug in Z

[1.1.0] - 2024-01-15

Added

  • Feature A
  • Feature B

Fixed

  • Issue #123

```

Update Script

```bash

#!/bin/bash

VERSION=$1

DATE=$(date +%Y-%m-%d)

# Generate new section

NEW_SECTION="## [$VERSION] - $DATE

$(git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s")

"

# Prepend to changelog (after header)

head -7 CHANGELOG.md > CHANGELOG_NEW.md

echo "" >> CHANGELOG_NEW.md

echo "$NEW_SECTION" >> CHANGELOG_NEW.md

echo "" >> CHANGELOG_NEW.md

tail -n +8 CHANGELOG.md >> CHANGELOG_NEW.md

mv CHANGELOG_NEW.md CHANGELOG.md

```

Statistics

```bash

# Commits by author since tag

git shortlog -sn v1.0.0..HEAD

# Files changed

git diff --stat v1.0.0..HEAD | tail -1

# Commits per day

git log --format="%ad" --date=short v1.0.0..HEAD | sort | uniq -c

# Most changed files

git diff --stat v1.0.0..HEAD | sort -k3 -n -r | head -10

```

GitHub Releases

```bash

# Create release with notes

gh release create v1.1.0 --title "v1.1.0" --notes-file RELEASE_NOTES.md

# Create from tag with auto-notes

gh release create v1.1.0 --generate-notes

# Edit existing release

gh release edit v1.1.0 --notes-file UPDATED_NOTES.md

# List releases

gh release list

# Download release assets

gh release download v1.1.0

```

Best Practices

  1. Use conventional commits - Enables automatic categorization
  2. Tag releases - Clean boundaries for changelogs
  3. Write for users - Translate technical to user impact
  4. Note breaking changes - Prominently marked
  5. Include issue references - Link to related issues
  6. Date your releases - Clear timeline
  7. Keep unreleased section - Track ongoing work