logforge-gitlog 0.1.0__tar.gz

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 (45) hide show
  1. logforge_gitlog-0.1.0/.github/workflows/ci.yml +60 -0
  2. logforge_gitlog-0.1.0/.github/workflows/release.yml +76 -0
  3. logforge_gitlog-0.1.0/.gitignore +15 -0
  4. logforge_gitlog-0.1.0/.gitlog.toml.example +20 -0
  5. logforge_gitlog-0.1.0/CHANGELOG.md +20 -0
  6. logforge_gitlog-0.1.0/GITHUB_RELEASE_DRAFT.md +90 -0
  7. logforge_gitlog-0.1.0/LICENSE +21 -0
  8. logforge_gitlog-0.1.0/PKG-INFO +230 -0
  9. logforge_gitlog-0.1.0/README.md +173 -0
  10. logforge_gitlog-0.1.0/RELEASE_NOTES_v0.1.0.md +47 -0
  11. logforge_gitlog-0.1.0/docs/configuration.md +86 -0
  12. logforge_gitlog-0.1.0/docs/demo.svg +42 -0
  13. logforge_gitlog-0.1.0/docs/social_templates.md +49 -0
  14. logforge_gitlog-0.1.0/pyproject.toml +75 -0
  15. logforge_gitlog-0.1.0/release_pr.md +37 -0
  16. logforge_gitlog-0.1.0/src/gitlog/__init__.py +6 -0
  17. logforge_gitlog-0.1.0/src/gitlog/cli.py +303 -0
  18. logforge_gitlog-0.1.0/src/gitlog/config.py +109 -0
  19. logforge_gitlog-0.1.0/src/gitlog/core/__init__.py +1 -0
  20. logforge_gitlog-0.1.0/src/gitlog/core/classifier.py +206 -0
  21. logforge_gitlog-0.1.0/src/gitlog/core/generator.py +181 -0
  22. logforge_gitlog-0.1.0/src/gitlog/core/git.py +342 -0
  23. logforge_gitlog-0.1.0/src/gitlog/core/models.py +167 -0
  24. logforge_gitlog-0.1.0/src/gitlog/exceptions.py +27 -0
  25. logforge_gitlog-0.1.0/src/gitlog/providers/__init__.py +2 -0
  26. logforge_gitlog-0.1.0/src/gitlog/providers/anthropic.py +73 -0
  27. logforge_gitlog-0.1.0/src/gitlog/providers/base.py +32 -0
  28. logforge_gitlog-0.1.0/src/gitlog/providers/ollama.py +80 -0
  29. logforge_gitlog-0.1.0/src/gitlog/providers/openai.py +79 -0
  30. logforge_gitlog-0.1.0/src/gitlog/renderers/__init__.py +2 -0
  31. logforge_gitlog-0.1.0/src/gitlog/renderers/html.py +49 -0
  32. logforge_gitlog-0.1.0/src/gitlog/renderers/json.py +61 -0
  33. logforge_gitlog-0.1.0/src/gitlog/renderers/markdown.py +79 -0
  34. logforge_gitlog-0.1.0/src/gitlog/renderers/twitter.py +60 -0
  35. logforge_gitlog-0.1.0/src/gitlog/templates/changelog.md.j2 +21 -0
  36. logforge_gitlog-0.1.0/src/gitlog/templates/release_notes.md.j2 +23 -0
  37. logforge_gitlog-0.1.0/src/gitlog/templates/report.html.j2 +102 -0
  38. logforge_gitlog-0.1.0/tests/__init__.py +0 -0
  39. logforge_gitlog-0.1.0/tests/conftest.py +29 -0
  40. logforge_gitlog-0.1.0/tests/fixtures/__init__.py +0 -0
  41. logforge_gitlog-0.1.0/tests/fixtures/sample_commits.py +65 -0
  42. logforge_gitlog-0.1.0/tests/test_classifier.py +73 -0
  43. logforge_gitlog-0.1.0/tests/test_generator.py +67 -0
  44. logforge_gitlog-0.1.0/tests/test_git.py +62 -0
  45. logforge_gitlog-0.1.0/tests/test_renderers.py +92 -0
@@ -0,0 +1,60 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ lint-and-type-check:
11
+ name: Lint & Type Check
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.11"
20
+
21
+ - name: Install uv
22
+ uses: astral-sh/setup-uv@v3
23
+
24
+ - name: Install dependencies
25
+ run: uv sync --extra dev
26
+
27
+ - name: Run ruff
28
+ run: uv run ruff check src/ tests/
29
+
30
+ - name: Run mypy
31
+ run: uv run mypy src/gitlog
32
+
33
+ test:
34
+ name: Test (Python ${{ matrix.python-version }})
35
+ runs-on: ubuntu-latest
36
+ strategy:
37
+ matrix:
38
+ python-version: ["3.11", "3.12"]
39
+ steps:
40
+ - uses: actions/checkout@v4
41
+
42
+ - name: Set up Python ${{ matrix.python-version }}
43
+ uses: actions/setup-python@v5
44
+ with:
45
+ python-version: ${{ matrix.python-version }}
46
+
47
+ - name: Install uv
48
+ uses: astral-sh/setup-uv@v3
49
+
50
+ - name: Install dependencies
51
+ run: uv sync --extra dev
52
+
53
+ - name: Run tests with coverage
54
+ run: uv run pytest --cov=src/gitlog --cov-report=xml --cov-report=term-missing
55
+
56
+ - name: Upload coverage
57
+ uses: codecov/codecov-action@v4
58
+ if: matrix.python-version == '3.11'
59
+ with:
60
+ file: ./coverage.xml
@@ -0,0 +1,76 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*.*.*"
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ build-and-publish:
14
+ name: Build & Publish to PyPI
15
+ runs-on: ubuntu-latest
16
+ environment: pypi
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ fetch-depth: 0
21
+
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: "3.11"
26
+
27
+ - name: Install uv
28
+ uses: astral-sh/setup-uv@v3
29
+
30
+ - name: Build package
31
+ run: uv build
32
+
33
+ - name: Publish to PyPI
34
+ uses: pypa/gh-action-pypi-publish@release/v1
35
+
36
+ generate-changelog:
37
+ name: Generate & Push Changelog
38
+ runs-on: ubuntu-latest
39
+ needs: build-and-publish
40
+ steps:
41
+ - uses: actions/checkout@v4
42
+ with:
43
+ fetch-depth: 0
44
+ token: ${{ secrets.GITHUB_TOKEN }}
45
+
46
+ - name: Set up Python
47
+ uses: actions/setup-python@v5
48
+ with:
49
+ python-version: "3.11"
50
+
51
+ - name: Install uv & gitlog
52
+ run: |
53
+ pip install uv
54
+ pip install .
55
+
56
+ - name: Generate Changelog
57
+ env:
58
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
59
+ GITLOG_PROJECT_DESCRIPTION: "AI-Powered Changelog & Release Notes Generator"
60
+ run: |
61
+ gitlog generate --since $(git describe --abbrev=0 HEAD~1 2>/dev/null || echo "") \
62
+ --format markdown --output CHANGELOG.md
63
+
64
+ - name: Commit updated CHANGELOG
65
+ run: |
66
+ git config user.name "github-actions[bot]"
67
+ git config user.email "github-actions[bot]@users.noreply.github.com"
68
+ git add CHANGELOG.md
69
+ git diff --staged --quiet || git commit -m "chore: update CHANGELOG for ${{ github.ref_name }}"
70
+ git push
71
+
72
+ - name: Create GitHub Release
73
+ uses: softprops/action-gh-release@v2
74
+ with:
75
+ body_path: CHANGELOG.md
76
+ generate_release_notes: false
@@ -0,0 +1,15 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .venv/
7
+ .env
8
+ *.log
9
+ .coverage
10
+ coverage.xml
11
+ htmlcov/
12
+ .mypy_cache/
13
+ .ruff_cache/
14
+ .pytest_cache/
15
+ *.toml.local
@@ -0,0 +1,20 @@
1
+ # Example .gitlog.toml configuration
2
+ # Copy to .gitlog.toml and customise, or run: gitlog init
3
+
4
+ [gitlog]
5
+ llm_provider = "openai"
6
+ model = "gpt-4o-mini"
7
+ language = "en"
8
+ format = "markdown"
9
+ output_file = "CHANGELOG.md"
10
+ project_description = "A developer tool for..."
11
+ exclude_patterns = ["^chore\\(deps\\)", "^Merge branch"]
12
+ group_by_scope = true
13
+ max_commits_per_group = 20
14
+
15
+ [gitlog.prompts]
16
+ classify_system = ""
17
+ summarize_system = ""
18
+
19
+ [gitlog.github]
20
+ repo = "owner/repo"
@@ -0,0 +1,20 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ > This changelog is maintained by **gitlog** — the tool itself.
8
+
9
+ ## [Unreleased]
10
+
11
+ ### ✨ Features
12
+ - Initial project scaffold with full CLI, LLM classifier, and multi-format renderers
13
+ - Two-layer commit classification: rule engine + LLM batch fallback
14
+ - Keep-a-Changelog Markdown renderer with multilingual support (en, zh-TW, zh-CN, ja)
15
+ - JSON renderer for programmatic consumption
16
+ - Self-contained HTML report with dark/light mode and version timeline
17
+ - Twitter/X release announcement generator
18
+ - `gitlog stats` ASCII bar chart for commit type distribution
19
+ - `gitlog init` interactive `.gitlog.toml` setup wizard
20
+ - GitHub Actions CI/CD with auto-changelog on release
@@ -0,0 +1,90 @@
1
+ # Release draft: v0.1.0 — LogForge (gitlog)
2
+
3
+ Tag: `v0.1.0`
4
+
5
+ Short description
6
+ -----------------
7
+ LogForge (CLI name: `gitlog`) — AI-powered changelog & release-notes generator.
8
+
9
+ Highlights
10
+ ----------
11
+ - Robust `GitLogParser`: GitPython preferred with `git` subprocess fallback; test-friendly.
12
+ - Backwards-compatible pydantic models: accepts legacy fixture shapes (`author`/`date`).
13
+ - Renderers fixed: JSON/Markdown/Twitter outputs normalized and stable.
14
+ - UX/docs: Added a quick 5s demo (`docs/demo.svg`) and social post templates (`docs/social_templates.md`).
15
+ - Packaging: artifacts built (sdist + wheel). CLI remains `gitlog`, package name for PyPI: `logforge`.
16
+
17
+ Full release notes
18
+ ------------------
19
+ See `RELEASE_NOTES_v0.1.0.md` for full details, changelog, and publish instructions.
20
+
21
+ Binary artifacts (local)
22
+ ------------------------
23
+ Attach these artifacts to the GitHub Release as assets:
24
+
25
+ - `dist/logforge-0.1.0.tar.gz`
26
+ - `dist/logforge-0.1.0-py3-none-any.whl`
27
+
28
+ Installation notes
29
+ ------------------
30
+ - Recommended (PyPI once published):
31
+
32
+ ```bash
33
+ pip install logforge
34
+ ```
35
+
36
+ - Install from GitHub (current recommendation until PyPI release):
37
+
38
+ ```bash
39
+ pip install git+https://github.com/JToSound/LogForge.git
40
+ ```
41
+
42
+ Usage (quick)
43
+ -------------
44
+ ```bash
45
+ gitlog generate
46
+ # or preview without writing
47
+ gitlog generate --dry-run
48
+ # tweet draft
49
+ gitlog tweet
50
+ ```
51
+
52
+ Publishing to PyPI (maintainer instructions)
53
+ --------------------------------------------
54
+ Option A — Upload manually (recommended):
55
+ 1. Ensure artifacts are present in `dist/`.
56
+ 2. Install twine: `python -m pip install --upgrade twine`.
57
+ 3. Upload (example with env vars):
58
+
59
+ ```powershell
60
+ $env:TWINE_USERNAME = "__token__"
61
+ $env:TWINE_PASSWORD = "<PASTE_YOUR_PYPI_TOKEN_HERE>"
62
+ python -m twine upload dist/*
63
+ ```
64
+
65
+ Option B — Let me upload now: reply with `upload now` and I will run `twine upload dist/*` using the token you provided.
66
+
67
+ Verification
68
+ ------------
69
+ - After upload, check https://pypi.org/project/logforge/ and ensure the new version `0.1.0` appears.
70
+ - Optionally, install from PyPI in a fresh environment and run `gitlog --version` and `gitlog generate` on a small repo.
71
+
72
+ Draft release body (copy/paste ready)
73
+ ------------------------------------
74
+ Title: v0.1.0 — LogForge
75
+
76
+ Body:
77
+ ```
78
+ LogForge (gitlog) v0.1.0
79
+
80
+ This release introduces:
81
+ - Robust git parsing with GitPython/subprocess fallback
82
+ - Backwards-compatible models and multiple renderer fixes
83
+ - Quick animated demo and social templates for easy outreach
84
+
85
+ Artifacts: attached wheel and sdist (dist/*)
86
+
87
+ Installation: `pip install logforge` (or `pip install git+https://github.com/JToSound/LogForge.git`)
88
+
89
+ See full notes in the repository: RELEASE_NOTES_v0.1.0.md
90
+ ```
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 gitlog contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,230 @@
1
+ Metadata-Version: 2.4
2
+ Name: logforge-gitlog
3
+ Version: 0.1.0
4
+ Summary: AI-Powered Changelog & Release Notes Generator
5
+ Project-URL: Homepage, https://github.com/JToSound/LogForge
6
+ Project-URL: Repository, https://github.com/JToSound/LogForge
7
+ Project-URL: Changelog, https://github.com/JToSound/LogForge/blob/main/CHANGELOG.md
8
+ License: MIT License
9
+
10
+ Copyright (c) 2024 gitlog contributors
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ License-File: LICENSE
30
+ Keywords: ai,changelog,cli,git,release-notes
31
+ Classifier: Development Status :: 3 - Alpha
32
+ Classifier: Environment :: Console
33
+ Classifier: Intended Audience :: Developers
34
+ Classifier: License :: OSI Approved :: MIT License
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3.11
37
+ Classifier: Programming Language :: Python :: 3.12
38
+ Classifier: Topic :: Software Development :: Version Control :: Git
39
+ Requires-Python: >=3.11
40
+ Requires-Dist: gitpython>=3.1
41
+ Requires-Dist: jinja2>=3.1
42
+ Requires-Dist: litellm>=1.40
43
+ Requires-Dist: pydantic-settings>=2
44
+ Requires-Dist: pydantic>=2
45
+ Requires-Dist: rich>=13
46
+ Requires-Dist: tenacity>=8
47
+ Requires-Dist: tomli>=2; python_version < '3.11'
48
+ Requires-Dist: typer[all]>=0.12
49
+ Provides-Extra: dev
50
+ Requires-Dist: mypy>=1.10; extra == 'dev'
51
+ Requires-Dist: pytest-cov>=5; extra == 'dev'
52
+ Requires-Dist: pytest>=8; extra == 'dev'
53
+ Requires-Dist: respx>=0.21; extra == 'dev'
54
+ Requires-Dist: ruff>=0.4; extra == 'dev'
55
+ Requires-Dist: types-jinja2; extra == 'dev'
56
+ Description-Content-Type: text/markdown
57
+
58
+ <div align="center">
59
+
60
+ # LogForge — gitlog
61
+
62
+ **LogForge — AI-Powered Changelog & Release Notes Generator**
63
+
64
+ [![CI](https://github.com/JToSound/LogForge/actions/workflows/ci.yml/badge.svg)](https://github.com/JToSound/LogForge/actions/workflows/ci.yml)
65
+ [![Coverage](https://codecov.io/gh/JToSound/LogForge/branch/main/graph/badge.svg)](https://codecov.io/gh/JToSound/LogForge)
66
+ [![GitHub Releases](https://img.shields.io/github/v/release/JToSound/LogForge)](https://github.com/JToSound/LogForge/releases)
67
+ [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
68
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
69
+
70
+ One command. From git history to a human-readable, structured CHANGELOG.
71
+ Supports **multiple languages**, **multiple output formats**, and **any LLM**.
72
+
73
+ </div>
74
+
75
+ ---
76
+
77
+ ## Quick Start
78
+
79
+ ```bash
80
+ # Install directly from GitHub (recommended until published to PyPI)
81
+ pip install git+https://github.com/JToSound/LogForge.git
82
+ cd your-repo
83
+ export OPENAI_API_KEY=sk-...
84
+ gitlog generate
85
+ ```
86
+
87
+ That's it. Your `CHANGELOG.md` is ready. 🎉
88
+
89
+ ---
90
+
91
+ ## 5s Demo
92
+
93
+ Below is a very short demo that shows `gitlog generate` producing a changelog in under 5 seconds on small repos.
94
+
95
+ ![Quick demo](docs/demo.svg)
96
+
97
+ ---
98
+
99
+ ## Features
100
+
101
+ - 🤖 **Two-layer classification** — rule engine (zero API cost) + LLM batch fallback
102
+ - 🌍 **Multilingual output** — English, Traditional Chinese, Simplified Chinese, Japanese
103
+ - 📄 **Multiple formats** — Markdown (Keep-a-Changelog), JSON, HTML, Twitter drafts
104
+ - 🔗 **GitHub integration** — auto-generates PR/issue/commit links
105
+ - ⚡ **Batch LLM calls** — never call the LLM in a loop; respects token budgets
106
+ - 🔄 **Fallback chain** — LLM failure → rule engine, never interrupts the flow
107
+ - 🧩 **CI/CD ready** — GitHub Actions workflow included out of the box
108
+ - 🏠 **Local inference** — Ollama support for fully private generation
109
+
110
+ ---
111
+
112
+ ## Installation
113
+
114
+ ```bash
115
+ # Recommended: with uv
116
+ uv tool install gitlog
117
+
118
+ # Or pip
119
+ pip install gitlog
120
+ ```
121
+
122
+ **Requirements:** Python 3.11+, Git
123
+
124
+ ---
125
+
126
+ ## Usage
127
+
128
+ ```bash
129
+ # Generate full CHANGELOG
130
+ gitlog generate
131
+
132
+ # From a specific version
133
+ gitlog generate --since v1.2.0
134
+
135
+ # HTML report
136
+ gitlog generate --format html
137
+
138
+ # Traditional Chinese output
139
+ gitlog generate --lang zh-TW
140
+
141
+ # Use a local Ollama model (no API key needed)
142
+ gitlog generate --model ollama/llama3
143
+
144
+ # Preview in terminal without writing a file
145
+ gitlog generate --dry-run
146
+
147
+ # Compare two versions
148
+ gitlog diff v1.0.0 v1.1.0
149
+
150
+ # Generate Twitter/X announcement
151
+ gitlog tweet
152
+
153
+ # ASCII commit statistics
154
+ gitlog stats
155
+
156
+ # Interactive setup
157
+ gitlog init
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Configuration
163
+
164
+ Create a `.gitlog.toml` in your repo root (or run `gitlog init`):
165
+
166
+ ```toml
167
+ [gitlog]
168
+ llm_provider = "openai"
169
+ model = "gpt-4o-mini"
170
+ language = "en"
171
+ format = "markdown"
172
+ output_file = "CHANGELOG.md"
173
+ project_description = "A developer tool for..."
174
+ exclude_patterns = ["^chore\\(deps\\)", "^Merge branch"]
175
+ group_by_scope = true
176
+ max_commits_per_group = 20
177
+
178
+ [gitlog.github]
179
+ repo = "owner/repo"
180
+ ```
181
+
182
+ ### Full Configuration Reference
183
+
184
+ | Parameter | Default | Description |
185
+ |---|---|---|
186
+ | `llm_provider` | `openai` | LLM provider: `openai`, `anthropic`, `ollama` |
187
+ | `model` | `gpt-4o-mini` | Model identifier |
188
+ | `language` | `en` | Output language: `en`, `zh-TW`, `zh-CN`, `ja` |
189
+ | `format` | `markdown` | Output format: `markdown`, `json`, `html`, `twitter` |
190
+ | `output_file` | `CHANGELOG.md` | Output file path |
191
+ | `project_description` | `""` | Project context injected into LLM prompts |
192
+ | `exclude_patterns` | see default | Regex list of commit messages to skip |
193
+ | `group_by_scope` | `true` | Group commits by conventional commit scope |
194
+ | `max_commits_per_group` | `20` | Max commits shown per category per version |
195
+ | `github.repo` | `""` | `owner/repo` for generating clickable links |
196
+
197
+ ---
198
+
199
+ ## GitHub Actions Integration
200
+
201
+ Add to your release workflow:
202
+
203
+ ```yaml
204
+ - name: Generate Changelog
205
+ uses: JToSound/LogForge/.github/workflows/release.yml@main
206
+ env:
207
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
208
+ ```
209
+
210
+ Or use the included `release.yml` which automatically:
211
+ 1. Builds and publishes to PyPI on tag push
212
+ 2. Generates the changelog using gitlog itself
213
+ 3. Creates a GitHub Release with the generated notes
214
+
215
+ ---
216
+
217
+ ## Supported LLM Providers
218
+
219
+ | Provider | Model Example | Env Var |
220
+ |---|---|---|
221
+ | OpenAI | `gpt-4o-mini` | `OPENAI_API_KEY` |
222
+ | Anthropic | `claude-3-5-haiku-20241022` | `ANTHROPIC_API_KEY` |
223
+ | Ollama (local) | `ollama/llama3` | *(none required)* |
224
+ | Gemini | `gemini/gemini-1.5-flash` | `GEMINI_API_KEY` |
225
+
226
+ ---
227
+
228
+ ## License
229
+
230
+ MIT © gitlog contributors