feat(cli): Introduce AI-powered developer toolkit
Release v0.2.1 of DevGen CLI, a comprehensive toolkit automating common Git and project management tasks through AI. This initial packaging defines the project's metadata and a wide array of developer-centric features.
* **New Features**
* **AI-Powered Commit Messages:** Automatically generate semantic commit messages based on staged changes, adhering to Conventional Commits format.
* **Changelog Generation:** Create detailed changelogs from Git history, with categories for BREAKING CHANGES, Features, Bug Fixes, Documentation, and Other Changes.
* **Release Note Generation:** Produce structured release notes from Git history, ready for publication.
* **Gitignore File Generation:** Generate `.gitignore` files by selecting from GitHub's official templates, supporting interactive selection, multiple templates, and offline mode.
* **License File Generation:** Interactively generate various open-source license files (e.g., MIT, Apache-2.0, GPL-3.0), customizable with author name and year.
* **Multi-Provider AI Support:** Seamless integration with leading AI providers including Gemini, OpenAI, Anthropic, HuggingFace, and OpenRouter.
* **Enhancements & Refinements**
* **Unified CLI:** Provides a single command-line interface for all development automation tools.
* **Interactive Configuration:** Simple setup process for AI providers, models, and API keys via `devgen setup config`, stored persistently in `~/.devgen.yaml`.
* **Flexible Commit Workflow:** Offers options for dry runs, direct commits, automatic pushes, and force rebuilding of AI-generated commit messages.
* **Commit Caching:** Includes commands to list and clear cached commit messages for improved workflow.
* **Detailed Command Reference:** Comprehensive documentation for all `devgen` commands and their specific options.
* **Project Metadata:** Updated `PKG-INFO` with project summary, homepage, author details, license, keywords, classifiers, and Python requirements.
* **Dependency Management:** Specifies required Python packages including `anthropic`, `google-generativeai`, `openai`, `typer`, and `rich`.
* **Python 3.10+ Compatibility:** Ensures support for modern Python environments.
This commit is contained in:
9 files changed
+378
-12
No files matched your search
@@ -52,7 +52,7 @@ def run_commit(
|
||||
] = False,
|
||||
) -> None:
|
||||
log_file = get_main_log_path()
|
||||
logger = configure_logger("devgen.cli.commit", log_file)
|
||||
logger = configure_logger("devgen.cli.commit", log_file, console=debug)
|
||||
logger.info(f"Log file: {log_file}")
|
||||
logger.info(
|
||||
f"Options: dry_run={dry_run}, push={push}, debug={debug}, force={force_rebuild}"
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
from devgen.providers.anthropic import AnthropicProvider
|
||||
from devgen.providers.gemini import GeminiProvider
|
||||
from devgen.providers.huggingface import HuggingfaceProvider
|
||||
from devgen.providers.openai import OpenaiProvider
|
||||
from devgen.providers.openrouter import OpenrouterProvider
|
||||
|
||||
|
||||
def get_provider(name):
|
||||
name_lower = name.lower()
|
||||
if name_lower == "gemini":
|
||||
from devgen.providers.gemini import GeminiProvider
|
||||
|
||||
return GeminiProvider()
|
||||
elif name_lower == "openai":
|
||||
from devgen.providers.openai import OpenaiProvider
|
||||
|
||||
return OpenaiProvider()
|
||||
elif name_lower == "huggingface":
|
||||
from devgen.providers.huggingface import HuggingfaceProvider
|
||||
|
||||
return HuggingfaceProvider()
|
||||
elif name_lower == "openrouter":
|
||||
from devgen.providers.openrouter import OpenrouterProvider
|
||||
|
||||
return OpenrouterProvider()
|
||||
elif name_lower == "anthropic":
|
||||
from devgen.providers.anthropic import AnthropicProvider
|
||||
|
||||
return AnthropicProvider()
|
||||
|
||||
raise NotImplementedError(f"Provider '{name}' is not implemented yet.")
|
||||
+5
-4
@@ -75,7 +75,7 @@ def extract_commit_messages(filepath: Path | str) -> dict[str, str]:
|
||||
|
||||
|
||||
def configure_logger(
|
||||
name: str = "devgen", log_file: Optional[Path | str] = None
|
||||
name: str = "devgen", log_file: Optional[Path | str] = None, console: bool = True
|
||||
) -> logging.Logger:
|
||||
logger = logging.getLogger(name)
|
||||
logger.setLevel(logging.INFO)
|
||||
@@ -88,9 +88,10 @@ def configure_logger(
|
||||
)
|
||||
|
||||
# Console handler
|
||||
ch = logging.StreamHandler()
|
||||
ch.setFormatter(formatter)
|
||||
logger.addHandler(ch)
|
||||
if console:
|
||||
ch = logging.StreamHandler()
|
||||
ch.setFormatter(formatter)
|
||||
logger.addHandler(ch)
|
||||
|
||||
# File handler
|
||||
if log_file:
|
||||
|
||||
@@ -0,0 +1,299 @@
|
||||
Metadata-Version: 2.4
|
||||
Name: devgen-cli
|
||||
Version: 0.2.1
|
||||
Summary: A collection of developer tools
|
||||
Home-page: https://github.com/S4NKALP/devgen
|
||||
Author: Sankalp Tharu
|
||||
Author-email: Sankalp Tharu <sankalptharu50028@gmail.com>
|
||||
License: GPL-3.0-or-later
|
||||
Project-URL: Homepage, https://github.com/S4NKALP/devgen
|
||||
Keywords: devgen,cli,git,changelog,gitignore,license,commit-generator,commit
|
||||
Classifier: Development Status :: 3 - Alpha
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3.7
|
||||
Classifier: Programming Language :: Python :: 3.8
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Requires-Python: >=3.10
|
||||
Description-Content-Type: text/markdown
|
||||
License-File: LICENSE
|
||||
Requires-Dist: anthropic>=0.75.0
|
||||
Requires-Dist: google-generativeai>=0.8.5
|
||||
Requires-Dist: jinja2>=3.1.6
|
||||
Requires-Dist: openai>=2.11.0
|
||||
Requires-Dist: pyyaml>=6.0.3
|
||||
Requires-Dist: questionary>=2.1.1
|
||||
Requires-Dist: requests>=2.32.5
|
||||
Requires-Dist: rich>=14.2.0
|
||||
Requires-Dist: toml>=0.10.2
|
||||
Requires-Dist: typer>=0.20.0
|
||||
Dynamic: author
|
||||
Dynamic: home-page
|
||||
Dynamic: license-file
|
||||
Dynamic: requires-python
|
||||
|
||||
# DevGen
|
||||
|
||||
<div align="center">
|
||||
|
||||
<img src="https://img.shields.io/pypi/v/devgen?color=blue&label=PyPI&logo=pypi&logoColor=white" alt="PyPI">
|
||||
<img src="https://img.shields.io/badge/Python-3.10%2B-3776AB?logo=python&logoColor=white" alt="Python">
|
||||
<a href="https://github.com/S4NKALP/devgen/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-GPL--3.0--or--later-blue.svg" alt="License"></a>
|
||||
|
||||
</div>
|
||||
|
||||
**DevGen** is an AI-powered developer toolkit that automates common Git and project management tasks. Generate semantic commit messages, changelogs, release notes, `.gitignore` files, and licenses—all from a single unified CLI.
|
||||
|
||||
## ✨ Features
|
||||
|
||||
- 🚀 **AI-Powered Commit Messages** - Automatically generate semantic commit messages from your staged changes using AI
|
||||
- 📝 **Changelog Generation** - Create changelogs from git history using conventional commits
|
||||
- 🚀 **Release Notes** - Generate clean, emoji-enhanced release notes for your releases
|
||||
- 🙈 **Gitignore Templates** - Generate `.gitignore` files from GitHub's official templates
|
||||
- 📄 **License Generation** - Quickly generate open source licenses with interactive setup
|
||||
- ⚙️ **Multi-Provider AI Support** - Works with Gemini, OpenAI, Anthropic, HuggingFace, and OpenRouter
|
||||
|
||||
## 📦 Installation
|
||||
|
||||
```bash
|
||||
# Stable release from PyPI
|
||||
pip install devgen-cli
|
||||
|
||||
# Using pipx (recommended for isolated CLI)
|
||||
pipx install devgen-cli
|
||||
|
||||
# Using uv (fast Python package manager)
|
||||
uv tool install devgen-cli
|
||||
```
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### 1. Initial Setup
|
||||
|
||||
Configure your AI provider and API key:
|
||||
|
||||
```bash
|
||||
devgen setup config
|
||||
```
|
||||
|
||||
This will create a configuration file at `~/.devgen.yaml` with your preferred AI provider, model, and API key.
|
||||
|
||||
### 2. Generate Commit Messages
|
||||
|
||||
Stage your changes and let DevGen generate semantic commit messages:
|
||||
|
||||
```bash
|
||||
# Dry run to preview commit messages
|
||||
devgen commit run --dry-run
|
||||
|
||||
# Actually commit with AI-generated messages
|
||||
devgen commit run
|
||||
|
||||
# Commit and automatically push
|
||||
devgen commit run --push
|
||||
|
||||
# Force regeneration of commit messages
|
||||
devgen commit run --force-rebuild
|
||||
```
|
||||
|
||||
**How it works:**
|
||||
|
||||
- DevGen detects all staged and unstaged changes
|
||||
- Groups files by directory
|
||||
- Generates semantic commit messages for each group using AI
|
||||
- Follows [Conventional Commits](https://www.conventionalcommits.org/) format
|
||||
|
||||
**Additional commit commands:**
|
||||
|
||||
```bash
|
||||
# View cached commit messages
|
||||
devgen commit list-cached
|
||||
|
||||
# Clear the commit cache
|
||||
devgen commit clear-cache
|
||||
|
||||
# Check what files are staged
|
||||
devgen commit validate
|
||||
```
|
||||
|
||||
### 3. Generate Changelogs
|
||||
|
||||
Create changelogs from your git history:
|
||||
|
||||
```bash
|
||||
# Generate changelog from last tag to HEAD
|
||||
devgen changelog generate
|
||||
|
||||
# Generate from a specific reference
|
||||
devgen changelog generate --from v1.0.0
|
||||
|
||||
# Output to a custom file
|
||||
devgen changelog generate --output CHANGES.md
|
||||
```
|
||||
|
||||
The changelog follows Semantic Release conventions, categorizing commits into:
|
||||
|
||||
- **BREAKING CHANGES**
|
||||
- **Features**
|
||||
- **Bug Fixes**
|
||||
- **Documentation**
|
||||
- **Other Changes**
|
||||
|
||||
### 4. Generate Release Notes
|
||||
|
||||
Create release notes for your releases:
|
||||
|
||||
```bash
|
||||
# Generate release notes
|
||||
devgen release notes --version 1.4.0
|
||||
|
||||
# Custom output file
|
||||
devgen release notes --version 1.4.0 --output RELEASE.md
|
||||
|
||||
# From a specific reference
|
||||
devgen release notes --version 1.4.0 --from v1.3.0
|
||||
```
|
||||
|
||||
### 5. Generate .gitignore Files
|
||||
|
||||
Create `.gitignore` files from GitHub templates:
|
||||
|
||||
```bash
|
||||
# Interactive mode (search and select templates)
|
||||
devgen gitignore generate
|
||||
|
||||
# Specify templates directly
|
||||
devgen gitignore generate Python Node Docker
|
||||
|
||||
# List available templates
|
||||
devgen gitignore list
|
||||
|
||||
# Use cached templates (offline mode)
|
||||
devgen gitignore generate --offline Python
|
||||
```
|
||||
|
||||
**Options:**
|
||||
|
||||
- `--append` / `--overwrite` - Append to or overwrite existing `.gitignore`
|
||||
- `--output` - Specify output file path (default: `.gitignore`)
|
||||
- `--offline` - Use only cached templates
|
||||
|
||||
### 6. Generate Licenses
|
||||
|
||||
Generate open source licenses interactively:
|
||||
|
||||
```bash
|
||||
devgen license generate
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
1. Show available licenses (MIT, Apache-2.0, GPL-3.0, etc.)
|
||||
2. Prompt for author name
|
||||
3. Prompt for year (defaults to current year)
|
||||
4. Generate the license file
|
||||
|
||||
**Available licenses:**
|
||||
|
||||
- MIT
|
||||
- Apache-2.0
|
||||
- GPL-2.0, GPL-3.0
|
||||
- LGPL-2.1
|
||||
- AGPL-3.0
|
||||
- BSD-2-Clause, BSD-3-Clause
|
||||
- MPL-2.0
|
||||
- EPL-2.0
|
||||
- BSL-1.0
|
||||
- CC0-1.0
|
||||
- Unlicense
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
Configuration is stored in `~/.devgen.yaml`. You can edit it manually or use the interactive setup:
|
||||
|
||||
```bash
|
||||
devgen setup config
|
||||
```
|
||||
|
||||
**Configuration options:**
|
||||
|
||||
- `provider` - AI provider: `gemini`, `openai`, `anthropic`, `huggingface`, or `openrouter`
|
||||
- `model` - Model name (e.g., `gemini-2.5-flash`, `gpt-4`, `claude-3-opus`)
|
||||
- `api_key` - Your API key
|
||||
- `emoji` - Enable/disable emojis in commit messages (default: `true`)
|
||||
|
||||
## 📋 Command Reference
|
||||
|
||||
### Commit Commands
|
||||
|
||||
```bash
|
||||
devgen commit run [--dry-run] [--push] [--debug] [--force-rebuild]
|
||||
devgen commit validate
|
||||
devgen commit list-cached
|
||||
devgen commit clear-cache
|
||||
```
|
||||
|
||||
### Changelog Commands
|
||||
|
||||
```bash
|
||||
devgen changelog generate [--output FILE] [--from REF]
|
||||
```
|
||||
|
||||
### Release Commands
|
||||
|
||||
```bash
|
||||
devgen release notes [--version VERSION] [--output FILE] [--from REF]
|
||||
```
|
||||
|
||||
### Gitignore Commands
|
||||
|
||||
```bash
|
||||
devgen gitignore generate [TEMPLATES...] [--output FILE] [--append/--overwrite] [--offline]
|
||||
devgen gitignore list [--cached]
|
||||
```
|
||||
|
||||
### License Commands
|
||||
|
||||
```bash
|
||||
devgen license generate [--output FILE]
|
||||
```
|
||||
|
||||
### Setup Commands
|
||||
|
||||
```bash
|
||||
devgen setup config
|
||||
```
|
||||
|
||||
## 🎯 Use Cases
|
||||
|
||||
- **Automated Commit Workflow**: Let AI analyze your changes and generate meaningful commit messages
|
||||
- **Release Preparation**: Automatically generate changelogs and release notes from git history
|
||||
- **Project Setup**: Quickly add `.gitignore` and license files to new projects
|
||||
- **CI/CD Integration**: Use in scripts to automate documentation generation
|
||||
|
||||
## 🔧 Requirements
|
||||
|
||||
- Python 3.10 or higher
|
||||
- Git repository (for commit/changelog/release features)
|
||||
- API key for your chosen AI provider
|
||||
|
||||
## 📝 License
|
||||
|
||||
This project is licensed under the GPL-3.0-or-later License - see the [LICENSE](LICENSE) file for details.
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||
|
||||
## 📚 Links
|
||||
|
||||
- **Homepage**: [https://github.com/S4NKALP/devgen](https://github.com/S4NKALP/devgen)
|
||||
- **PyPI**: [https://pypi.org/project/devgen](https://pypi.org/project/devgen)
|
||||
|
||||
## 🙏 Acknowledgments
|
||||
|
||||
- Uses GitHub's official [gitignore templates](https://github.com/github/gitignore)
|
||||
- Follows [Conventional Commits](https://www.conventionalcommits.org/) specification
|
||||
@@ -0,0 +1,49 @@
|
||||
LICENSE
|
||||
MANIFEST.in
|
||||
README.md
|
||||
pyproject.toml
|
||||
setup.py
|
||||
devgen/__init__.py
|
||||
devgen/ai.py
|
||||
devgen/utils.py
|
||||
devgen/cli/__init__.py
|
||||
devgen/cli/changelog.py
|
||||
devgen/cli/commit.py
|
||||
devgen/cli/config.py
|
||||
devgen/cli/gitignore.py
|
||||
devgen/cli/license.py
|
||||
devgen/cli/main.py
|
||||
devgen/cli/release.py
|
||||
devgen/cli/setup.py
|
||||
devgen/modules/__init__.py
|
||||
devgen/modules/changelog_generator.py
|
||||
devgen/modules/commit_generator.py
|
||||
devgen/modules/gitignore_generator.py
|
||||
devgen/modules/license_generator.py
|
||||
devgen/modules/release_note_generator.py
|
||||
devgen/providers/__init__.py
|
||||
devgen/providers/anthropic.py
|
||||
devgen/providers/gemini.py
|
||||
devgen/providers/huggingface.py
|
||||
devgen/providers/openai.py
|
||||
devgen/providers/openrouter.py
|
||||
devgen/templates/commit/commit_message.j2
|
||||
devgen/templates/licenses/agpl-3.0.json
|
||||
devgen/templates/licenses/apache-2.0.json
|
||||
devgen/templates/licenses/bsd-2-clause.json
|
||||
devgen/templates/licenses/bsd-3-clause.json
|
||||
devgen/templates/licenses/bsl-1.0.json
|
||||
devgen/templates/licenses/cc0-1.0.json
|
||||
devgen/templates/licenses/epl-2.0.json
|
||||
devgen/templates/licenses/gpl-2.0.json
|
||||
devgen/templates/licenses/gpl-3.0.json
|
||||
devgen/templates/licenses/lgpl-2.1.json
|
||||
devgen/templates/licenses/mit.json
|
||||
devgen/templates/licenses/mpl-2.0.json
|
||||
devgen/templates/licenses/unlicense.json
|
||||
devgen_cli.egg-info/PKG-INFO
|
||||
devgen_cli.egg-info/SOURCES.txt
|
||||
devgen_cli.egg-info/dependency_links.txt
|
||||
devgen_cli.egg-info/entry_points.txt
|
||||
devgen_cli.egg-info/requires.txt
|
||||
devgen_cli.egg-info/top_level.txt
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
[console_scripts]
|
||||
devgen = devgen.cli.main:app
|
||||
@@ -0,0 +1,10 @@
|
||||
anthropic>=0.75.0
|
||||
google-generativeai>=0.8.5
|
||||
jinja2>=3.1.6
|
||||
openai>=2.11.0
|
||||
pyyaml>=6.0.3
|
||||
questionary>=2.1.1
|
||||
requests>=2.32.5
|
||||
rich>=14.2.0
|
||||
toml>=0.10.2
|
||||
typer>=0.20.0
|
||||
@@ -0,0 +1 @@
|
||||
devgen
|
||||
Reference in new issue
Block a user