@theihtisham/ai-release-notes 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/.editorconfig +12 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.yml +43 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.yml +33 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +18 -0
  5. package/.github/dependabot.yml +16 -0
  6. package/.github/workflows/ci.yml +24 -0
  7. package/CODE_OF_CONDUCT.md +27 -0
  8. package/LICENSE +21 -21
  9. package/README.md +126 -1493
  10. package/SECURITY.md +22 -0
  11. package/__tests__/analyzer.test.js +63 -63
  12. package/__tests__/categorizer.test.js +93 -93
  13. package/__tests__/config.test.js +92 -92
  14. package/__tests__/formatter.test.js +63 -63
  15. package/__tests__/formatters.test.js +394 -394
  16. package/__tests__/migration.test.js +322 -322
  17. package/__tests__/semver.test.js +94 -94
  18. package/__tests__/tones.test.js +252 -252
  19. package/action.yml +113 -113
  20. package/index.js +73 -73
  21. package/package.json +47 -41
  22. package/src/ai-writer.js +108 -108
  23. package/src/analyzer.js +232 -232
  24. package/src/analyzers/migration.js +355 -355
  25. package/src/categorizer.js +182 -182
  26. package/src/config.js +162 -162
  27. package/src/constants.js +137 -137
  28. package/src/contributor.js +144 -144
  29. package/src/diff-analyzer.js +202 -202
  30. package/src/formatter.js +336 -336
  31. package/src/formatters/discord.js +174 -174
  32. package/src/formatters/html.js +195 -195
  33. package/src/formatters/index.js +42 -42
  34. package/src/formatters/markdown.js +123 -123
  35. package/src/formatters/slack.js +176 -176
  36. package/src/formatters/twitter.js +242 -242
  37. package/src/formatters/types.js +48 -48
  38. package/src/generator.js +297 -297
  39. package/src/integrations/changelog.js +125 -125
  40. package/src/integrations/discord.js +96 -96
  41. package/src/integrations/github-release.js +75 -75
  42. package/src/integrations/indexer.js +119 -119
  43. package/src/integrations/slack.js +112 -112
  44. package/src/integrations/twitter.js +128 -128
  45. package/src/logger.js +52 -52
  46. package/src/prompts.js +210 -210
  47. package/src/rate-limiter.js +92 -92
  48. package/src/semver.js +129 -129
  49. package/src/tones/casual.js +114 -114
  50. package/src/tones/humorous.js +164 -164
  51. package/src/tones/index.js +38 -38
  52. package/src/tones/professional.js +125 -125
  53. package/src/tones/technical.js +164 -164
  54. package/src/tones/types.js +26 -26
  55. package/jest.config.js +0 -10
package/README.md CHANGED
@@ -1,1493 +1,126 @@
1
- <div align="center">
2
-
3
- # AI Release Notes
4
-
5
- ### _Stop writing release notes. Start shipping them._
6
-
7
- **Ship beautiful release notes in 30 seconds.**
8
-
9
- AI-powered. Multi-format. Auto migration guides. 4 tone modes. 9 languages. Works with any stack.
10
-
11
- [![GitHub Actions](https://img.shields.io/badge/GitHub-Action-2088FF?style=for-the-badge&logo=github-actions&logoColor=white)](https://github.com/features/actions)
12
- [![npm version](https://img.shields.io/npm/v/@theihtisham/ai-release-notes?style=for-the-badge&logo=npm&logoColor=white&color=CB3847)](https://www.npmjs.com/package/@theihtisham/ai-release-notes)
13
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT)
14
- [![Tests](https://img.shields.io/badge/Tests-148%20passing-brightgreen?style=for-the-badge)]()
15
- [![OpenAI Compatible](https://img.shields.io/badge/AI-OpenAI%20Compatible-412991?style=for-the-badge&logo=openai&logoColor=white)]()
16
-
17
- <br />
18
-
19
- [Features](#-features) &bull; [Quick Start](#-quick-start-30-seconds) &bull; [Examples](#-output-examples) &bull; [Configuration](#-configuration) &bull; [Architecture](#-architecture) &bull; [Contributing](#-contributing)
20
-
21
- <br /><br />
22
-
23
- </div>
24
-
25
- ---
26
-
27
- ## Imagine This
28
-
29
- Your team just shipped v2.1.0. Three features, two bug fixes, one breaking change. Your PM wants release notes. Your Twitter needs an announcement. Slack needs a heads-up. Discord needs the changelog. And there's a migration guide to write.
30
-
31
- Normally that's 2 hours of copy-paste hell. With AI Release Notes, it's 30 seconds.
32
-
33
- **One command. Six formats. Zero effort.**
34
-
35
- ```
36
- npx @theihtisham/ai-release-notes --from=v2.0.0 --to=v2.1.0 --tone=professional --language=en
37
-
38
- API v2.1.0 Generated in 4.2s
39
- MD release-notes.md .............. 2.1 KB
40
- HTML release-notes.html ............ 4.8 KB
41
- Slack 12 blocks, 3 actions ........ ready
42
- Discord 4 embeds, 3 colors ........ ready
43
- Twitter 7-tweet thread ............. ready
44
- Migration 1 guide, before/after ... ready
45
-
46
- Done. Ship it.
47
- ```
48
-
49
- ---
50
-
51
- ### What You Get
52
-
53
- **Professional Markdown** -- the release notes that land on your GitHub Releases page:
54
-
55
- ```
56
- +------------------------------------------------------------------+
57
- | Release v2.1.0 |
58
- | January 15, 2025 |
59
- +------------------------------------------------------------------+
60
- | |
61
- | We are pleased to announce v2.1.0, featuring significant |
62
- | improvements to security and performance across the platform. |
63
- | |
64
- | Summary: 3 features | 2 bug fixes | 1 breaking change |
65
- | |
66
- +==================================================================+
67
- | BREAKING CHANGES |
68
- +==================================================================+
69
- | |
70
- | Removed deprecated /api/v1/users endpoint |
71
- | Scope: api | Severity: major |
72
- | Migration: Use /api/v2/users instead |
73
- | PR #40 by @sarah |
74
- | |
75
- | Before: fetch('/api/v1/users') |
76
- | After: fetch('/api/v2/users') |
77
- | |
78
- +==================================================================+
79
- | NEW FEATURES |
80
- +==================================================================+
81
- | |
82
- | + User avatar upload API ................. [api] #42 @alice |
83
- | + Dark mode toggle ........................ [ui] #43 @bob |
84
- | + Pagination on list endpoints ......... [api] #44 @charlie |
85
- | |
86
- +==================================================================+
87
- | PERFORMANCE |
88
- +==================================================================+
89
- | |
90
- | * API response time -40% (340ms -> 204ms) .............. #47 |
91
- | * Bundle size -23% (1.2MB -> 924KB) ................... #48 |
92
- | |
93
- +==================================================================+
94
- | BUG FIXES |
95
- +==================================================================+
96
- | |
97
- | * Login timeout on slow connections ......... [auth] #45 @dave |
98
- | * Memory leak in event listeners ........... [core] #46 @eve |
99
- | |
100
- +==================================================================+
101
- | CONTRIBUTORS |
102
- +==================================================================+
103
- | |
104
- | @alice (3) @bob (2) @charlie (1) @dave (1) @eve (1) |
105
- | @sarah (2) |
106
- | |
107
- | Full Changelog: v2.0.0...v2.1.0 |
108
- +------------------------------------------------------------------+
109
- ```
110
-
111
- **Casual Slack notification** -- what your team sees in #releases:
112
-
113
- ```
114
- +------------------------------------------------------------------+
115
- | #releases |
116
- +------------------------------------------------------------------+
117
- | |
118
- | :rocket: v2.1.0 just dropped! |
119
- | Hey team! 3 new features, 2 bug squashes, and heads up -- |
120
- | 1 breaking change. |
121
- | |
122
- | :warning: Heads up! |
123
- | /api/v1/users is gone -> use /api/v2/users instead |
124
- | |
125
- | :star: What's New: |
126
- | * Avatar uploads! Your users can finally upload profile pics. |
127
- | About time, right? #42 |
128
- | * Dark mode! Because everyone asked for it. #43 |
129
- | * Pagination! Every list endpoint now has proper pagination. #44 |
130
- | |
131
- | :bug: Bug Squashes: |
132
- | * Login no longer times out on slow connections #45 |
133
- | * Killed a sneaky memory leak (~2MB/hr). Oops. #46 |
134
- | |
135
- | :clap: Shoutout: @alice @bob (first PR!) @charlie (first PR!) |
136
- | |
137
- | [View Full Release Notes] [View Changelog] |
138
- +------------------------------------------------------------------+
139
- ```
140
-
141
- **Humorous Discord announcement** -- for community-driven projects:
142
-
143
- ```
144
- +------------------------------------------------------------------+
145
- | #announcements Discord |
146
- +------------------------------------------------------------------+
147
- | |
148
- | :drum: v2.1.0 has landed! |
149
- | |
150
- | Plot twist: we removed /api/v1/users. |
151
- | Don't panic. /api/v2/users has been there all along. |
152
- | Like that friend who was always there but you ignored. |
153
- | |
154
- | Things That Are New and Shiny: |
155
- | + Avatars! Because you're all beautiful. #42 |
156
- | + Dark mode. Yes. Finally. You're welcome. #43 |
157
- | + Pagination. Because nobody needs 10,000 results at once. #44 |
158
- | |
159
- | Bugs We Sent to Bug Heaven: |
160
- | * That login timeout? Gone. Rest in peace. #45 |
161
- | * Memory leak plugged. No more leaky pipes. #46 |
162
- | |
163
- | Things Nobody Sees But Everyone Needs: |
164
- | * API responses are 40% faster. 340ms -> 204ms. Zoom zoom. #47 |
165
- | * Bundle is 23% smaller. We went on a diet. #48 |
166
- | |
167
- | Contributors: @alice @bob :star: @charlie :star: @dave @eve |
168
- | |
169
- | [Changelog] [npm install pkg@2.1.0] |
170
- +------------------------------------------------------------------+
171
- ```
172
-
173
- **Twitter/X thread** -- for major releases:
174
-
175
- ```
176
- +------------------------------------------------------------------+
177
- | @yourproject |
178
- +------------------------------------------------------------------+
179
- | 1/7 v2.1.0 is HERE. |
180
- | |
181
- | 3 features. 2 bug fixes. 40% faster APIs. |
182
- | The biggest update since our launch. |
183
- | |
184
- | Here's everything (and one breaking change): >>> |
185
- +------------------------------------------------------------------+
186
- | 2/7 :rocket: New in v2.1.0: |
187
- | |
188
- | * Avatar uploads (JPEG, PNG, WebP up to 5MB) #42 |
189
- | * Dark mode (system-aware, respects OS preference) #43 |
190
- | * Pagination on ALL list endpoints (50/page default) #44 |
191
- +------------------------------------------------------------------+
192
- | 3/7 :zap: Performance: |
193
- | |
194
- | API response time: 340ms -> 204ms (-40%) |
195
- | Bundle size: 1.2MB -> 924KB (-23%) |
196
- | |
197
- | That's not a typo. Your app just got faster. |
198
- +------------------------------------------------------------------+
199
- | 4/7 :rotating_light: BREAKING CHANGE: |
200
- | |
201
- | /api/v1/users is GONE. |
202
- | Use /api/v2/users instead. |
203
- | Migration guide in the full release notes. |
204
- +------------------------------------------------------------------+
205
- | 5/7 Contributors this release: |
206
- | |
207
- | @alice (3 commits) |
208
- | @bob (2 commits) - FIRST TIME CONTRIBUTOR! |
209
- | @charlie (1 commit) - FIRST TIME! |
210
- | @dave @eve @sarah |
211
- +------------------------------------------------------------------+
212
- | 6/7 Full changelog: |
213
- | github.com/theihtisham/app/compare/v2.0.0...v2.1.0 |
214
- | |
215
- | #ReleaseNotes #OpenSource #Changelog #BreakingChange |
216
- +------------------------------------------------------------------+
217
- | 7/7 That's v2.1.0! |
218
- | |
219
- | npm install your-package@2.1.0 |
220
- | |
221
- | Star us on GitHub if this saved you time! |
222
- +------------------------------------------------------------------+
223
- ```
224
-
225
- **Auto-generated migration guide** -- with real before/after code:
226
-
227
- ```
228
- +------------------------------------------------------------------+
229
- | Migration Guide: v2.0.0 -> v2.1.0 |
230
- +------------------------------------------------------------------+
231
- | |
232
- | This guide covers 1 breaking change. |
233
- | Estimated migration time: 5 minutes. |
234
- | |
235
- +==================================================================+
236
- | 1. Removed deprecated /api/v1/users endpoint |
237
- +==================================================================+
238
- | |
239
- | Scope: api | Severity: major | PR: #40 | Author: @sarah |
240
- | |
241
- | BEFORE (v2.0.0): |
242
- | +---------------------------------------------------+ |
243
- | | // Old usage - will now return 404 | |
244
- | | const response = await fetch('/api/v1/users', { | |
245
- | | headers: { 'Authorization': `Bearer ${token}` } | |
246
- | | }); | |
247
- | | const users = await response.json(); | |
248
- | +---------------------------------------------------+ |
249
- | |
250
- | AFTER (v2.1.0): |
251
- | +---------------------------------------------------+ |
252
- | | // Updated to v2 API - pagination included | |
253
- | | const response = await fetch('/api/v2/users', { | |
254
- | | headers: { 'Authorization': `Bearer ${token}` } | |
255
- | | }); | |
256
- | | const { data: users, meta } = await response.json()| |
257
- | | // meta.pagination has total pages, current page | |
258
- | +---------------------------------------------------+ |
259
- | |
260
- | Steps: |
261
- | 1. Replace all /api/v1/users calls with /api/v2/users |
262
- | 2. Handle new { data, meta } response wrapper |
263
- | 3. Update client SDK calls (SDK v3.0+ required) |
264
- | 4. Remove v1-specific query params (?all=true no longer works) |
265
- | |
266
- | Timeline: |
267
- | - v2.1.0 (now): v1 returns 404 with migration header |
268
- | - v2.2.0: v1 removed from routing entirely |
269
- | - v3.0.0: No backward compatibility |
270
- | |
271
- +------------------------------------------------------------------+
272
- ```
273
-
274
- **Multi-language output** -- ship globally, in 9 languages:
275
-
276
- ```
277
- +------------------------------------------------------------------+
278
- | Espanol (es) |
279
- +------------------------------------------------------------------+
280
- | |
281
- | Notas de la version v2.1.0 |
282
- | |
283
- | Nos complace anunciar la version 2.1.0, que incluye |
284
- | mejoras significativas de seguridad y rendimiento. |
285
- | |
286
- | Resumen: 3 nuevas funciones | 2 correcciones | 1 cambio radical |
287
- | |
288
- | :rotating_light: Cambios radicales |
289
- | Se elimino el endpoint /api/v1/users |
290
- | Migracion: Use /api/v2/users |
291
- | |
292
- | Nuevas funciones |
293
- | + Carga de avatar de usuario ............. [api] #42 |
294
- | + Alternar modo oscuro .................. [ui] #43 |
295
- | + Paginacion en endpoints de lista ..... [api] #44 |
296
- +------------------------------------------------------------------+
297
-
298
- +------------------------------------------------------------------+
299
- | Japanese (ja) |
300
- +------------------------------------------------------------------+
301
- | |
302
- | v2.1.0 |
303
- | |
304
- | セキュリティとパフォーマンスの大幅な改善が含まれています。 |
305
- | |
306
- | 概要: 3つの新機能 | 2つのバグ修正 | 1つの破壊的変更 |
307
- | |
308
- | :rotating_light: 破壊的変更 |
309
- | /api/v1/usersエンドポイントを削除しました |
310
- | マイグレーション: /api/v2/usersをご使用ください |
311
- | |
312
- | 新機能 |
313
- | + ユーザーアバターアップロードAPI .......... [api] #42 |
314
- | + ダークモード切り替え ...................... [ui] #43 |
315
- | + リストエンドポイントのページネーション ... [api] #44 |
316
- +------------------------------------------------------------------+
317
- ```
318
-
319
- ---
320
-
321
- ## The Problem with Release Notes
322
-
323
- Release notes are the **first thing users see** after an update. Yet most teams treat them like an afterthought.
324
-
325
- You just shipped a feature your team spent weeks building. Your release notes?
326
-
327
- ```
328
- * fix typo
329
- * update deps
330
- * add feature
331
- * more fixes
332
- ```
333
-
334
- Your users see a wall of commits and **close the tab**.
335
-
336
- | Tool | The Problem | Users' Reaction |
337
- |:------|:------------|:----------------|
338
- | **GitHub Auto-Generated** | Raw commit list copy-pasted. No context. No structure. Just SHA hashes and merge titles. | "What does this even mean?" |
339
- | **Manual Writing** | Staring at a blank screen for 2 hours. Takes forever. Always behind schedule. | "Why are these always late?" |
340
- | **semantic-release** | Robot-speak changelog with zero personality. Technically correct, humanly incomprehensible. | Developers skip reading them |
341
- | **Keep a Changelog** | Great format template -- still blank. YOU still write every single word yourself. | Good luck maintaining it |
342
- | **standard-version** | Dumps conventional commits into a file. Not release notes. Not shareable. Not social. | Technically correct, useless |
343
- | **Release Drafter** | Only groups PRs by label. No AI understanding. No multi-format. No migration guides. | Better than nothing, barely |
344
-
345
- **Every tool either generates garbage or makes you do all the work.**
346
-
347
- ### The Solution
348
-
349
- ```
350
- +-----------------------------------------------------------------+
351
- | |
352
- | git push --> AI analyzes commits --> Beautiful release notes |
353
- | | | | |
354
- | | 30 seconds 6 formats |
355
- | v v v |
356
- | tag v2.1.0 OpenAI / local MD / HTML / Slack |
357
- | 148 tests proven Discord / Twitter |
358
- | / Migration |
359
- +-----------------------------------------------------------------+
360
- ```
361
-
362
- AI Release Notes reads your git history, **understands what changed and why**, and generates beautiful, contextual release notes -- in any format, with any tone, with migration guides for breaking changes -- automatically.
363
-
364
- No templates to fill. No blank pages. No copy-pasting commit messages.
365
-
366
- ---
367
-
368
- ## Features
369
-
370
- | Category | Feature | Details |
371
- |:---------|:--------|:--------|
372
- | :brain: **AI Engine** | OpenAI-compatible engine | Works with OpenAI, Azure, Ollama, LM Studio, any compatible API |
373
- | :brain: **AI Engine** | Works without AI key | Falls back to intelligent template-based generation -- still beautiful |
374
- | :brain: **AI Engine** | Contextual understanding | Doesn't copy commit messages -- understands what changed and why |
375
- | :gear: **Formats** | Markdown | Full GitHub/GitLab release notes with tables, collapsibles, formatting |
376
- | :gear: **Formats** | HTML | Email-ready with inline CSS, responsive, color-coded sections |
377
- | :gear: **Formats** | Slack Block Kit | Interactive blocks with action buttons and rich formatting |
378
- | :gear: **Formats** | Discord Rich Embeds | Color-coded embeds with field layout and contributor badges |
379
- | :gear: **Formats** | Twitter/X Thread | 7-tweet threads optimized for engagement and virality |
380
- | :gear: **Formats** | Compact Mode | Minimal format for changelogs, feeds, and SMS |
381
- | :theater: **Tone** | Professional | Enterprise-ready, formal language, structured sections |
382
- | :theater: **Tone** | Casual | Friendly, approachable, personality-first |
383
- | :theater: **Tone** | Humorous | Fun, engaging, community-friendly, meme-aware |
384
- | :theater: **Tone** | Technical | Precise, detailed, developer-focused with code references |
385
- | :rotating_light: **Breaking** | 5 detection methods | `!` suffix, BREAKING CHANGE footer, `breaking:` prefix, API keywords, code analysis |
386
- | :rotating_light: **Breaking** | Auto migration guides | Before/after code, step-by-step instructions, deprecation timeline |
387
- | :rotating_light: **Breaking** | Severity classification | major / minor / patch severity per breaking change |
388
- | :globe_with_meridians: **i18n** | 9 languages | EN, ES, FR, DE, JA, ZH, KO, PT, RU |
389
- | :globe_with_meridians: **i18n** | Automatic detection | Detects repository language settings automatically |
390
- | :rocket: **CI/CD** | GitHub Action | One-step workflow integration with 20+ config options |
391
- | :rocket: **CI/CD** | CLI (npx) | Zero-install, run from anywhere, pipe output anywhere |
392
- | :rocket: **CI/CD** | Node.js library | Full programmatic API for custom integrations |
393
- | :rocket: **CI/CD** | Webhook delivery | Auto-post to Slack, Discord, Twitter after generation |
394
- | :bar_chart: **Analysis** | Semver-aware | Calculates version bumps from commit types automatically |
395
- | :bar_chart: **Analysis** | Conventional commits | Full support: feat, fix, docs, refactor, perf, test, chore, ci, build, style, revert |
396
- | :bar_chart: **Analysis** | Diff statistics | Lines added/removed, files changed, contributor breakdown |
397
- | :bar_chart: **Analysis** | Auto versioning | Calculate next version from commit history |
398
- | :bar_chart: **Analysis** | Screenshot detection | Auto-finds and includes screenshots from PR bodies |
399
- | :bar_chart: **Analysis** | Custom categories | Define your own commit grouping rules with JSON patterns |
400
- | :white_check_mark: **Quality** | 148 tests | Comprehensive test suite covering all features and edge cases |
401
- | :white_check_mark: **Quality** | Zero config | Works out of the box with sensible defaults |
402
- | :white_check_mark: **Quality** | Dry run mode | Preview notes without creating a release |
403
-
404
- ---
405
-
406
- ## Comparison
407
-
408
- How does AI Release Notes stack up against every popular alternative?
409
-
410
- | Feature | AI Release Notes | semantic-release | standard-version | GitHub Auto-Gen | Release Drafter | Keep a Changelog |
411
- |:--------|:---:|:---:|:---:|:---:|:---:|:---:|
412
- | **AI-generated descriptions** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
413
- | **Output formats** | :white_check_mark: 6 formats | 1 format | 1 format | 1 format | 1 format | Manual |
414
- | **Tone control** | :white_check_mark: 4 tones | :x: | :x: | :x: | :x: | :x: |
415
- | **Auto migration guides** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
416
- | **Twitter/X threads** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
417
- | **Slack Block Kit** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
418
- | **Discord Rich Embeds** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
419
- | **HTML/email output** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
420
- | **Breaking change detection** | :white_check_mark: 5 methods | Basic (1) | Basic (1) | Basic | :x: | :x: |
421
- | **Before/after code examples** | :white_check_mark: Auto | :x: | :x: | :x: | :x: | :x: |
422
- | **Multi-language** | :white_check_mark: 9 langs | English | English | English | English | Manual |
423
- | **Custom categories** | :white_check_mark: JSON | :x: | :x: | :x: | Labels | :x: |
424
- | **Screenshot detection** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
425
- | **Works without AI key** | :white_check_mark: | N/A | N/A | N/A | N/A | N/A |
426
- | **Zero config** | :white_check_mark: | :x: Complex | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: Manual |
427
- | **CLI tool (npx)** | :white_check_mark: | :x: | :white_check_mark: | :x: | :x: | :x: |
428
- | **Node.js API** | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: |
429
- | **Auto-post to Slack** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
430
- | **Auto-post to Discord** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
431
- | **First-time contributor highlight** | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
432
- | **Price** | **Free** | Free | Free | Free | Free | Free |
433
-
434
- > :trophy: **TL;DR**: If you want AI-powered, multi-format, multi-tone release notes with migration guides and social posts, nothing else comes close.
435
-
436
- ---
437
-
438
- ## Install
439
-
440
- ```bash
441
- # npm
442
- npm install @theihtisham/ai-release-notes
443
-
444
- # Or run instantly (no install needed)
445
- npx @theihtisham/ai-release-notes --from=v1.0.0
446
- ```
447
-
448
- ## Quick Start (30 Seconds)
449
-
450
- Two paths. Both take under 2 minutes.
451
-
452
- ### Path A: GitHub Action
453
-
454
- #### Step 1: Create the workflow file
455
-
456
- Create `.github/workflows/release-notes.yml`:
457
-
458
- ```yaml
459
- name: Release Notes
460
-
461
- on:
462
- push:
463
- tags: ['v*'] # matches v1.0.0, v2.1.3, etc.
464
- workflow_dispatch: # also allows manual trigger
465
-
466
- permissions:
467
- contents: write # needed to create GitHub Releases
468
-
469
- jobs:
470
- release:
471
- runs-on: ubuntu-latest
472
- steps:
473
- # fetch-depth: 0 is REQUIRED -- the analyzer needs full git history
474
- - uses: actions/checkout@v4
475
- with:
476
- fetch-depth: 0
477
-
478
- - name: Generate AI Release Notes
479
- uses: theihtisham/ai-release-notes@v1
480
- with:
481
- github-token: ${{ secrets.GITHUB_TOKEN }}
482
- api-key: ${{ secrets.OPENAI_API_KEY }} # Optional - works without it
483
- template: default
484
- language: en
485
- ```
486
-
487
- Push a tag. Get beautiful release notes. That's it.
488
-
489
- <details>
490
- <summary><strong>:scroll: Full workflow with all integrations</strong></summary>
491
-
492
- ```yaml
493
- name: Release Notes
494
-
495
- on:
496
- push:
497
- tags: ['v*']
498
- workflow_dispatch:
499
- inputs:
500
- version:
501
- description: 'Version to release (e.g. v1.2.0)'
502
- required: false
503
-
504
- permissions:
505
- contents: write
506
-
507
- jobs:
508
- release:
509
- runs-on: ubuntu-latest
510
- steps:
511
- - uses: actions/checkout@v4
512
- with:
513
- fetch-depth: 0
514
-
515
- - name: Generate & Publish Release Notes
516
- uses: theihtisham/ai-release-notes@v1
517
- with:
518
- # Required
519
- github-token: ${{ secrets.GITHUB_TOKEN }}
520
-
521
- # AI Configuration (optional -- works without)
522
- api-key: ${{ secrets.OPENAI_API_KEY }}
523
- api-base: https://api.openai.com/v1
524
- model: gpt-4o-mini
525
-
526
- # Output Configuration
527
- template: detailed
528
- language: en
529
-
530
- # Commit Analysis
531
- commit-mode: auto
532
- max-commits: 200
533
- categories: auto
534
-
535
- # Version Configuration
536
- version-from: tag
537
-
538
- # Content Sections
539
- include-breaking: true
540
- include-contributors: true
541
- include-diff-stats: true
542
- include-screenshots: true
543
-
544
- # Integrations
545
- slack-webhook: ${{ secrets.SLACK_WEBHOOK }}
546
- discord-webhook: ${{ secrets.DISCORD_WEBHOOK }}
547
- update-changelog: true
548
- changelog-path: CHANGELOG.md
549
-
550
- # Twitter (all 4 required if any provided)
551
- # twitter-consumer-key: ${{ secrets.TWITTER_KEY }}
552
- # twitter-consumer-secret: ${{ secrets.TWITTER_SECRET }}
553
- # twitter-access-token: ${{ secrets.TWITTER_TOKEN }}
554
- # twitter-access-secret: ${{ secrets.TWITTER_TOKEN_SECRET }}
555
-
556
- dry-run: false
557
- ```
558
-
559
- </details>
560
-
561
- #### Step 2: Add your secrets
562
-
563
- Go to **Settings > Secrets and variables > Actions** and add:
564
-
565
- | Secret | When Required | Where to Get It |
566
- |:-------|:--------------|:----------------|
567
- | `GITHUB_TOKEN` | Always | Auto-provided by GitHub Actions. No setup needed. |
568
- | `OPENAI_API_KEY` | For AI-powered notes | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) |
569
- | `SLACK_WEBHOOK` | For Slack auto-post | [api.slack.com/messaging/webhooks](https://api.slack.com/messaging/webhooks) |
570
- | `DISCORD_WEBHOOK` | For Discord auto-post | Server Settings > Integrations > Webhooks |
571
-
572
- #### Step 3: Push a tag
573
-
574
- ```bash
575
- git tag v1.2.0
576
- git push origin v1.2.0
577
- ```
578
-
579
- The action will analyze commits, detect breaking changes, generate release notes, create a GitHub Release, post to Slack/Discord if configured, and update your CHANGELOG.md.
580
-
581
- ---
582
-
583
- ### Path B: CLI (Zero Install)
584
-
585
- ```bash
586
- # Basic: auto-detect versions from git tags
587
- npx @theihtisham/ai-release-notes --github-token=$GITHUB_TOKEN --api-key=$OPENAI_API_KEY
588
-
589
- # Specific version range
590
- npx @theihtisham/ai-release-notes --from=v1.0.0 --to=v2.0.0 --api-key=sk-xxx
591
-
592
- # Casual tone for Slack
593
- npx @theihtisham/ai-release-notes --template=casual --format=slack --from=v2.0.0
594
-
595
- # Humorous tone in Japanese
596
- npx @theihtisham/ai-release-notes --tone=humorous --language=ja --from=v1.0.0
597
-
598
- # Dry run - preview without creating a release
599
- npx @theihtisham/ai-release-notes --from=v1.0.0 --dry-run
600
-
601
- # Works without AI key (template-based generation)
602
- npx @theihtisham/ai-release-notes --from=v1.0.0
603
-
604
- # Save to file
605
- npx @theihtisham/ai-release-notes --from=v1.0.0 > RELEASE_NOTES.md
606
-
607
- # Pipe to clipboard (macOS)
608
- npx @theihtisham/ai-release-notes --from=v1.0.0 | pbcopy
609
-
610
- # Post to custom endpoint
611
- npx @theihtisham/ai-release-notes --from=v1.0.0 --format=json | curl -X POST -d @- https://api.example.com/releases
612
- ```
613
-
614
- <details>
615
- <summary><strong>:terminal: All CLI flags</strong></summary>
616
-
617
- ```
618
- Usage: ai-release-notes [options]
619
-
620
- Options:
621
- --from <tag> Starting tag/commit (required)
622
- --to <tag> Ending tag/commit (default: HEAD)
623
- --api-key <key> OpenAI-compatible API key (optional)
624
- --api-base <url> Custom API base URL (default: https://api.openai.com/v1)
625
- --model <name> AI model (default: gpt-4o-mini)
626
- --tone <mode> Tone: professional, casual, humorous, technical
627
- --language <code> Language: en, es, fr, de, ja, zh, ko, pt, ru
628
- --template <name> Template: default, minimal, detailed, enterprise, fun
629
- --format <fmt> Output: markdown, html, slack, discord, twitter, compact
630
- --output <file> Output file path
631
- --dry-run Preview without creating release
632
- --max-commits <n> Max commits to analyze (1-1000, default: 200)
633
- --no-ai Disable AI, use template-based generation
634
- --update-changelog Auto-update CHANGELOG.md
635
- --changelog-path <path> Path to changelog file (default: CHANGELOG.md)
636
- --github-token <token> GitHub token for API access
637
- --slack-webhook <url> Slack webhook URL for auto-posting
638
- --discord-webhook <url> Discord webhook URL for auto-posting
639
- -h, --help Show help
640
- -V, --version Show version
641
- ```
642
-
643
- </details>
644
-
645
- ---
646
-
647
- ## Output Examples
648
-
649
- ### 1. Professional Markdown (GitHub / GitLab Releases)
650
-
651
- The default format. Full-featured, beautifully formatted markdown that lands on your GitHub Releases page.
652
-
653
- ````markdown
654
- # Release v2.1.0 -- "The Security & Speed Update"
655
-
656
- > We are pleased to announce the release of version 2.1.0, which includes
657
- > significant improvements to security and performance across the platform.
658
- > This release contains 3 new features, 2 bug fixes, and 1 breaking change.
659
-
660
- ---
661
-
662
- ## Breaking Changes
663
-
664
- > **Warning:** This release contains a breaking change. Please review the
665
- > migration guide below before upgrading.
666
-
667
- <details>
668
- <summary><strong>Breaking Changes and Migration Guide (click to expand)</strong></summary>
669
-
670
- ### Removed deprecated /api/v1/users endpoint
671
-
672
- **Scope:** `api`
673
- **Severity:** major
674
- **PR:** [#40](https://github.com/acme/app/pull/40) by @sarah
675
-
676
- #### Before
677
- ```javascript
678
- // Old usage -- this will now return 404
679
- const response = await fetch('/api/v1/users', {
680
- headers: { 'Authorization': `Bearer ${token}` }
681
- });
682
- const users = await response.json();
683
- ```
684
-
685
- #### After
686
- ```javascript
687
- // Updated to v2 API -- includes pagination by default
688
- const response = await fetch('/api/v2/users?page=1&limit=50', {
689
- headers: { 'Authorization': `Bearer ${token}` }
690
- });
691
- const { data: users, meta } = await response.json();
692
- // meta.pagination contains total pages, current page, etc.
693
- ```
694
-
695
- #### Migration Steps
696
- 1. Replace all `/api/v1/users` calls with `/api/v2/users`
697
- 2. Update response handling to use `data` wrapper and `meta.pagination`
698
- 3. Update all client SDK calls (SDK v3.0+ required)
699
- 4. Remove any v1-specific query parameters
700
-
701
- #### Deprecation Timeline
702
- - **v2.1.0 (now):** v1 endpoint returns 404 with migration header
703
- - **v2.2.0:** v1 endpoint removed entirely from routing
704
- - **v3.0.0:** No backward compatibility guaranteed
705
-
706
- </details>
707
-
708
- ---
709
-
710
- ## New Features
711
-
712
- - **User avatar upload API** [`api`] ([#42](https://github.com/acme/app/pull/42)) by @alice
713
- Users can now upload profile avatars via the new `POST /api/v2/users/:id/avatar` endpoint.
714
- Supports JPEG, PNG, and WebP up to 5MB. Auto-cropped and optimized.
715
-
716
- - **Dark mode toggle** [`ui`] ([#43](https://github.com/acme/app/pull/43)) by @bob
717
- System-aware dark mode toggle in user settings. Respects OS preference
718
- by default and persists manual overrides in localStorage.
719
-
720
- - **Pagination for all list endpoints** [`api`] ([#44](https://github.com/acme/app/pull/44)) by @charlie
721
- Every list endpoint now supports `page` and `limit` query parameters with
722
- cursor-based pagination for large datasets. Default page size is 50.
723
-
724
- ## Performance Improvements
725
-
726
- - **Database query optimization** -- Reduced average API response time by **40%** (340ms -> 204ms)
727
- on user-related endpoints through indexed query restructuring ([#47](https://github.com/acme/app/pull/47))
728
-
729
- - **Asset pipeline rebuild** -- Frontend bundle size reduced by **23%** (1.2MB -> 924KB) through
730
- tree-shaking improvements and dynamic imports ([#48](https://github.com/acme/app/pull/48))
731
-
732
- ## Bug Fixes
733
-
734
- - **Fixed login timeout on slow connections** [`auth`] ([#45](https://github.com/acme/app/pull/45)) by @dave
735
- Login requests no longer timeout after 10s on connections slower than 1Mbps. Progressive
736
- polling with a 60s max timeout.
737
-
738
- - **Fixed memory leak in event listeners** [`core`] ([#46](https://github.com/acme/app/pull/46)) by @eve
739
- Resolved a memory leak where WebSocket event listeners were not properly cleaned up
740
- on component unmount, causing ~2MB/hour memory growth.
741
-
742
- ## Contributors
743
-
744
- | Contributor | Commits | First Contribution? |
745
- |:------------|:--------|:--------------------|
746
- | @alice | 3 | |
747
- | @bob | 2 | :tada: First contribution! |
748
- | @charlie | 1 | :tada: First contribution! |
749
- | @dave | 1 | |
750
- | @eve | 1 | |
751
- | @sarah | 2 | |
752
-
753
- **Full Changelog**: https://github.com/acme/app/compare/v2.0.0...v2.1.0
754
- ````
755
-
756
- ---
757
-
758
- ### 2. HTML (Email-Ready)
759
-
760
- Standalone HTML page with inline CSS for email client compatibility. Color-coded sections, responsive design, contributor badges.
761
-
762
- ```html
763
- <!DOCTYPE html>
764
- <html lang="en">
765
- <head>
766
- <meta charset="utf-8">
767
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
768
- <title>Release v2.1.0</title>
769
- <style>
770
- body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
771
- max-width: 680px; margin: 0 auto; padding: 20px; color: #24292f;
772
- background: #ffffff; line-height: 1.6; }
773
- .header { border-bottom: 3px solid #238636; padding-bottom: 16px; margin-bottom: 24px; }
774
- .header h1 { margin: 0 0 8px; font-size: 28px; color: #1f2328; }
775
- .version { display: inline-block; background: #238636; color: white;
776
- padding: 4px 12px; border-radius: 12px; font-size: 14px; }
777
- .summary { background: #f6f8fa; border-radius: 8px; padding: 16px; margin-bottom: 24px;
778
- border-left: 4px solid #238636; }
779
- .section-title.features { color: #238636; }
780
- .section-title.fixes { color: #0969da; }
781
- .section-title.breaking { color: #cf222e; }
782
- .section-title.perf { color: #8250df; }
783
- .breaking-box { background: #ffebe9; border: 1px solid #ff8182; border-radius: 8px;
784
- padding: 16px; margin-bottom: 16px; }
785
- .migration { background: #fff8c5; border-left: 4px solid #d29922; padding: 12px;
786
- margin-top: 8px; border-radius: 4px; }
787
- .scope { display: inline-block; background: #ddf4ff; color: #0969da;
788
- padding: 2px 8px; border-radius: 12px; font-size: 12px; font-family: monospace; }
789
- </style>
790
- </head>
791
- <body>
792
- <div class="header">
793
- <h1>Release v2.1.0</h1>
794
- <span class="version">v2.1.0</span>
795
- <div class="date">Released on January 15, 2025</div>
796
- </div>
797
-
798
- <div class="summary">
799
- <strong>The Security &amp; Speed Update</strong> -- 3 features, 2 fixes,
800
- 1 breaking change. API response time reduced by 40%. Bundle size down 23%.
801
- </div>
802
-
803
- <div class="section">
804
- <h2 class="section-title breaking">Breaking Changes</h2>
805
- <div class="breaking-box">
806
- <strong>Removed deprecated /api/v1/users endpoint</strong><br>
807
- <span class="scope">api</span> by @sarah
808
- <div class="migration">
809
- <strong>Migration:</strong> Use <code>/api/v2/users</code> instead.
810
- Update all client SDK calls. See migration guide for before/after code.
811
- </div>
812
- </div>
813
- </div>
814
-
815
- <div class="section">
816
- <h2 class="section-title features">New Features</h2>
817
- <div class="item">
818
- <strong>User avatar upload API</strong> <span class="scope">api</span><br>
819
- Upload profile avatars via POST. JPEG, PNG, WebP up to 5MB.
820
- <a href="#" class="link">#42</a> <span class="author">by @alice</span>
821
- </div>
822
- <div class="item">
823
- <strong>Dark mode toggle</strong> <span class="scope">ui</span><br>
824
- System-aware dark mode in user settings.
825
- <a href="#" class="link">#43</a> <span class="author">by @bob</span>
826
- </div>
827
- <div class="item">
828
- <strong>Pagination for list endpoints</strong> <span class="scope">api</span><br>
829
- Every list endpoint supports page/limit. Default 50/page.
830
- <a href="#" class="link">#44</a> <span class="author">by @charlie</span>
831
- </div>
832
- </div>
833
-
834
- <div class="section">
835
- <h2 class="section-title perf">Performance</h2>
836
- <div class="item">
837
- <strong>Database query optimization</strong> -- API response time reduced by
838
- <strong>40%</strong> (340ms to 204ms). <a href="#" class="link">#47</a>
839
- </div>
840
- <div class="item">
841
- <strong>Asset pipeline rebuild</strong> -- Bundle size reduced by
842
- <strong>23%</strong> (1.2MB to 924KB). <a href="#" class="link">#48</a>
843
- </div>
844
- </div>
845
- </body>
846
- </html>
847
- ```
848
-
849
- ---
850
-
851
- ### 3. Slack Block Kit
852
-
853
- Interactive Slack message with sections, dividers, and action buttons. Ready to post via webhook.
854
-
855
- ```json
856
- {
857
- "blocks": [
858
- {
859
- "type": "header",
860
- "text": {
861
- "type": "plain_text",
862
- "text": ":rocket: Release v2.1.0",
863
- "emoji": true
864
- }
865
- },
866
- {
867
- "type": "context",
868
- "elements": [
869
- { "type": "mrkdwn", "text": "*January 15, 2025* | 3 features | 2 fixes | 1 breaking" }
870
- ]
871
- },
872
- { "type": "divider" },
873
- {
874
- "type": "section",
875
- "text": {
876
- "type": "mrkdwn",
877
- "text": ":rotating_light: *Breaking Changes*\n`api` Removed `/api/v1/users` -- use `/api/v2/users` instead\n_Migration guide available in release notes_"
878
- }
879
- },
880
- { "type": "divider" },
881
- {
882
- "type": "section",
883
- "text": {
884
- "type": "mrkdwn",
885
- "text": ":rocket: *New Features*\n* User avatar upload API <https://github.com/acme/app/pull/42|#42> _@alice_\n* Dark mode toggle <https://github.com/acme/app/pull/43|#43> _@bob_\n* Pagination for list endpoints <https://github.com/acme/app/pull/44|#44> _@charlie_"
886
- }
887
- },
888
- {
889
- "type": "section",
890
- "text": {
891
- "type": "mrkdwn",
892
- "text": ":zap: *Performance*\n* API response time: 340ms -> 204ms (-40%) <https://github.com/acme/app/pull/47|#47>\n* Bundle size: 1.2MB -> 924KB (-23%) <https://github.com/acme/app/pull/48|#48>"
893
- }
894
- },
895
- {
896
- "type": "section",
897
- "text": {
898
- "type": "mrkdwn",
899
- "text": ":bug: *Bug Fixes*\n* Login timeout on slow connections <https://github.com/acme/app/pull/45|#45> _@dave_\n* Memory leak in event listeners <https://github.com/acme/app/pull/46|#46> _@eve_"
900
- }
901
- },
902
- { "type": "divider" },
903
- {
904
- "type": "context",
905
- "elements": [
906
- { "type": "mrkdwn", "text": ":busts_in_silhouette: `@alice` (3) `@bob` (2) :star: `@charlie` (1) :star: `@dave` (1) `@eve` (1) `@sarah` (2)" }
907
- ]
908
- },
909
- {
910
- "type": "actions",
911
- "elements": [
912
- {
913
- "type": "button",
914
- "text": { "type": "plain_text", "text": "View Full Release Notes" },
915
- "url": "https://github.com/acme/app/releases/tag/v2.1.0",
916
- "style": "primary"
917
- },
918
- {
919
- "type": "button",
920
- "text": { "type": "plain_text", "text": "View Changelog" },
921
- "url": "https://github.com/acme/app/compare/v2.0.0...v2.1.0"
922
- }
923
- ]
924
- }
925
- ]
926
- }
927
- ```
928
-
929
- ---
930
-
931
- ### 4. Discord Rich Embeds
932
-
933
- Color-coded embeds with fields layout. Each section gets its own embed with a distinct color.
934
-
935
- ```json
936
- {
937
- "username": "Release Bot",
938
- "avatar_url": "https://github.com/acme/app/blob/main/assets/logo.png",
939
- "embeds": [
940
- {
941
- "title": "Release v2.1.0 -- The Security & Speed Update",
942
- "url": "https://github.com/acme/app/releases/tag/v2.1.0",
943
- "color": 5763719,
944
- "description": "3 features, 2 bug fixes, 1 breaking change.\nAPI response time reduced by 40%. Bundle size down 23%.",
945
- "fields": [
946
- { "name": "Version", "value": "v2.1.0", "inline": true },
947
- { "name": "Date", "value": "2025-01-15", "inline": true },
948
- { "name": "Commits", "value": "14", "inline": true },
949
- { "name": "Contributors", "value": "6", "inline": true }
950
- ],
951
- "footer": { "text": "Auto-generated by AI Release Notes" },
952
- "timestamp": "2025-01-15T10:30:00Z"
953
- },
954
- {
955
- "title": ":warning: Breaking Changes",
956
- "color": 15554053,
957
- "fields": [
958
- {
959
- "name": "Removed /api/v1/users endpoint",
960
- "value": "**Scope:** `api` | **Severity:** major\n**Migration:** Use `/api/v2/users` instead\n**Details:** [#40](https://github.com/acme/app/pull/40)"
961
- }
962
- ]
963
- },
964
- {
965
- "title": ":rocket: New Features",
966
- "color": 5763719,
967
- "fields": [
968
- {
969
- "name": "User avatar upload API",
970
- "value": "Upload profile avatars via `POST /api/v2/users/:id/avatar`. JPEG, PNG, WebP up to 5MB. [#42](...) by `@alice`"
971
- },
972
- {
973
- "name": "Dark mode toggle",
974
- "value": "System-aware dark mode in user settings. Respects OS preference. [#43](...) by `@bob`"
975
- },
976
- {
977
- "name": "Pagination for list endpoints",
978
- "value": "Every list endpoint supports `page` and `limit`. Default 50/page. [#44](...) by `@charlie`"
979
- }
980
- ]
981
- },
982
- {
983
- "title": ":zap: Performance",
984
- "color": 8250df,
985
- "fields": [
986
- { "name": "API response time", "value": "340ms -> 204ms (**-40%**)", "inline": true },
987
- { "name": "Bundle size", "value": "1.2MB -> 924KB (**-23%**)", "inline": true }
988
- ]
989
- },
990
- {
991
- "title": ":bug: Bug Fixes",
992
- "color": 3447003,
993
- "fields": [
994
- { "name": "Login timeout on slow connections", "value": "Progressive polling with 60s max. [#45](...) by `@dave`", "inline": true },
995
- { "name": "Memory leak in event listeners", "value": "Fixed ~2MB/hr leak. [#46](...) by `@eve`", "inline": true }
996
- ]
997
- },
998
- {
999
- "title": ":busts_in_silhouette: Contributors",
1000
- "color": 5793266,
1001
- "description": "`@alice` (3 commits) | `@bob` (2) :star: | `@charlie` (1) :star: | `@dave` (1) | `@eve` (1) | `@sarah` (2)",
1002
- "footer": { "text": ":star: = First contribution!" }
1003
- }
1004
- ]
1005
- }
1006
- ```
1007
-
1008
- ---
1009
-
1010
- ### 5. Twitter/X Thread (7 Tweets)
1011
-
1012
- Optimized for engagement. Thread format with hook, features, performance, breaking changes, and CTA.
1013
-
1014
- ```json
1015
- [
1016
- "1/7 v2.1.0 is HERE.\n\n3 features. 2 bug fixes. 40% faster APIs.\nThe biggest update since our launch.\n\nHere's everything (and one breaking change): >>>",
1017
- "2/7 :rocket: New in v2.1.0:\n\n- Avatar uploads (JPEG, PNG, WebP up to 5MB) #42\n- Dark mode (system-aware, respects OS preference) #43\n- Pagination on ALL list endpoints (50/page default) #44\n\nYes, dark mode. We heard you.",
1018
- "3/7 :zap: Performance:\n\nAPI response time: 340ms -> 204ms (-40%)\nBundle size: 1.2MB -> 924KB (-23%)\n\nThat's not a typo. Your app just got significantly faster.",
1019
- "4/7 :wrench: Bugs squashed:\n\n- Login no longer times out on slow connections #45\n- Fixed memory leak eating ~2MB/hr in event listeners #46\n\nYour apps will thank you.",
1020
- "5/7 :rotating_light: BREAKING CHANGE:\n\n/api/v1/users is GONE.\nUse /api/v2/users instead.\nMigration guide is in the full release notes. We've got your back.",
1021
- "6/7 Contributors: @alice (3) @bob (2) :tada: @charlie (1) :tada: @dave (1) @eve (1) @sarah (2)\n\n:tada: = First time contributors!\n\nFull changelog:\ngithub.com/acme/app/compare/v2.0.0...v2.1.0\n\n#ReleaseNotes #OpenSource #Changelog",
1022
- "7/7 That's v2.1.0!\n\nnpm install your-package@2.1.0\n\nStar us on GitHub if this saved you time!\nFeedback? Reply to this thread."
1023
- ]
1024
- ```
1025
-
1026
- ---
1027
-
1028
- ### 6. Compact Mode
1029
-
1030
- Minimal. Every word counts. For changelogs, feeds, and SMS notifications.
1031
-
1032
- ```
1033
- v2.1.0 (2025-01-15) -- 3 features, 2 fixes, 1 breaking
1034
-
1035
- BREAKING: /api/v1/users removed -> use /api/v2/users (#40 @sarah)
1036
- FEAT: Avatar upload API - JPEG/PNG/WebP up to 5MB (#42 @alice)
1037
- FEAT: Dark mode toggle - system-aware (#43 @bob)
1038
- FEAT: Pagination on list endpoints - 50/page default (#44 @charlie)
1039
- PERF: API response time -40% (340ms->204ms) (#47)
1040
- PERF: Bundle size -23% (1.2MB->924KB) (#48)
1041
- FIX: Login timeout on slow connections (#45 @dave)
1042
- FIX: Memory leak in event listeners (#46 @eve)
1043
-
1044
- Contributors: @alice @bob @charlie @dave @eve @sarah
1045
- https://github.com/acme/app/compare/v2.0.0...v2.1.0
1046
- ```
1047
-
1048
- ---
1049
-
1050
- ## Tone Examples
1051
-
1052
- The same release opening line in all four tones:
1053
-
1054
- | Tone | Opening Line |
1055
- |:-----|:-------------|
1056
- | :briefcase: **Professional** | "We are pleased to announce the release of version 2.1.0, which includes significant improvements to security and performance across the platform. This release contains 3 new features, 2 bug fixes, and 1 breaking change." |
1057
- | :wave: **Casual** | "v2.1.0 just dropped! We've got avatar uploads, dark mode, and pagination. Plus we squashed two annoying bugs and made everything 40% faster. Heads up: there's one breaking change." |
1058
- | :joy: **Humorous** | "Plot twist: v2.1.0 is here and it's bringing gifts. Dark mode (because we know you code at 3AM), avatar uploads (time to ditch the default silhouette), and pagination (because loading 10,000 results was... a choice). We also evicted two bugs from the premises." |
1059
- | :gear: **Technical** | "`v2.1.0` (MINOR bump -- contains 1 breaking change in `api` scope). Core changes: new avatar upload endpoint (`POST /api/v2/users/:id/avatar`), CSS media query dark mode, cursor-based pagination on all list endpoints. Auth timeout: 10s -> 60s with progressive polling." |
1060
-
1061
- Full tone comparison for every section:
1062
-
1063
- | Section | :briefcase: Professional | :wave: Casual | :joy: Humorous | :gear: Technical |
1064
- |:--------|:-------------------------|:--------------|:---------------|:-----------------|
1065
- | **Opening** | "We are pleased to announce..." | "v2.1.0 just dropped!" | "Plot twist: v2.1.0 is here..." | "`v2.1.0` (MINOR -- contains breaking changes)" |
1066
- | **Features** | "New Features" -- formal descriptions with scope tags | "What's New" -- friendly, conversational | "Things That Are New and Shiny" -- playful commentary | "`feat:` New Features" -- commit-style with technical details |
1067
- | **Fixes** | "Bug Fixes and Resolutions" -- clinical, detailed | "Bug Squashes" -- "Login should stop timing out now" | "Bugs We Sent to Bug Heaven" -- irreverent fun | "`fix:` Bug Fixes" -- root cause + resolution |
1068
- | **Breaking** | "This release introduces a change to the public API that may require migration..." | "Heads up! We changed something that might affect you..." | "Plot twist: we broke something on purpose..." | "`[api] BREAKING:` Removed endpoint with before/after code" |
1069
- | **Perf** | "Performance Improvements" -- benchmarks cited | "Speed Boosts" -- "Things are faster now!" | "We Made It Go Brrr" -- meme-friendly | "`perf:` Performance Optimizations" -- specific metrics |
1070
- | **Security** | "Security Enhancements" -- CVE references | "Security Fixes" -- "Your stuff is safer now" | "Fort Knox Mode: Activated" -- dramatic | "`security:` Security Patches" -- advisory links |
1071
- | **Docs** | "Documentation Updates" -- formal | "Docs & Guides" -- helpful tone | "Words About Code" -- self-aware | "`docs:` Documentation" -- changelog entries |
1072
- | **Tests** | "Test Coverage Improvements" | "Test Improvements" -- "More tests!" | "We Actually Test Things Now" | "`test:` Test Suite" -- coverage metrics |
1073
- | **Chores** | "Maintenance and Infrastructure" | "Housekeeping" | "Things Nobody Sees But Everyone Needs" | "`chore:` Build/CI/Maintenance" |
1074
- | **Contributors** | Formal table with commit counts | Friendly shout-outs with emojis | "The heroes who made this happen" | Committer list with email hashes |
1075
-
1076
- ---
1077
-
1078
- ## Configuration
1079
-
1080
- ### Inputs
1081
-
1082
- Every parameter you can configure:
1083
-
1084
- | Input | Description | Required | Default | Example |
1085
- |:------|:------------|:--------|:--------|:--------|
1086
- | `github-token` | GitHub token for API access (repo + releases) | Yes | -- | `${{ secrets.GITHUB_TOKEN }}` |
1087
- | `api-key` | OpenAI-compatible API key. Remove for template-only mode | No | -- | `sk-...` |
1088
- | `api-base` | Custom API endpoint (Ollama, Azure, etc.) | No | `https://api.openai.com/v1` | `http://localhost:11434/v1` |
1089
- | `model` | AI model for natural language generation | No | `gpt-4o-mini` | `gpt-4o`, `llama3` |
1090
- | `template` | Output template | No | `default` | `minimal`, `detailed`, `enterprise`, `fun` |
1091
- | `commit-mode` | How to collect changes | No | `auto` | `commits`, `pull-requests` |
1092
- | `version-from` | How to determine version number | No | `tag` | `package-json`, `manual` |
1093
- | `version` | Manual version (when `version-from` is `manual`) | No | -- | `v2.0.0` |
1094
- | `previous-tag` | Previous release tag (auto-detected if omitted) | No | Auto | `v1.9.0` |
1095
- | `max-commits` | Maximum commits to analyze (prevents token overflow) | No | `200` | `50`, `500` |
1096
- | `language` | Output language | No | `en` | `es`, `fr`, `de`, `ja`, `ko`, `zh`, `pt`, `ru` |
1097
- | `categories` | Custom categories as JSON array | No | `auto` | `[{"label":"Features","patterns":["feat"]}]` |
1098
- | `include-breaking` | Include BREAKING CHANGE section | No | `true` | `false` |
1099
- | `include-contributors` | Include contributor acknowledgments | No | `true` | `false` |
1100
- | `include-diff-stats` | Include file change statistics | No | `true` | `false` |
1101
- | `include-screenshots` | Detect and include PR screenshots | No | `true` | `false` |
1102
- | `dry-run` | Generate notes without creating a release | No | `false` | `true` |
1103
- | `slack-webhook` | Slack webhook URL for auto-posting | No | -- | `https://hooks.slack.com/...` |
1104
- | `discord-webhook` | Discord webhook URL for auto-posting | No | -- | `https://discord.com/api/webhooks/...` |
1105
- | `twitter-consumer-key` | Twitter API consumer key | No | -- | -- |
1106
- | `twitter-consumer-secret` | Twitter API consumer secret | No | -- | -- |
1107
- | `twitter-access-token` | Twitter API access token | No | -- | -- |
1108
- | `twitter-access-secret` | Twitter API access token secret | No | -- | -- |
1109
- | `update-changelog` | Auto-update CHANGELOG.md | No | `false` | `true` |
1110
- | `changelog-path` | Path to changelog file | No | `CHANGELOG.md` | `docs/CHANGES.md` |
1111
-
1112
- ### Outputs
1113
-
1114
- | Output | Description | Example |
1115
- |:-------|:------------|:--------|
1116
- | `version` | The calculated/extracted version number | `v2.1.0` |
1117
- | `release-notes` | Generated release notes in markdown | *(full markdown output)* |
1118
- | `release-url` | URL of the created GitHub Release | `https://github.com/acme/app/releases/tag/v2.1.0` |
1119
- | `summary` | One-line summary of the release | `3 features, 2 fixes, 1 breaking change` |
1120
- | `changelog` | Generated CHANGELOG.md content | *(full changelog)* |
1121
-
1122
- ---
1123
-
1124
- ## Architecture
1125
-
1126
- How AI Release Notes works under the hood:
1127
-
1128
- ```
1129
- +=====================================================================+
1130
- | AI RELEASE NOTES |
1131
- | The Complete Pipeline |
1132
- +=====================================================================+
1133
- | |
1134
- | +------------------+ |
1135
- | | Git Trigger | tag push / workflow_dispatch / CLI |
1136
- | +--------+---------+ |
1137
- | | |
1138
- | v |
1139
- | +================================================================+ |
1140
- | | COMMIT ANALYSIS ENGINE | |
1141
- | | | |
1142
- | | +--------------+ +-------------+ +---------------------+ | |
1143
- | | | Categorizer | | Semver | | Breaking Change | | |
1144
- | | | | | Calculator | | Detector | | |
1145
- | | | feat: -> feat | | | | | | |
1146
- | | | fix: -> fix | | feat -> min | | 1. ! suffix | | |
1147
- | | | docs: -> docs| | fix -> pat| | 2. BREAKING CHANGE | | |
1148
- | | | perf: -> perf| | break -> maj| | 3. breaking: prefix| | |
1149
- | | | Custom JSON | | | | 4. API keywords | | |
1150
- | | | categories | | Version | | 5. Code diff | | |
1151
- | | +-------+------+ +------+------+ +---------+----------+ | |
1152
- | | | | | | |
1153
- | | +------+ +--------+------+ | | |
1154
- | | | | | | | |
1155
- | | v v v v | |
1156
- | | +--------------+ +--------------------------+ | |
1157
- | | | AI Writer | | Migration Guide Gen | | |
1158
- | | | (OpenAI) | | - Before/After code | | |
1159
- | | | | | - Migration steps | | |
1160
- | | | OR | | - Deprecation timeline | | |
1161
- | | | Template | | - Upgrade commands | | |
1162
- | | | Engine | | - Severity rating | | |
1163
- | | +-------+------+ +-----------+--------------+ | |
1164
- | +==================+=====================+======================+ |
1165
- | | | |
1166
- | v v |
1167
- | +================================================================+ |
1168
- | | OUTPUT FORMATTERS | |
1169
- | | | |
1170
- | | +--------+ +--------+ +--------+ +---------+ +---------+ | |
1171
- | | | MD | | HTML | | SLACK | | DISCORD | | TWITTER | | |
1172
- | | | GitHub | | Email | | Block | | Rich | | /X | | |
1173
- | | | GitLab | | Ready | | Kit | | Embeds | | Thread | | |
1174
- | | +--------+ +--------+ +--------+ +---------+ +---------+ | |
1175
- | | | |
1176
- | | +-------------+ +-----------+ +---------+ +------------+ | |
1177
- | | | TONE ENGINE | | LANGUAGE | | COMPACT | | CUSTOM | | |
1178
- | | | 4 tones | | 9 locales | | MODE | | TEMPLATES | | |
1179
- | | +-------------+ +-----------+ +---------+ +------------+ | |
1180
- | +==============================+================================+ |
1181
- | | |
1182
- | v |
1183
- | +================================================================+ |
1184
- | | INTEGRATIONS | |
1185
- | | | |
1186
- | | +----------+ +----------+ +----------+ +---------------+ | |
1187
- | | | GitHub | | Slack & | | Twitter/ | | CHANGELOG.md | | |
1188
- | | | Release | | Discord | | X Post | | Auto-Update | | |
1189
- | | | Create | | Webhook | | Thread | | Git Commit | | |
1190
- | | +----------+ +----------+ +----------+ +---------------+ | |
1191
- | +================================================================+ |
1192
- +=====================================================================+
1193
- ```
1194
-
1195
- ---
1196
-
1197
- ## Breaking Change Detection
1198
-
1199
- The analyzer detects breaking changes through **5 independent methods**, running in parallel for maximum coverage:
1200
-
1201
- ### Method 1: Conventional Commit `!` Suffix
1202
-
1203
- ```bash
1204
- feat!: redesigned the entire authentication API
1205
- fix(auth)!: changed login function signature
1206
- refactor(core)!: rewrote plugin system
1207
- ```
1208
-
1209
- Any commit type with `!` between the type and `:` is flagged as breaking.
1210
-
1211
- ### Method 2: BREAKING CHANGE Footer
1212
-
1213
- ```bash
1214
- feat: add new caching layer
1215
-
1216
- BREAKING CHANGE: The cache key format has changed from
1217
- `{userId}:{key}` to `{tenant}:{userId}:{key}`. All cached
1218
- data will be invalidated on upgrade.
1219
-
1220
- Migration: Clear your Redis cache after upgrading.
1221
- ```
1222
-
1223
- Standard conventional commit footer. Multi-line descriptions supported.
1224
-
1225
- ### Method 3: `breaking:` Prefix
1226
-
1227
- ```bash
1228
- breaking: removed support for Node.js 14
1229
- breaking(api): deprecated v1 endpoints, use v2
1230
- ```
1231
-
1232
- Explicit breaking change commits that don't follow conventional format.
1233
-
1234
- ### Method 4: Deprecation Keywords
1235
-
1236
- ```bash
1237
- refactor: remove deprecated getUser() method
1238
- feat: rename validateInput to validatePayload
1239
- docs: deprecating the legacy callback API
1240
- ```
1241
-
1242
- Detects `remove`, `rename`, `deprecat(e|ed|ing)` followed by method/function/API names using pattern matching.
1243
-
1244
- ### Method 5: Code Analysis
1245
-
1246
- ```bash
1247
- # Detected automatically from the diff:
1248
- - Removed export files (deleted index.ts in public API)
1249
- - Large deletion ratios (>60% lines removed in a file)
1250
- - Public API modifications (changed function signatures in exported modules)
1251
- ```
1252
-
1253
- Static analysis of the actual diff to detect structural breaking changes.
1254
-
1255
- ### What Each Breaking Change Includes
1256
-
1257
- | Field | Description |
1258
- |:------|:------------|
1259
- | Description | Human-readable explanation of what broke and why |
1260
- | Scope | Affected module/area (e.g., `api`, `auth`, `core`) |
1261
- | Severity | `major`, `minor`, or `patch` impact level |
1262
- | PR Reference | Link to the pull request with author |
1263
- | Migration Guide | Step-by-step upgrade instructions |
1264
- | Before Code | Working code from the previous version |
1265
- | After Code | Updated code for the new version |
1266
- | Affected APIs | List of changed function/class signatures |
1267
- | Timeline | Deprecation schedule with key dates |
1268
- | Upgrade Commands | Package-specific commands (`npm`, `yarn`, `pnpm`) |
1269
-
1270
- ---
1271
-
1272
- ## Detailed Setup Guides
1273
-
1274
- <details>
1275
- <summary><strong>:brain: AI Provider Configuration</strong></summary>
1276
-
1277
- ### OpenAI (Default)
1278
-
1279
- ```yaml
1280
- - uses: theihtisham/ai-release-notes@v1
1281
- with:
1282
- api-key: ${{ secrets.OPENAI_API_KEY }}
1283
- model: gpt-4o-mini # or gpt-4o, gpt-4-turbo
1284
- ```
1285
-
1286
- ### Azure OpenAI
1287
-
1288
- ```yaml
1289
- - uses: theihtisham/ai-release-notes@v1
1290
- with:
1291
- api-key: ${{ secrets.AZURE_OPENAI_KEY }}
1292
- api-base: https://your-resource.openai.azure.com/openai/deployments/your-deployment
1293
- model: gpt-4o
1294
- ```
1295
-
1296
- ### Local LLM (Ollama, LM Studio)
1297
-
1298
- ```yaml
1299
- - uses: theihtisham/ai-release-notes@v1
1300
- with:
1301
- api-key: not-needed
1302
- api-base: http://localhost:11434/v1
1303
- model: llama3
1304
- ```
1305
-
1306
- ### Any OpenAI-Compatible API
1307
-
1308
- ```yaml
1309
- - uses: theihtisham/ai-release-notes@v1
1310
- with:
1311
- api-key: ${{ secrets.CUSTOM_API_KEY }}
1312
- api-base: https://your-api.example.com/v1
1313
- model: your-model-name
1314
- ```
1315
-
1316
- ### Without AI Key (Template Engine)
1317
-
1318
- ```yaml
1319
- - uses: theihtisham/ai-release-notes@v1
1320
- with:
1321
- github-token: ${{ secrets.GITHUB_TOKEN }}
1322
- # No api-key needed -- uses intelligent template-based generation
1323
- ```
1324
-
1325
- Works offline. No API calls. Still generates great release notes using conventional commit analysis and templates.
1326
-
1327
- </details>
1328
-
1329
- <details>
1330
- <summary><strong>:package: Node.js Library API</strong></summary>
1331
-
1332
- ### Programmatic Usage
1333
-
1334
- ```javascript
1335
- import { generateReleaseNotes } from '@theihtisham/ai-release-notes';
1336
-
1337
- // Basic usage
1338
- const result = await generateReleaseNotes({
1339
- owner: 'USERNAME',
1340
- repo: 'your-repo',
1341
- fromTag: 'v1.0.0',
1342
- toTag: 'v1.1.0',
1343
- githubToken: process.env.GITHUB_TOKEN,
1344
- apiKey: process.env.OPENAI_API_KEY,
1345
- });
1346
-
1347
- console.log(result.releaseNotes); // Markdown string
1348
- console.log(result.version); // 'v1.1.0'
1349
- console.log(result.summary); // One-line summary
1350
- console.log(result.releaseUrl); // GitHub Release URL
1351
-
1352
- // With all options
1353
- const result = await generateReleaseNotes({
1354
- owner: 'USERNAME',
1355
- repo: 'your-repo',
1356
- fromTag: 'v1.0.0',
1357
- toTag: 'v1.1.0',
1358
- githubToken: process.env.GITHUB_TOKEN,
1359
- apiKey: process.env.OPENAI_API_KEY,
1360
- apiBase: 'https://api.openai.com/v1',
1361
- model: 'gpt-4o-mini',
1362
- tone: 'professional',
1363
- language: 'en',
1364
- template: 'detailed',
1365
- includeBreaking: true,
1366
- includeContributors: true,
1367
- includeDiffStats: true,
1368
- maxCommits: 200,
1369
- });
1370
- ```
1371
-
1372
- ### Get Specific Formats
1373
-
1374
- ```javascript
1375
- import {
1376
- generateReleaseNotes,
1377
- formatSlack,
1378
- formatDiscord,
1379
- formatTwitter,
1380
- formatHTML,
1381
- formatCompact,
1382
- } from '@theihtisham/ai-release-notes';
1383
-
1384
- const result = await generateReleaseNotes({ /* ... */ });
1385
-
1386
- // Get different formats from the same analysis
1387
- const slack = formatSlack(result.analysis);
1388
- const discord = formatDiscord(result.analysis);
1389
- const twitter = formatTwitter(result.analysis);
1390
- const html = formatHTML(result.analysis);
1391
- const compact = formatCompact(result.analysis);
1392
- ```
1393
-
1394
- </details>
1395
-
1396
- ---
1397
-
1398
- ## Development
1399
-
1400
- ```bash
1401
- # Install dependencies
1402
- npm install
1403
-
1404
- # Run the full test suite (148 tests)
1405
- npm test
1406
-
1407
- # Build the bundled action
1408
- npm run build
1409
-
1410
- # Lint source code
1411
- npm run lint
1412
-
1413
- # Format with Prettier
1414
- npm run format
1415
- ```
1416
-
1417
- ### Test Coverage
1418
-
1419
- | Suite | Tests | Coverage |
1420
- |:------|:------|:---------|
1421
- | Commit Analysis | 32 | Categorization, conventional commits, grouping |
1422
- | Breaking Change Detection | 28 | All 5 detection methods, severity, migration |
1423
- | Format Generation | 24 | Markdown, HTML, Slack, Discord, Twitter, Compact |
1424
- | Tone Adjustment | 16 | Professional, Casual, Humorous, Technical |
1425
- | Language Support | 18 | All 9 languages |
1426
- | Version Calculation | 14 | Semver bumps, tag parsing, package.json |
1427
- | Integration | 16 | GitHub API, webhooks, CLI, library |
1428
-
1429
- **Total: 148 tests passing**
1430
-
1431
- ---
1432
-
1433
- ## Roadmap
1434
-
1435
- - [ ] GitLab and Bitbucket support
1436
- - [ ] Notion integration for release documentation
1437
- - [ ] Email templates for subscriber notifications
1438
- - [ ] RSS feed generation
1439
- - [ ] Custom template system with Handlebars
1440
- - [ ] Multi-repo / monorepo support
1441
- - [ ] Release notes diff comparison (v1 vs v2 output)
1442
- - [ ] Contributor recognition with GitHub avatar images
1443
- - [ ] Automatic social media image generation (og:image)
1444
- - [ ] Linear/Jira issue linking from commit references
1445
- - [ ] Release health scoring (coverage, breaking change ratio)
1446
- - [ ] AI-powered release title generation
1447
-
1448
- ---
1449
-
1450
- ## Contributing
1451
-
1452
- We love contributions! Here's how to get started:
1453
-
1454
- 1. **Fork** the repository
1455
- 2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
1456
- 3. **Write tests** for your feature (we have 148 tests and counting)
1457
- 4. **Run** `npm test && npm run build` to verify everything passes
1458
- 5. **Submit** a pull request with a clear description
1459
-
1460
- Please ensure:
1461
- - All tests pass (`npm test`)
1462
- - Code is linted (`npm run lint`)
1463
- - Code is formatted (`npm run format`)
1464
- - New features include test coverage
1465
-
1466
- ### Contribution Ideas
1467
-
1468
- - New output formats (Notion, Confluence, Jira)
1469
- - New languages (Arabic, Hindi, Turkish, Vietnamese)
1470
- - New tone modes (Excited, Concise, Executive)
1471
- - AI provider integrations (Anthropic, Google, Cohere)
1472
- - Template system improvements
1473
- - Documentation and examples
1474
-
1475
- ---
1476
-
1477
- ## License
1478
-
1479
- MIT License -- use it however you want. See [LICENSE](LICENSE) for details.
1480
-
1481
- ---
1482
-
1483
- <div align="center">
1484
-
1485
- <br />
1486
-
1487
- ### Stop writing release notes. Start shipping them.
1488
-
1489
- **[Get Started in 30 Seconds](#-quick-start-30-seconds)** &bull; **[See All Formats](#-output-examples)** &bull; **[Compare Alternatives](#-comparison)**
1490
-
1491
- <br /><br />
1492
-
1493
- </div>
1
+ <div align="center">
2
+
3
+ <img width="100%" height="180" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 960 180'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%2334d399'/%3E%3Cstop offset='100%25' stop-color='%23fbbf24'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='960' height='180' fill='%230a0a1a' rx='16'/%3E%3Crect x='2' y='2' width='956' height='176' fill='none' stroke='url(%23g)' stroke-width='2' rx='15'/%3E%3Ctext x='480' y='75' text-anchor='middle' fill='white' font-family='system-ui' font-size='38' font-weight='bold'%3E%F0%9F%93%9D AI Release Notes%3C/text%3E%3Ctext x='480' y='115' text-anchor='middle' fill='%23a5a5c0' font-family='system-ui' font-size='18'%3EAuto-Generate Beautiful Release Notes with AI%3C/text%3E%3Ctext x='480' y='148' text-anchor='middle' fill='%236b6b88' font-family='monospace' font-size='13'%3ECommit Analysis %C2%B7 PR Detection %C2%B7 6 Templates %C2%B7 9 Languages %C2%B7 Slack/Discord/Twitter%3C/text%3E%3C/svg%3E" alt="AI Release Notes Banner"/>
4
+
5
+ [![CI](https://img.shields.io/github/actions/workflow/status/theihtisham/ai-release-notes/ci.yml?style=for-the-badge&label=CI)](https://github.com/theihtisham/ai-release-notes/actions/workflows/ci.yml)
6
+ [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-AI%20Release%20Notes-blue?style=for-the-badge&logo=github)](https://github.com/marketplace/actions/ai-release-notes)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
8
+
9
+ **Auto-generate beautiful release notes from commits, PRs, and diffs using AI.** Supports 6 built-in templates, 9 languages, Slack/Discord/Twitter integration, and works without AI too.
10
+
11
+ [Quick Start](#-quick-start) · [Architecture](#-architecture) · [Templates](#-templates)
12
+
13
+ </div>
14
+
15
+ ---
16
+
17
+ ## Architecture
18
+
19
+ ```mermaid
20
+ graph TD
21
+ PUSH[Push / Tag Event] --> TRIGGER[GitHub Action]
22
+ TRIGGER --> COLLECT[Change Collector<br/>Commits + PRs + Diffs]
23
+ COLLECT --> CATEGORIZE[Auto-Categorizer<br/>feat/fix/breaking/other]
24
+ CATEGORIZE --> AI[AI Generator<br/>OpenAI / Anthropic / Any]
25
+ AI --> TEMPLATE[Template Engine<br/>6 Built-in Templates]
26
+ TEMPLATE --> RELEASE[GitHub Release<br/>Auto-created]
27
+ TEMPLATE --> SLACK[Slack Webhook]
28
+ TEMPLATE --> DISCORD[Discord Webhook]
29
+ TEMPLATE --> CHANGELOG[CHANGELOG.md<br/>Auto-update]
30
+
31
+ style TRIGGER fill:#34d399,color:#000
32
+ style AI fill:#fbbf24,color:#000
33
+ style TEMPLATE fill:#3b82f6,color:#fff
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Quick Start
39
+
40
+ Add to `.github/workflows/release.yml`:
41
+
42
+ ```yaml
43
+ name: Release Notes
44
+ on:
45
+ push:
46
+ tags: ['v*']
47
+
48
+ jobs:
49
+ release:
50
+ runs-on: ubuntu-latest
51
+ permissions:
52
+ contents: write
53
+ steps:
54
+ - uses: theihtisham/ai-release-notes@v1
55
+ with:
56
+ github-token: ${{ secrets.GITHUB_TOKEN }}
57
+ api-key: ${{ secrets.OPENAI_API_KEY }}
58
+ template: detailed
59
+ language: en
60
+ ```
61
+
62
+ ---
63
+
64
+ ## Templates
65
+
66
+ | Template | Style | Best For |
67
+ |----------|-------|----------|
68
+ | `default` | Standard changelog | Most projects |
69
+ | `minimal` | Compact, essentials only | Small releases |
70
+ | `detailed` | Full breakdown with stats | Major releases |
71
+ | `enterprise` | Professional, formal | Enterprise software |
72
+ | `fun` | Emoji-heavy, casual | Open source / community |
73
+ | Custom path | Your own template | Full customization |
74
+
75
+ ### Supported Languages
76
+
77
+ English, Spanish, French, German, Japanese, Korean, Chinese, Portuguese, Russian
78
+
79
+ ---
80
+
81
+ ## Configuration
82
+
83
+ | Input | Required | Default | Description |
84
+ |-------|----------|---------|-------------|
85
+ | `github-token` | Yes | — | GitHub token |
86
+ | `api-key` | No | — | OpenAI API key (optional) |
87
+ | `model` | No | `gpt-4o-mini` | AI model |
88
+ | `template` | No | `default` | Template name or path |
89
+ | `commit-mode` | No | `auto` | `commits` / `pull-requests` / `auto` |
90
+ | `language` | No | `en` | Output language |
91
+ | `slack-webhook` | No | | Post to Slack |
92
+ | `discord-webhook` | No | — | Post to Discord |
93
+ | `update-changelog` | No | `false` | Auto-update CHANGELOG.md |
94
+
95
+ ---
96
+
97
+ ## Development
98
+
99
+ ```bash
100
+ npm install
101
+ npm run build
102
+ npm test
103
+ npm run lint
104
+ ```
105
+
106
+ ---
107
+
108
+ ## Trending Tags
109
+
110
+ `github-action` `release-notes` `changelog` `ai` `automation` `openai` `slack` `discord` `twitter` `continuous-deployment`
111
+
112
+ ---
113
+
114
+ ## License
115
+
116
+ MIT License — see [LICENSE](LICENSE) for details.
117
+
118
+ ---
119
+
120
+ <div align="center">
121
+
122
+ **Built by [theihtisham](https://github.com/theihtisham)**
123
+
124
+ [GitHub](https://github.com/theihtisham) · [Email](mailto:Theihtisham@outlook.com)
125
+
126
+ </div>