| name | changelog |
| description | Generate a changelog for a specific action or the whole repo |
Changelog
Generate a changelog from git history, either for a specific action or across the entire repository.
Arguments
<action-name> (optional): Name of a specific action directory. If omitted, shows recent activity across all actions.
Steps
1. Determine scope and gather commits
If <action-name> is provided:
test -d <action-name>
git log --format='%h %as %s' -- <action-name>/
If no argument:
git log --format='%h %as %s' -50
2. Parse and classify commits
Classify each commit by its conventional commit prefix:
- feat: New features or capabilities
- fix: Bug fixes
- chore: Maintenance, dependency updates, CI changes
- docs: Documentation changes
- refactor: Code restructuring without behavior change
- test: Test additions or modifications
- style: Formatting, whitespace, linting fixes
- perf: Performance improvements
- ci: CI/CD pipeline changes
- build: Build system changes
Commits without a conventional prefix go under other.
3. Compute date range and stats
For a specific action (replace <action-name> with the directory name):
git log --format='%as' -- <action-name>/ | sort | head -1
git log --format='%as' -- <action-name>/ | sort | tail -1
git log --oneline -- <action-name>/ | wc -l
For the whole repo (omit the path filter):
git log -n 50 --format='%as' | sort | head -1
git log -n 50 --format='%as' | sort | tail -1
git log -n 50 --oneline | wc -l
4. For whole-repo mode, show per-action activity
When no action is specified, also show which actions had the most activity:
CUTOFF_DATE=$(git log -n50 --format=%ci | tail -1)
for dir in */action.yml; do
[ -e "$dir" ] || continue
action=$(dirname "$dir")
count=$(git log --oneline --since="$CUTOFF_DATE" -- "$action/" | wc -l)
[ "$count" -gt 0 ] && printf '%s %s\n' "$count" "$action"
done | sort -rn | head -10
5. Format the changelog
For a specific action:
Changelog: <action-name>
Date range: YYYY-MM-DD to YYYY-MM-DD
Total commits: N
--------------------------------------------------
### Features
- <hash> <description> (<date>)
### Fixes
- <hash> <description> (<date>)
### Maintenance
- <hash> <description> (<date>)
### Documentation
- <hash> <description> (<date>)
### Other
- <hash> <description> (<date>)
For the whole repo:
Repository Changelog (last 50 commits)
Date range: YYYY-MM-DD to YYYY-MM-DD
--------------------------------------------------
Most active actions:
<action-name>: N commits
<action-name>: N commits
### Features
- <hash> <description> (<date>)
### Fixes
- <hash> <description> (<date>)
[...remaining groups...]
Output
A formatted changelog grouped by commit type. Empty groups are omitted. Each entry shows the short SHA, description, and date. Useful before releases or when answering "what changed in this action?"