logforge-gitlog 0.1.0__py3-none-any.whl
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.
|
@@ -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
|
+
[](https://github.com/JToSound/LogForge/actions/workflows/ci.yml)
|
|
65
|
+
[](https://codecov.io/gh/JToSound/LogForge)
|
|
66
|
+
[](https://github.com/JToSound/LogForge/releases)
|
|
67
|
+
[](https://www.python.org/downloads/)
|
|
68
|
+
[](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
|
+

|
|
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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
logforge_gitlog-0.1.0.dist-info/METADATA,sha256=9i2ze8wK2zGqCqPp8ma9qUBOtca2IuLrMafKJ9GWRTA,7307
|
|
2
|
+
logforge_gitlog-0.1.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
3
|
+
logforge_gitlog-0.1.0.dist-info/entry_points.txt,sha256=29AWTz-MCXZg5Pd2XJVfc-bdrGURvTJtc0wwoquwCeo,68
|
|
4
|
+
logforge_gitlog-0.1.0.dist-info/licenses/LICENSE,sha256=2kr1yI3LOKUYA3C11sPRaHyX2HPI0n7k_OOfGvJYCkE,1097
|
|
5
|
+
logforge_gitlog-0.1.0.dist-info/RECORD,,
|
|
@@ -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.
|