diff --git a/.gitignore b/.gitignore index ebbf8a5..7bc0edc 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ logs/ devtools.egg-info/ build/ +devtools_utils.egg-info/ diff --git a/devtools_utils.egg-info/PKG-INFO b/devtools_utils.egg-info/PKG-INFO deleted file mode 100644 index 05ce03a..0000000 --- a/devtools_utils.egg-info/PKG-INFO +++ /dev/null @@ -1,537 +0,0 @@ -Metadata-Version: 2.4 -Name: devtools-utils -Version: 0.1.0 -Summary: A collection of developer tools -Home-page: https://github.com/S4NKALP/DevTools -Author: Sankalp Tharu -Author-email: Sankalp Tharu -License: GPL-3.0-or-later -Project-URL: Homepage, https://github.com/S4NKALP/DevTools -Keywords: devtools,cli,git,changelog,gitignore,license -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.7 -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: click>=8.0.0 -Requires-Dist: rich>=10.0.0 -Requires-Dist: requests>=2.25.0 -Requires-Dist: pyyaml>=5.0.0 -Dynamic: author -Dynamic: home-page -Dynamic: license-file -Dynamic: requires-python - -# DevTools - -A collection of developer tools to enhance your workflow. This package includes tools for generating commit messages, changelogs, hooks, and .gitignore files, all accessible from a single unified CLI: `devtools`. - -## Installation - -```bash -# Stable release from PyPI -pip install devtools-utils - -# Using pipx (recommended for isolated CLI) -pipx install devtools-utils - -# Using uv (fast Python package manager) -uv tool install devtools-utils -``` - -Arch Linux prerequisites (for pipx/uv): - -```bash -sudo pacman -S --needed python python-pip python-pipx git -# optional: uv via pipx -pipx install uv -``` - -## Configuration - -### API Keys - -The tools use various APIs that require API keys. You can set these using the config command: - -```bash -# Set AI provider API key (required for AI features) -# For OpenRouter -devtools config set OPENROUTER_API_KEY "your-openrouter-api-key" - -# For OpenAI -devtools config set OPENAI_API_KEY "your-openai-api-key" - -# For Google Gemini -devtools config set GOOGLE_API_KEY "your-google-api-key" - -# For Anthropic Claude -devtools config set ANTHROPIC_API_KEY "your-anthropic-api-key" - -# For Hugging Face -devtools config set HUGGINGFACE_API_KEY "your-huggingface-api-key" - -# Set GitHub token (recommended for license generator) -devtools config set GITHUB_TOKEN "your-github-token" -``` - -Or set them in your environment: - -```bash -# AI Provider API keys -export OPENROUTER_API_KEY="your-openrouter-api-key" -export OPENAI_API_KEY="your-openai-api-key" -export GOOGLE_API_KEY="your-google-api-key" -export ANTHROPIC_API_KEY="your-anthropic-api-key" -export HUGGINGFACE_API_KEY="your-huggingface-api-key" - -# GitHub token for license generator -export GITHUB_TOKEN="your-github-token" -``` - -### Managing Configuration - -```bash -# Show all configuration -devtools config show - -# Show specific value -devtools config show OPENROUTER_API_KEY - -# Delete a value -devtools config delete OPENROUTER_API_KEY - -# Clear all configuration -devtools config clear -``` - -Configuration files are stored in: - -- `~/.devtools/config.yaml` - -Example config.yaml: - -```yaml -# API Keys -OPENROUTER_API_KEY: -OPENAI_API_KEY: -GOOGLE_API_KEY: -ANTHROPIC_API_KEY: -HUGGINGFACE_API_KEY: -GITHUB_TOKEN: - -# AI Settings -provider: openrouter # or "openai", "gemini", "claude", "huggingface" -model: mistralai/mixtral-8x7b-instruct # model name for the selected provider -max_tokens: 1024 -temperature: 0.7 -output_format: text - -# Commit Settings -conventional_commits: true -emoji: false - -# Repository Settings -repositories: [] -``` - -## Configuration via CLI - -You can set up all configuration options for DevTools using the CLI. This is the recommended way to configure your `~/.devtools/config.yaml` file: - -```bash -# Set AI provider (required for AI features) -devtools config set provider "openrouter" # or "openai", "gemini", "claude", "huggingface" - -# Set preferred AI model (optional, depends on provider) -# For OpenRouter -devtools config set model "mistralai/mixtral-8x7b-instruct" -# For OpenAI -devtools config set model "gpt-4-turbo-preview" -# For Gemini -devtools config set model "gemini-pro" -# For Claude -devtools config set model "claude-3-opus-20240229" -# For Hugging Face -devtools config set model "mistralai/Mixtral-8x7B-Instruct-v0.1" - -# Set temperature for AI completions (optional, default is 0.7) -devtools config set temperature 0.7 - -# Set maximum tokens for AI completions (optional, default is 150) -devtools config set max_tokens 150 - -# Set conventional commit style (optional, default is true) -devtools config set conventional_commits true - -# Enable or disable emojis in commit messages (optional, default is false) -devtools config set emoji false - -# Set output format (optional, e.g., text or markdown) -devtools config set output_format text - -# Set repositories list (optional, usually not needed) -devtools config set repositories "[]" -``` - -To view your current configuration: - -```bash -devtools config show -``` - -To delete a config value: - -```bash -devtools config delete output_format -``` - -To clear all config: - -```bash -devtools config clear -``` - -All configuration is stored in `~/.devtools/config.yaml` and can be managed entirely through these commands. You do not need to manually edit the YAML file. - -## Usage - -All tools are available under the main `devtools` command: - -``` -devtools [COMMAND] [SUBCOMMAND] [OPTIONS] -``` - -### Commit Message Generator - -Generate and apply commit messages, create changelogs, and manage configuration. - -#### Generate Commit Message - -```bash -devtools commit generate [OPTIONS] -``` - -**Options:** - -- `--files, -f [FILE]...` Specific files to generate commit messages for -- `--repo, -r PATH` Repository path (default: current directory) -- `--commit, -c` Automatically commit changes -- `--push, -p` Push changes after commit -- `--conventional/--no-conventional` Use conventional commit format (default: True) -- `--no-stage` Skip automatic staging of changes -- `--sign` Sign commits with GPG -- `--temperature FLOAT` AI temperature (0.0-1.0) - - `--emoji/--no-emoji` Include emoji prefixes (default: disabled) - - `--smart-group/--per-file` Group multi-file changes into one commit (default: smart-group) - - `--no-verify` Bypass git hooks when committing - -Commit messages follow the conventional format (emojis optional): - -When emojis are enabled, these prefixes are used: -- ✨ feat: New feature -- 🐛 fix: Bug fix -- 📚 docs: Documentation -- 💅 style: Formatting, missing semi colons, etc -- ♻️ refactor: Code refactoring -- ✅ test: Adding tests -- 🔧 chore: Maintenance - -Per-file vs grouped commits: - -- Use `--smart-group` (default) to generate a single message that covers all staged changes. -- Use `--per-file` to generate a message per changed file. The CLI will create separate git commits, one per file, each with its own AI-generated message. - -Examples: - -```bash -# Single grouped message (default behavior) -devtools commit generate -c - -# Separate commits per file -devtools commit generate --per-file -c -``` - -#### Changelog Generation - -```bash -# From commit subcommand (legacy path) -devtools commit changelog generate [OPTIONS] - -# Top-level changelog commands -devtools changelog generate [OPTIONS] # from git history (alias: g) -devtools changelog generate-interactive [OPTIONS] # interactive mode (alias: i) -devtools changelog generate-from-file [OPTIONS] # from a file (alias: f) -``` - -**Options (history-based):** - -- `--version, -v VERSION` Version number (required) -- `--from-tag, -t TAG` Generate from this tag -- `--days, -d N` Generate from the last N days -- `--commits, -n N` Generate from the last N commits -- `--output, -o FILE` Output file path (default: CHANGELOG.md) -- `--temperature FLOAT` AI temperature (default: 0.7) - -**Options (interactive):** - -- `--version, -v VERSION` Version number (required) -- `--output, -o FILE` Output file path (default: CHANGELOG.md) -- `--temperature FLOAT` AI temperature (default: 0.7) - -**Options (from file):** - -- `--version, -v VERSION` Version number (required) -- `--input, -i FILE` Input changes file (required) -- `--output, -o FILE` Output file path (default: CHANGELOG.md) -- `--temperature FLOAT` AI temperature (default: 0.7) - -The changelog generator supports three modes: - -1. Git history: Automatically generates changelog from commit history -2. Interactive: Enter changes manually with emoji prefixes -3. File-based: Generate from a file containing changes - -Changes are grouped by type with emojis: - -- ✨ Added -- 🔄 Changed -- 🐛 Fixed -- 🚀 Performance -- 📝 Documentation -- 🔧 Maintenance -- 🗑️ Removed -- 🔒 Security - -#### Repository Status - -```bash -devtools commit status -``` - ---- - -### Gitignore Generator - -Generate .gitignore files for your project, either by auto-detecting project types or specifying technologies. - -#### Auto-detect Project Types - -```bash -devtools gitignore auto [OPTIONS] -``` - -**Options:** - -- `--directory, -d DIR` Directory to scan (default: current directory) -- `--output, -o FILE` Output file path (default: .gitignore) - -#### Generate for Specific Technologies - -```bash -devtools gitignore generate python django vscode [OPTIONS] -``` - -**Options:** - -- `--output, -o FILE` Output file path (default: .gitignore) - -The generator uses the gitignore.io API to fetch templates. No API key is required. - ---- - -### License Generator - -Generate LICENSE files for your project using templates from GitHub's license API. - -```bash -# List available licenses -devtools license list - -# Generate a license -devtools license generate [OPTIONS] -``` - -**Options:** - -- `--type, -t TYPE` Type of license to generate (e.g., mit, apache-2.0, gpl-3.0) -- `--author, -a NAME` Name of the author/copyright holder -- `--year, -y YEAR` Year for the copyright notice (defaults to current year) -- `--output, -o FILE` Output file path (default: LICENSE) -- `--multi, -m` Generate multiple licenses in one run - -Example: - -```bash -# List available licenses -devtools license list - -# Interactive mode -devtools license generate - -# With all options specified -devtools license generate --type mit --author "John Doe" --year 2024 --output LICENSE - -# Generate multiple licenses in one go -devtools license generate --multi -``` - -The license generator uses GitHub's license API to fetch templates. For optimal performance: - -1. Set up a GitHub token: - ```bash - devtools config set GITHUB_TOKEN "your-github-token" - ``` - This increases your API rate limit from 60 to 5,000 requests per hour. - -2. If no token is set, the tool will use a fallback list of common licenses. - -If an invalid license type is provided, the tool will display a list of available licenses. - -When generating multiple licenses with `--multi`, separate files are created (e.g., `LICENSE_mit`, `LICENSE_apache-2.0`). A summary `LICENSE.md` is also written linking to each generated license. - ---- - -### Hooks Manager - -Manage Git hooks easily. Install lint/test hooks for `pre-commit` and `pre-push`. - -```bash -# Install both pre-commit and pre-push hooks in current repo -devtools hooks install - -# Install only pre-commit -devtools hooks install --pre-commit --no-pre-push - -# Install only pre-push -devtools hooks install --no-pre-commit --pre-push - -# Uninstall hooks -devtools hooks uninstall # both -devtools hooks uninstall --pre-commit --no-pre-push - -# Use your own script templates -devtools hooks install \ - --pre-commit-template ./scripts/hooks/my-pre-commit.sh \ - --pre-push-template ./scripts/hooks/my-pre-push.sh - -# List hooks present in the repository -devtools hooks list -``` - -The hooks auto-detect your ecosystem and run sensible defaults: - -- Node.js: `npm run lint --if-present` then `eslint` or `prettier --check`; tests via `npm test`/`pnpm test`/`yarn test` -- Python: `ruff .` or fallback to `black --check .`; tests via `pytest -q` -- Rust: `cargo fmt --check`; tests via `cargo test` -- Go: `gofmt -l` (fail if unformatted), `go vet`; tests via `go test ./...` -- Java: Gradle `check`/`test` or Maven `verify -DskipTests=true`/`test` -- If `.pre-commit-config.yaml` is present, `pre-commit run --all-files` is used for pre-commit, and `pre-commit run --hook-stage push --all-files` for pre-push. - -You can customize hooks by editing files in `.git/hooks/` after installation. -Alternatively, pass `--pre-commit-template` and/or `--pre-push-template` to install from your own script files. The files will be copied into `.git/hooks/` and made executable. - -Note: If a hook already exists, DevTools creates a timestamped backup in `.git/hooks/` with the `.bak` suffix before overwriting, e.g., `pre-commit.20250101123000.bak`. - -Auto-fix behavior (pre-commit): - -- If initial checks fail, DevTools attempts to auto-fix issues by running `scripts/format.py` and `scripts/lintfix.py` if those files exist in your repo. -- Any changes made are automatically staged (`git add -A`), and checks are re-run. The commit will fail only if the re-run still fails. -- You can run these scripts manually as well: - -```bash -python3 scripts/format.py -python3 scripts/lintfix.py -``` - ---- - -## Features - -- **Commit Message Generator:** - - AI-powered commit message suggestions using multiple providers: - - OpenRouter (Mixtral 8x7B) - - OpenAI (GPT-4, GPT-3.5) - - Google Gemini - - Anthropic Claude - - Hugging Face - - Conventional commit format with emojis - - GPG signing and push support - - Changelog generation from commit history - - Repository status with diff previews -- **Gitignore Generator:** - - Auto-detects project types and generates .gitignore - - Uses gitignore.io API for up-to-date templates - - No API key required - - Falls back to generic template if API is unavailable -- **License Generator:** - - Generates LICENSE files using GitHub's license API - - Supports all licenses available on GitHub - - Interactive license selection - - Automatic year and author replacement - -## Requirements - -- Python 3.8+ -- Git -- AI Provider API key (one of): - - OpenRouter API key - - OpenAI API key - - Google API key - - Anthropic API key - - Hugging Face API key -- GitHub token (recommended for license generator) - -## Development - -```bash -# Clone the repository -git clone https://github.com/S4NKALP/DevTools.git -cd DevTools - -# (Optional) Create and activate a virtual environment -python3 -m venv .venv -source .venv/bin/activate - -# Install package in editable (dev) mode -pip install -e . - -# Install dev tools (optional but recommended) -pip install pytest black ruff - -# Run tests -pytest - -# Lint and format -black . - -# Or use the helper scripts (if present) -python3 scripts/format.py -python3 scripts/lintfix.py - -# Run the CLI locally after editable install -devtools --help -``` - -Build from source (PEP 517): - -```bash -# Requires pyproject.toml -python -m build -# or with uv -uv build -``` - -## Contributing - -Contributions are welcome! Please open issues or submit pull requests. - -## License - -This project is licensed under the GNU General Public License v3.0 (GPL-3.0) - see the LICENSE file for details. diff --git a/devtools_utils.egg-info/SOURCES.txt b/devtools_utils.egg-info/SOURCES.txt deleted file mode 100644 index b7a0476..0000000 --- a/devtools_utils.egg-info/SOURCES.txt +++ /dev/null @@ -1,32 +0,0 @@ -LICENSE -README.md -pyproject.toml -setup.py -devtools/__init__.py -devtools/cli.py -devtools/changelog/__init__.py -devtools/changelog/cli.py -devtools/changelog/generator.py -devtools/commitgen/__init__.py -devtools/commitgen/cli.py -devtools/commitgen/generator.py -devtools/commitgen/git.py -devtools/gitignore/__init__.py -devtools/gitignore/cli.py -devtools/gitignore/detector.py -devtools/gitignore/generator.py -devtools/hooks/__init__.py -devtools/hooks/cli.py -devtools/licensegen/__init__.py -devtools/licensegen/cli.py -devtools/licensegen/generator.py -devtools/shared/__init__.py -devtools/shared/ai.py -devtools/shared/config.py -devtools/shared/git.py -devtools_utils.egg-info/PKG-INFO -devtools_utils.egg-info/SOURCES.txt -devtools_utils.egg-info/dependency_links.txt -devtools_utils.egg-info/entry_points.txt -devtools_utils.egg-info/requires.txt -devtools_utils.egg-info/top_level.txt \ No newline at end of file diff --git a/devtools_utils.egg-info/dependency_links.txt b/devtools_utils.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/devtools_utils.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/devtools_utils.egg-info/entry_points.txt b/devtools_utils.egg-info/entry_points.txt deleted file mode 100644 index 00a76ba..0000000 --- a/devtools_utils.egg-info/entry_points.txt +++ /dev/null @@ -1,2 +0,0 @@ -[console_scripts] -devtools = devtools.cli:cli diff --git a/devtools_utils.egg-info/requires.txt b/devtools_utils.egg-info/requires.txt deleted file mode 100644 index 677c6ec..0000000 --- a/devtools_utils.egg-info/requires.txt +++ /dev/null @@ -1,4 +0,0 @@ -click>=8.0.0 -rich>=10.0.0 -requests>=2.25.0 -pyyaml>=5.0.0 diff --git a/devtools_utils.egg-info/top_level.txt b/devtools_utils.egg-info/top_level.txt deleted file mode 100644 index 82bc125..0000000 --- a/devtools_utils.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -devtools