Skip to content

Commit 9e8fb6f

Browse files
fix(tests): resolve merge conflict in test_cli.py (keep upstream test_dispatch_forwards_tool_flags)
1 parent 281e39c commit 9e8fb6f

3 files changed

Lines changed: 17 additions & 23 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
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.
55

66
## Build & Test Commands
7-
- Install: `pip install -e .[all]` or `pip install devforge-tools`
8-
- Install all tools: `pip install devforge-tools[all]`
7+
- Install: `pip install -e ".[all]"` or `pip install "git+https://github.com/Coding-Dev-Tools/devforge-cli.git[all]"` (NOTE: `devforge-tools` is not on public PyPI — use the `git+` form)
98
- Test: `pytest tests/` (or `python -m pytest tests/ -v --tb=short`)
109
- Lint: `ruff check .`
1110
- Build: `pip install build twine && python -m build && twine check dist/*`

README.md

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44

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

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

119
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.
@@ -18,31 +16,28 @@ Ten production-ready CLI tools for API contracts, SQL generation, infrastructure
1816

1917
## Why the Suite?
2018

21-
Instead of installing ten separate tools and learning ten different CLIs, `pip install devforge-tools[all]` gives you:
19+
Instead of installing ten separate tools and learning ten different CLIs, the `devforge` meta-package gives you:
2220

2321
- **Single CLI** (`devforge`) to invoke any tool — no context switching
2422
- **Consistent flags, output formats, and help** across all tools
2523
- **Shared configuration** — one install, all tools
2624

2725
## Installation
2826

27+
> **Install note:** `devforge-tools` is **not published on public PyPI**. Install it directly from the GitHub source with the `git+` form below (the only verified-working pip path right now).
28+
2929
```bash
3030
# Install everything (recommended)
31-
pip install devforge-tools[all]
32-
33-
# Or install individual tools
34-
pip install devforge-tools[guard] # API Contract Guardian
35-
pip install devforge-tools[sql] # json2sql
36-
pip install devforge-tools[deploy] # DeployDiff
37-
pip install devforge-tools[drift] # ConfigDrift
38-
pip install devforge-tools[ghost] # APIGhost
39-
pip install devforge-tools[auth] # APIAuth
40-
pip install devforge-tools[envault] # Envault
41-
pip install devforge-tools[schema] # SchemaForge
42-
pip install devforge-tools[mcp] # click-to-mcp
43-
pip install devforge-tools[deadcode] # DeadCode
31+
pip install "git+https://github.com/Coding-Dev-Tools/devforge-cli.git[all]"
32+
33+
# Or clone and install locally
34+
git clone https://github.com/Coding-Dev-Tools/devforge-cli.git
35+
cd devforge-cli
36+
pip install -e ".[all]"
4437
```
4538

39+
Each tool can also be installed on its own from its own repo (e.g. `pip install git+https://github.com/Coding-Dev-Tools/apighost.git`). See each tool's README for details.
40+
4641
## Usage
4742

4843
```bash

tests/test_cli.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ def test_install_all_uses_all_extra(self, mock_run):
5656
assert "Successfully" in result.stdout
5757
mock_run.assert_called_once()
5858
call_args = mock_run.call_args[0][0] # positional arg: the command list
59-
# Must contain "devforge-tools[all]", not "devforge-tools[guard,sql,...]"
60-
pkg_arg = next((a for a in call_args if a.startswith("devforge-tools[")), None)
61-
assert pkg_arg == "devforge-tools[all]", f"Expected devforge-tools[all], got {pkg_arg}"
59+
# Must contain the git+ URL with [all] extra, not a comma-joined list
60+
pkg_arg = next((a for a in call_args if "devforge-cli.git[" in a), None)
61+
assert pkg_arg == "git+https://github.com/Coding-Dev-Tools/devforge-cli.git[all]", f"Expected git+...devforge-cli.git[all], got {pkg_arg}"
6262

6363
def test_install_unknown_tool(self):
6464
"""Error on unknown tool name."""
@@ -121,7 +121,7 @@ def test_dispatch_not_installed_shows_install_hint(self, _mock):
121121
result = runner.invoke(app, ["guard"])
122122
assert result.exit_code == 1
123123
assert "not installed" in result.stdout
124-
assert "pip install devforge-tools[guard]" in result.stdout
124+
assert "pip install \"git+https://github.com/Coding-Dev-Tools/devforge-cli.git[guard]\"" in result.stdout
125125

126126
@mock.patch("devforge.cli._is_tool_installed", return_value=True)
127127
@mock.patch("devforge.cli.subprocess.run")
@@ -165,7 +165,7 @@ def test_dispatch_install_hint_escapes_extra_brackets(self, _mock):
165165
"""
166166
result = runner.invoke(app, ["guard"])
167167
assert result.exit_code == 1
168-
assert "pip install devforge-tools[guard]" in result.stdout
168+
assert "pip install \"git+https://github.com/Coding-Dev-Tools/devforge-cli.git[guard]\"" in result.stdout
169169

170170

171171
class TestHelp:

0 commit comments

Comments
 (0)