Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
DevForge CLI meta-package that installs all 11 developer tools in one command. Provides a unified `devforge` CLI entry point delegating to sub-tools: api-contract-guardian, json2sql, deploydiff, configdrift, apighost, apiauth, envault, schemaforge, click-to-mcp, and deadcode.

## Build & Test Commands
- Install: `pip install -e .[all]` or `pip install devforge`
- Install all tools: `pip install devforge[all]`
- Install: `pip install -e .[all]` or `pip install devforge-tools`
- Install all tools: `pip install devforge-tools[all]`
- Test: `pytest tests/` (or `python -m pytest tests/ -v --tb=short`)
- Lint: `ruff check .`
- Build: `pip install build twine && python -m build && twine check dist/*`
Expand Down
78 changes: 42 additions & 36 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,42 @@
# Changelog

All notable changes to Revenue Holdings CLI will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.0] - 2026-06-30

### Added
- Python 3.13 to CI test matrix
- Formatting check step in CI workflow
- `format-check` Makefile target

### Changed
- Makefile lint/format targets scoped to `src/ tests/` instead of entire repo

## [0.2.0] - 2026-05-17

### Added
- Support for all 10 CLI tools (previously only 4)
- New tool subcommands: ghost, auth, envault, schema, mcp, deadcode
- CI/CD workflows for testing and PyPI publishing
- Comprehensive .gitignore

### Changed
- Updated tool registry to include all 10 tools
- Made revenueholdings-license an optional dependency
- Standardized pyproject.toml across all repos

## [0.1.0] - 2026-05-14

### Added
- Initial release with 4 tools: guard, sql, deploy, drift
- Unified `rh` CLI entry point
- Tool dispatching via subprocess
# Changelog

All notable changes to Revenue Holdings CLI will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.4.0] - 2026-06-30

### Changed
- Renamed PyPI package from `devforge` to `devforge-tools` (name `devforge` was squatted on PyPI)
- Updated all URLs, badges, and references to point to `devforge-tools`

## [0.3.0] - 2026-06-30

### Added
- Python 3.13 to CI test matrix
- Formatting check step in CI workflow
- `format-check` Makefile target

### Changed
- Makefile lint/format targets scoped to `src/ tests/` instead of entire repo

## [0.2.0] - 2026-05-17

### Added
- Support for all 10 CLI tools (previously only 4)
- New tool subcommands: ghost, auth, envault, schema, mcp, deadcode
- CI/CD workflows for testing and PyPI publishing
- Comprehensive .gitignore

### Changed
- Updated tool registry to include all 10 tools
- Made revenueholdings-license an optional dependency
- Standardized pyproject.toml across all repos

## [0.1.0] - 2026-05-14

### Added
- Initial release with 4 tools: guard, sql, deploy, drift
- Unified `rh` CLI entry point
- Tool dispatching via subprocess
38 changes: 19 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
# DevForge CLI
# DevForge Tools CLI

[![GitHub stars](https://img.shields.io/github/stars/Coding-Dev-Tools/devforge?style=social)](https://github.com/Coding-Dev-Tools/devforge/stargazers)
[![GitHub stars](https://img.shields.io/github/stars/Coding-Dev-Tools/devforge-tools?style=social)](https://github.com/Coding-Dev-Tools/devforge-tools/stargazers)

**The `devforge` command — one install, ten developer CLI tools.**

[![PyPI](https://img.shields.io/pypi/v/devforge)](https://pypi.org/project/devforge/)
[![Python Versions](https://img.shields.io/pypi/pyversions/devforge)](https://pypi.org/project/devforge/)
[![PyPI](https://img.shields.io/pypi/v/devforge-tools)](https://pypi.org/project/devforge-tools/)
[![Python Versions](https://img.shields.io/pypi/pyversions/devforge-tools)](https://pypi.org/project/devforge-tools/)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

Ten production-ready CLI tools for API contracts, SQL generation, infrastructure diffs, config drift, API mocking, key management, env syncing, schema conversion, MCP servers, and dead code removal — in a single package. Install one meta-package and get immediate access to all tools via the unified `devforge` command.

---

[🏠 Landing Page](https://coding-dev-tools.github.io/devforge/) · [📝 Blog](https://coding-dev-tools.github.io/devforge/blog.html) · [🐛 Report a Bug](https://github.com/Coding-Dev-Tools/devforge/issues)
[🏠 Landing Page](https://coding-dev-tools.github.io/devforge-tools/) · [📝 Blog](https://coding-dev-tools.github.io/devforge-tools/blog.html) · [🐛 Report a Bug](https://github.com/Coding-Dev-Tools/devforge-tools/issues)

---

## Why the Suite?

Instead of installing ten separate tools and learning ten different CLIs, `pip install devforge[all]` gives you:
Instead of installing ten separate tools and learning ten different CLIs, `pip install devforge-tools[all]` gives you:

- **Single CLI** (`devforge`) to invoke any tool — no context switching
- **Consistent flags, output formats, and help** across all tools
Expand All @@ -28,19 +28,19 @@ Instead of installing ten separate tools and learning ten different CLIs, `pip i

```bash
# Install everything (recommended)
pip install devforge[all]
pip install devforge-tools[all]

# Or install individual tools
pip install devforge[guard] # API Contract Guardian
pip install devforge[sql] # json2sql
pip install devforge[deploy] # DeployDiff
pip install devforge[drift] # ConfigDrift
pip install devforge[ghost] # APIGhost
pip install devforge[auth] # APIAuth
pip install devforge[envault] # Envault
pip install devforge[schema] # SchemaForge
pip install devforge[mcp] # click-to-mcp
pip install devforge[deadcode] # DeadCode
pip install devforge-tools[guard] # API Contract Guardian
pip install devforge-tools[sql] # json2sql
pip install devforge-tools[deploy] # DeployDiff
pip install devforge-tools[drift] # ConfigDrift
pip install devforge-tools[ghost] # APIGhost
pip install devforge-tools[auth] # APIAuth
pip install devforge-tools[envault] # Envault
pip install devforge-tools[schema] # SchemaForge
pip install devforge-tools[mcp] # click-to-mcp
pip install devforge-tools[deadcode] # DeadCode
```

## Usage
Expand Down Expand Up @@ -103,9 +103,9 @@ devforge deadcode scan src/

## Links

- [Landing Page](https://coding-dev-tools.github.io/devforge/)
- [Landing Page](https://coding-dev-tools.github.io/devforge-tools/)
- [GitHub Organization](https://github.com/Coding-Dev-Tools)
- [Report an Issue](https://github.com/Coding-Dev-Tools/devforge/issues)
- [Report an Issue](https://github.com/Coding-Dev-Tools/devforge-tools/issues)

## License

Expand Down
14 changes: 7 additions & 7 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ requires = ["setuptools>=68.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "devforge"
version = "0.3.0"
name = "devforge-tools"
version = "0.4.0"
description = "Unified CLI for 10 developer tools: API contracts, SQL generation, infra diffs, config drift, API mocking, key management, env syncing, schema conversion, MCP servers, and dead code removal"
readme = "README.md"
requires-python = ">=3.10"
license = "MIT"
authors = [{name = "DevForge"}]
keywords = ["devforge", "cli", "devops", "developer-tools", "api-contract", "openapi", "json-to-sql", "infrastructure", "terraform", "cloudformation", "config-drift", "devsecops", "mocking", "api-keys", "env", "schema", "mcp", "dead-code"]
keywords = ["devforge-tools", "devforge", "cli", "devops", "developer-tools", "api-contract", "openapi", "json-to-sql", "infrastructure", "terraform", "cloudformation", "config-drift", "devsecops", "mocking", "api-keys", "env", "schema", "mcp", "dead-code"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
Expand All @@ -26,7 +26,7 @@ dependencies = [
"rich>=13.0.0",
]

# Optional groups — install with: pip install devforge[all]
# Optional groups install with: pip install devforge-tools[all]
[project.optional-dependencies]
guard = ["api-contract-guardian>=0.1.0"]
sql = ["json2sql>=0.1.0"]
Expand All @@ -53,9 +53,9 @@ all = [
dev = ["pytest>=7.0.0", "pyright>=1.1.300"]

[project.urls]
Homepage = "https://github.com/Coding-Dev-Tools/devforge"
Repository = "https://github.com/Coding-Dev-Tools/devforge"
Issues = "https://github.com/Coding-Dev-Tools/devforge/issues"
Homepage = "https://github.com/Coding-Dev-Tools/devforge-tools"
Repository = "https://github.com/Coding-Dev-Tools/devforge-tools"
"Issue Tracker" = "https://github.com/Coding-Dev-Tools/devforge-tools/issues"

[project.scripts]
devforge = "devforge.cli:app"
Expand Down
2 changes: 1 addition & 1 deletion src/devforge/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""DevForge — unified CLI for all developer tools."""

__version__ = "0.3.0"
__version__ = "0.4.0"

# Tool registry: name -> (package, description, icon, pricing)
TOOLS = {
Expand Down
8 changes: 4 additions & 4 deletions src/devforge/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ def list_tools(
)

console.print(table)
console.print("\n[dim]Install individually:[/dim] [green]pip install devforge[guard][/green]")
console.print("[dim]Install all:[/dim] [green]pip install devforge[all][/green]")
console.print("\n[dim]Install individually:[/dim] [green]pip install devforge-tools[guard][/green]")
console.print("[dim]Install all:[/dim] [green]pip install devforge-tools[all][/green]")


@app.command()
Expand All @@ -96,7 +96,7 @@ def install(
console.print(f"Available: {', '.join(TOOLS.keys())}, 'all'")
raise typer.Exit(code=1)

pkg = f"devforge[{extras}]"
pkg = f"devforge-tools[{extras}]"
console.print(f"[yellow]Installing {pkg}...[/yellow]")
try:
result = subprocess.run([sys.executable, "-m", "pip", "install", pkg], capture_output=True, text=True)
Expand Down Expand Up @@ -162,7 +162,7 @@ def dispatch(
except FileNotFoundError:
console.print(
f"[red]Tool '{tool_name}' not installed.[/red]\n"
f"Install with: [green]pip install devforge[{tool_name}][/green]"
f"Install with: [green]pip install devforge-tools[{tool_name}][/green]"
)
raise typer.Exit(code=1) from None

Expand Down