Skip to content

Commit bfa8f01

Browse files
author
Revenue Holdings
committed
fix: release readiness - fix blockers, add CI/CD, standardize configs
1 parent 9ceeea8 commit bfa8f01

7 files changed

Lines changed: 268 additions & 36 deletions

File tree

.github/workflows/ci.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
matrix:
14+
python-version: ['3.10', '3.11', '3.12']
15+
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Set up Python ${{ matrix.python-version }}
20+
uses: actions/setup-python@v5
21+
with:
22+
python-version: ${{ matrix.python-version }}
23+
24+
- name: Install dependencies
25+
run: |
26+
python -m pip install --upgrade pip
27+
pip install -e ".[dev]"
28+
29+
- name: Run tests
30+
run: |
31+
pytest tests/ -v --tb=short
32+
33+
- name: Check package build
34+
run: |
35+
pip install build twine
36+
python -m build
37+
twine check dist/*

.github/workflows/publish.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Publish to PyPI
2+
3+
on:
4+
release:
5+
types: [ published ]
6+
workflow_dispatch:
7+
8+
jobs:
9+
publish:
10+
runs-on: ubuntu-latest
11+
environment: pypi
12+
permissions:
13+
id-token: write
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Set up Python
19+
uses: actions/setup-python@v5
20+
with:
21+
python-version: '3.12'
22+
23+
- name: Install dependencies
24+
run: |
25+
python -m pip install --upgrade pip
26+
pip install build twine
27+
28+
- name: Build package
29+
run: python -m build
30+
31+
- name: Check package
32+
run: twine check dist/*
33+
34+
- name: Publish to PyPI
35+
uses: pypa/gh-action-pypi-publish@release/v1

.gitignore

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,72 @@
1+
# Byte-compiled / optimized / compiled files
12
__pycache__/
23
*.py[cod]
34
*$py.class
4-
*.egg-info/
5-
dist/
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
611
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
eggs/
716
.eggs/
17+
lib/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
*.egg-info/
824
*.egg
25+
26+
# PyInstaller
27+
*.manifest
28+
*.spec
29+
30+
# Installer logs
31+
pip-log.txt
32+
pip-delete-this-directory.txt
33+
34+
# Unit test / coverage
35+
htmlcov/
36+
.tox/
37+
.nox/
38+
.coverage
39+
.coverage.*
40+
.cache
41+
nosetests.xml
42+
coverage.xml
43+
*.cover
44+
*.py,cover
45+
.hypothesis/
46+
.pytest_cache/
47+
48+
# Translations
49+
*.mo
50+
*.pot
51+
52+
# Environments
953
.env
54+
.venv
55+
env/
1056
venv/
11-
.venv/
57+
ENV/
58+
59+
# IDE
60+
.vscode/
61+
.idea/
62+
*.swp
63+
*.swo
64+
*~
65+
66+
# OS
67+
.DS_Store
68+
Thumbs.db
69+
70+
# Project specific
71+
research/
72+
fixtures/generated/

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Changelog
2+
3+
All notable changes to Revenue Holdings CLI will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [0.2.0] - 2026-05-17
9+
10+
### Added
11+
- Support for all 10 CLI tools (previously only 4)
12+
- New tool subcommands: ghost, auth, envault, schema, mcp, deadcode
13+
- CI/CD workflows for testing and PyPI publishing
14+
- Comprehensive .gitignore
15+
16+
### Changed
17+
- Updated tool registry to include all 10 tools
18+
- Made revenueholdings-license an optional dependency
19+
- Standardized pyproject.toml across all repos
20+
21+
## [0.1.0] - 2026-05-14
22+
23+
### Added
24+
- Initial release with 4 tools: guard, sql, deploy, drift
25+
- Unified `rh` CLI entry point
26+
- Tool dispatching via subprocess

README.md

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,27 @@
22

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

5-
**The `rh` command — one install, four developer CLI tools.**
5+
**The `rh` command — one install, ten developer CLI tools.**
66

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

11-
Four production-ready CLI tools for API contracts, SQL generation, infrastructure diffs, and config drift — in a single package. Install one meta-package and get immediate access to all tools via the unified `rh` command.
11+
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 `rh` command.
1212

1313
---
1414

15-
[🏠 Landing Page](https://coding-dev-tools.github.io/revenueholdings.dev/) · [💰 Pricing](https://coding-dev-tools.github.io/revenueholdings.dev/pricing.html) · [📝 Blog](https://coding-dev-tools.github.io/revenueholdings.dev/blog.html) · [🐛 Report a Bug](https://github.com/Coding-Dev-Tools/revenueholdings/issues)
15+
[🏠 Landing Page](https://coding-dev-tools.github.io/revenueholdings.dev/) · [📝 Blog](https://coding-dev-tools.github.io/revenueholdings.dev/blog.html) · [🐛 Report a Bug](https://github.com/Coding-Dev-Tools/revenueholdings/issues)
1616

1717
---
1818

1919
## Why the Suite?
2020

21-
Instead of installing four separate tools and learning four different CLIs, `pip install revenueholdings[all]` gives you:
21+
Instead of installing ten separate tools and learning ten different CLIs, `pip install revenueholdings[all]` gives you:
2222

2323
- **Single CLI** (`rh`) to invoke any tool — no context switching
2424
- **Consistent flags, output formats, and help** across all tools
25-
- **Shared license key** — one `REVENUEHOLDINGS_LICENSE_KEY` env var for everything
26-
- **33% cheaper** than buying each tool individually ($39/mo suite vs $58/mo à la carte)
25+
- **Shared configuration** — one install, all tools
2726

2827
## Installation
2928

@@ -36,6 +35,12 @@ pip install revenueholdings[guard] # API Contract Guardian
3635
pip install revenueholdings[sql] # json2sql
3736
pip install revenueholdings[deploy] # DeployDiff
3837
pip install revenueholdings[drift] # ConfigDrift
38+
pip install revenueholdings[ghost] # APIGhost
39+
pip install revenueholdings[auth] # APIAuth
40+
pip install revenueholdings[envault] # Envault
41+
pip install revenueholdings[schema] # SchemaForge
42+
pip install revenueholdings[mcp] # click-to-mcp
43+
pip install revenueholdings[deadcode] # DeadCode
3944
```
4045

4146
## Usage
@@ -61,6 +66,24 @@ rh deploy preview plan.json
6166

6267
# ConfigDrift — catch config drift between environments
6368
rh drift check dev.yaml prod.yaml
69+
70+
# APIGhost — spawn mock API server from OpenAPI spec
71+
rh ghost serve openapi.yaml
72+
73+
# APIAuth — generate API keys and JWTs
74+
rh auth generate --type api-key
75+
76+
# Envault — sync .env files across environments
77+
rh envault diff .env.dev .env.prod
78+
79+
# SchemaForge — convert between ORM formats
80+
rh schema convert schema.prisma --to drizzle
81+
82+
# click-to-mcp — wrap CLI as MCP server
83+
rh mcp wrap my-cli --transport http
84+
85+
# DeadCode — find unused exports in React/Next.js
86+
rh deadcode scan src/
6487
```
6588

6689
## Tools
@@ -71,26 +94,16 @@ rh drift check dev.yaml prod.yaml
7194
| `sql` | json2sql | Convert JSON datasets to SQL with smart type inference across PostgreSQL, MySQL, and SQLite |
7295
| `deploy` | deploydiff | Preview infra changes with cost estimates and automatic rollback commands for Terraform, CloudFormation, and Pulumi |
7396
| `drift` | configdrift | Compare configs across environments, flag missing keys, deprecated values, and compliance violations |
74-
75-
## Pricing
76-
77-
Every tool has a generous free tier (50–1,500 checks/month per tool). Upgrade for CI/CD integration, unlimited usage, and team features.
78-
79-
| Tier | Price | Best For |
80-
|------|-------|----------|
81-
| **Free** | $0 | Hobbyists, OSS — CLI only, rate-limited |
82-
| **Pro (per tool)** | $9–$19/mo | Professional devs needing CI/CD and unlimited usage |
83-
| **Suite (all 4)** | **$39/mo** ($399/yr) | **Save 33%** vs buying individually — full toolkit, one license |
84-
| **Team** | $79/mo | Up to 5 devs — dashboards, alerts, priority support |
85-
| **Enterprise** | Custom | SSO/SAML, RBAC, SLA, on-prem |
86-
87-
> 🔹 One license covers all Revenue Holdings CLI tools. Annual billing saves ~17%.
88-
> 🔹 Full pricing breakdown at [revenueholdings.dev/pricing](https://coding-dev-tools.github.io/revenueholdings.dev/pricing.html)
97+
| `ghost` | apighost | Mock API server from OpenAPI specs with VCR cassette recording and realistic fake data |
98+
| `auth` | apiauth | API key and JWT lifecycle management with AES-256-GCM encrypted local store |
99+
| `envault` | envault | Env variable syncing, diffing, and secret rotation with Vault/AWS SSM/Doppler/1Password support |
100+
| `schema` | schemaforge | Bidirectional ORM schema converter — 11 formats with zero-loss roundtripping |
101+
| `mcp` | click-to-mcp | Auto-wrap any Click/typer CLI as an MCP server — zero code changes |
102+
| `deadcode` | deadcode | Detect unused exports, dead routes, orphaned CSS in TypeScript/React/Next.js projects |
89103

90104
## Links
91105

92106
- [Landing Page](https://coding-dev-tools.github.io/revenueholdings.dev/)
93-
- [Full Pricing](https://coding-dev-tools.github.io/revenueholdings.dev/pricing.html)
94107
- [GitHub Organization](https://github.com/Coding-Dev-Tools)
95108
- [Report an Issue](https://github.com/Coding-Dev-Tools/revenueholdings/issues)
96109

@@ -100,4 +113,4 @@ MIT — see [LICENSE](LICENSE) for details.
100113

101114
---
102115

103-
<sub>Built by [Revenue Holdings](https://coding-dev-tools.github.io/revenueholdings.dev/) — autonomous AI agents generating revenue 24/7.</sub>
116+
<sub>Built by [Revenue Holdings](https://coding-dev-tools.github.io/revenueholdings.dev/) — autonomous AI agents generating revenue 24/7.</sub>

pyproject.toml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "revenueholdings"
7-
version = "0.1.0"
8-
description = "Unified CLI for 4 developer tools: API contract checking, JSON-to-SQL conversion, infrastructure diff previews, and config drift detection"
7+
version = "0.2.0"
8+
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"
99
readme = "README.md"
1010
requires-python = ">=3.10"
1111
license = "MIT"
1212
authors = [{name = "Revenue Holdings"}]
13-
keywords = ["revenueholdings", "cli", "devops", "developer-tools", "api-contract", "openapi", "json-to-sql", "infrastructure", "terraform", "cloudformation", "config-drift", "devsecops"]
13+
keywords = ["revenueholdings", "cli", "devops", "developer-tools", "api-contract", "openapi", "json-to-sql", "infrastructure", "terraform", "cloudformation", "config-drift", "devsecops", "mocking", "api-keys", "env", "schema", "mcp", "dead-code"]
1414
classifiers = [
1515
"Development Status :: 4 - Beta",
1616
"Intended Audience :: Developers",
@@ -31,11 +31,23 @@ guard = ["api-contract-guardian>=0.1.0"]
3131
sql = ["json2sql>=0.1.0"]
3232
deploy = ["deploydiff>=0.1.0"]
3333
drift = ["configdrift>=0.1.0"]
34+
ghost = ["apighost>=0.1.0"]
35+
auth = ["apiauth>=0.2.0"]
36+
envault = ["envault>=0.1.0"]
37+
schema = ["schemaforge>=1.7.0"]
38+
mcp = ["click-to-mcp>=0.4.0"]
39+
deadcode = ["deadcode>=0.1.1"]
3440
all = [
3541
"api-contract-guardian>=0.1.0",
3642
"json2sql>=0.1.0",
3743
"deploydiff>=0.1.0",
3844
"configdrift>=0.1.0",
45+
"apighost>=0.1.0",
46+
"apiauth>=0.2.0",
47+
"envault>=0.1.0",
48+
"schemaforge>=1.7.0",
49+
"click-to-mcp>=0.4.0",
50+
"deadcode>=0.1.1",
3951
]
4052
dev = ["pytest>=7.0.0"]
4153

@@ -52,4 +64,4 @@ where = ["src"]
5264

5365
[tool.pytest.ini_options]
5466
testpaths = ["tests"]
55-
addopts = "-v --tb=short"
67+
addopts = "-v --tb=short"

0 commit comments

Comments
 (0)