deployforge 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- deployforge-0.1.0/LICENSE +21 -0
- deployforge-0.1.0/PKG-INFO +218 -0
- deployforge-0.1.0/README.md +176 -0
- deployforge-0.1.0/pyproject.toml +92 -0
- deployforge-0.1.0/setup.cfg +4 -0
- deployforge-0.1.0/src/deployforge/__init__.py +3 -0
- deployforge-0.1.0/src/deployforge/__version__.py +3 -0
- deployforge-0.1.0/src/deployforge/analyzer/__init__.py +23 -0
- deployforge-0.1.0/src/deployforge/analyzer/backend.py +326 -0
- deployforge-0.1.0/src/deployforge/analyzer/database.py +120 -0
- deployforge-0.1.0/src/deployforge/analyzer/frontend.py +179 -0
- deployforge-0.1.0/src/deployforge/analyzer/project.py +389 -0
- deployforge-0.1.0/src/deployforge/analyzer/shared.py +109 -0
- deployforge-0.1.0/src/deployforge/cli.py +825 -0
- deployforge-0.1.0/src/deployforge/config.py +195 -0
- deployforge-0.1.0/src/deployforge/deployment/__init__.py +19 -0
- deployforge-0.1.0/src/deployforge/deployment/orchestrator.py +331 -0
- deployforge-0.1.0/src/deployforge/deployment/planner.py +172 -0
- deployforge-0.1.0/src/deployforge/deployment/verifier.py +65 -0
- deployforge-0.1.0/src/deployforge/errors/__init__.py +53 -0
- deployforge-0.1.0/src/deployforge/github/__init__.py +21 -0
- deployforge-0.1.0/src/deployforge/github/integration.py +127 -0
- deployforge-0.1.0/src/deployforge/integration/__init__.py +20 -0
- deployforge-0.1.0/src/deployforge/integration/cors.py +30 -0
- deployforge-0.1.0/src/deployforge/integration/environment.py +62 -0
- deployforge-0.1.0/src/deployforge/integration/frontend_backend.py +39 -0
- deployforge-0.1.0/src/deployforge/providers/__init__.py +32 -0
- deployforge-0.1.0/src/deployforge/providers/base.py +151 -0
- deployforge-0.1.0/src/deployforge/providers/render.py +218 -0
- deployforge-0.1.0/src/deployforge/providers/vercel.py +205 -0
- deployforge-0.1.0/src/deployforge/security/__init__.py +4 -0
- deployforge-0.1.0/src/deployforge/security/gitignore.py +35 -0
- deployforge-0.1.0/src/deployforge/security/scanner.py +125 -0
- deployforge-0.1.0/src/deployforge/security/secrets.py +110 -0
- deployforge-0.1.0/src/deployforge/ui/__init__.py +1 -0
- deployforge-0.1.0/src/deployforge/ui/terminal.py +151 -0
- deployforge-0.1.0/src/deployforge.egg-info/PKG-INFO +218 -0
- deployforge-0.1.0/src/deployforge.egg-info/SOURCES.txt +47 -0
- deployforge-0.1.0/src/deployforge.egg-info/dependency_links.txt +1 -0
- deployforge-0.1.0/src/deployforge.egg-info/entry_points.txt +2 -0
- deployforge-0.1.0/src/deployforge.egg-info/requires.txt +16 -0
- deployforge-0.1.0/src/deployforge.egg-info/top_level.txt +1 -0
- deployforge-0.1.0/tests/test_analyzer.py +239 -0
- deployforge-0.1.0/tests/test_cli.py +121 -0
- deployforge-0.1.0/tests/test_config.py +93 -0
- deployforge-0.1.0/tests/test_integration.py +176 -0
- deployforge-0.1.0/tests/test_planner.py +190 -0
- deployforge-0.1.0/tests/test_providers.py +244 -0
- deployforge-0.1.0/tests/test_security.py +174 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 sifuna codex
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: deployforge
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: From GitHub to a Live Application. Automatically. DeployForge analyzes an application and deploys its frontend and backend to production.
|
|
5
|
+
Author-email: sifuna codex <www.antonysifuna07@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/aasz253/DeployForge
|
|
8
|
+
Project-URL: Repository, https://github.com/aasz253/DeployForge
|
|
9
|
+
Project-URL: Documentation, https://github.com/aasz253/DeployForge#readme
|
|
10
|
+
Project-URL: Issues, https://github.com/aasz253/DeployForge/issues
|
|
11
|
+
Keywords: deploy,vercel,render,devsecops,cli,automation,github
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
22
|
+
Classifier: Topic :: System :: Installation/Setup
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: typer<1.0,>=0.12
|
|
27
|
+
Requires-Dist: rich<15.0,>=13.7
|
|
28
|
+
Requires-Dist: requests<3.0,>=2.31
|
|
29
|
+
Requires-Dist: PyYAML<7.0,>=6.0
|
|
30
|
+
Requires-Dist: keyring<26.0,>=24.3
|
|
31
|
+
Requires-Dist: platformdirs<5.0,>=4.0
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest<9.0,>=8.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-cov<6.0,>=5.0; extra == "dev"
|
|
35
|
+
Requires-Dist: ruff<1.0,>=0.5; extra == "dev"
|
|
36
|
+
Requires-Dist: mypy<2.0,>=1.10; extra == "dev"
|
|
37
|
+
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
|
|
38
|
+
Requires-Dist: bandit<2.0,>=1.7; extra == "dev"
|
|
39
|
+
Requires-Dist: build<2.0,>=1.2; extra == "dev"
|
|
40
|
+
Requires-Dist: twine<6.0,>=5.0; extra == "dev"
|
|
41
|
+
Dynamic: license-file
|
|
42
|
+
|
|
43
|
+
# DeployForge
|
|
44
|
+
|
|
45
|
+
**From GitHub to production. Automatically.**
|
|
46
|
+
|
|
47
|
+
DeployForge is the second stage of the PushForge → DeployForge workflow.
|
|
48
|
+
PushForge handles **Local → GitHub**, while DeployForge handles **GitHub → Production** (frontend → Vercel, backend → Render).
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Install
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pip install deployforge
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Or with [pipx](https://pypa.github.io/pipx/) (recommended):
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pipx install deployforge
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
DeployForge is a single, cross-platform CLI — it works on Windows, macOS, and Linux.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Quick Start
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 1. Push your code with PushForge
|
|
72
|
+
pushforge
|
|
73
|
+
|
|
74
|
+
# 2. Deploy with DeployForge
|
|
75
|
+
deployforge
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
DeployForge automatically:
|
|
79
|
+
1. Analyzes your project structure (Next.js, Vite, FastAPI, Express, Django…)
|
|
80
|
+
2. Creates a deployment plan (what goes to Vercel, what goes to Render)
|
|
81
|
+
3. Runs security preflight checks (scans for leaked secrets)
|
|
82
|
+
4. Deploys backend → Render, frontend → Vercel
|
|
83
|
+
5. Wires environment variables (`NEXT_PUBLIC_API_URL`, `FRONTEND_URL`, `CORS_ORIGIN`)
|
|
84
|
+
6. Sets up CORS on the backend
|
|
85
|
+
7. Verifies all deployments and prints live URLs
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Commands
|
|
90
|
+
|
|
91
|
+
| Command | Description |
|
|
92
|
+
|---------|-------------|
|
|
93
|
+
| `deployforge` | Full automated deployment (analyze → deploy → verify) |
|
|
94
|
+
| `deployforge init` | Create `.deployforge/config.yml` for a project |
|
|
95
|
+
| `deployforge analyze` | Analyze project structure and show deployment plan |
|
|
96
|
+
| `deployforge deploy` | Deploy directly (with flags `--dry-run`, `--debug`) |
|
|
97
|
+
| `deployforge status` | Show status of deployed services |
|
|
98
|
+
| `deployforge verify` | Verify all deployed URLs are reachable and healthy |
|
|
99
|
+
| `deployforge security` | Run security preflight scan |
|
|
100
|
+
| `deployforge doctor` | Diagnose environment and credentials |
|
|
101
|
+
| `deployforge config` | Show resolved configuration |
|
|
102
|
+
| `deployforge logs` | Show recent deployment history |
|
|
103
|
+
| `deployforge version` | Print version |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Options
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
--dry-run Show what DeployForge would do without making changes
|
|
111
|
+
--non-interactive Skip confirmations (CI-friendly)
|
|
112
|
+
--skip-security Disable the security preflight gate
|
|
113
|
+
--debug Show debug detail for troubleshooting
|
|
114
|
+
--timeout INT Deployment wait timeout in seconds (default: 900)
|
|
115
|
+
--plan TEXT Render plan: free | starter | pro (default: starter)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## How It Works with PushForge
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
+-------------------+ +-------------------+ +-------------------+
|
|
124
|
+
| Your Machine | | GitHub | | Production |
|
|
125
|
+
| | | | | |
|
|
126
|
+
| PushForge ───────┼────►│ Source Code │ | Vercel (frontend)│
|
|
127
|
+
| Local → GitHub │ | │ | Render (backend) │
|
|
128
|
+
| | │ DeployForge ─────┼────►│ Live URLs │
|
|
129
|
+
+-------------------+ | GitHub → Prod | +-------------------+
|
|
130
|
+
+-------------------+
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**You don't need PushForge installed** to use DeployForge — it detects Git repositories automatically. But the two tools are designed to work together seamlessly.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Authentication
|
|
138
|
+
|
|
139
|
+
DeployForge reads provider tokens from environment variables (in order):
|
|
140
|
+
|
|
141
|
+
| Provider | Environment Variables |
|
|
142
|
+
|----------|----------------------|
|
|
143
|
+
| Vercel | `DEPLOYFORGE_VERCEL_TOKEN`, `VERCEL_TOKEN` |
|
|
144
|
+
| Render | `DEPLOYFORGE_RENDER_API_KEY`, `RENDER_API_KEY` |
|
|
145
|
+
|
|
146
|
+
Tokens can also be stored securely in your OS keyring via:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
deployforge config --set vercel_token
|
|
150
|
+
deployforge config --set render_api_key
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
> Credentials are **never** stored in project files or printed in logs. Only SHA-256 fingerprints are recorded.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Configuration
|
|
158
|
+
|
|
159
|
+
DeployForge creates `.deployforge/config.yml` when you run `deployforge init`:
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
frontend:
|
|
163
|
+
provider: vercel
|
|
164
|
+
directory: frontend
|
|
165
|
+
|
|
166
|
+
backend:
|
|
167
|
+
provider: render
|
|
168
|
+
runtime: python
|
|
169
|
+
directory: backend
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Environment variables from `.env` files are automatically wired:
|
|
173
|
+
- `NEXT_PUBLIC_API_URL` → set to the backend Render URL
|
|
174
|
+
- `FRONTEND_URL` → set to the frontend Vercel URL (on the backend)
|
|
175
|
+
- CORS is configured automatically
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Security
|
|
180
|
+
|
|
181
|
+
DeployForge runs a security preflight before deployment:
|
|
182
|
+
- Scans for API keys, tokens, passwords in tracked files
|
|
183
|
+
- Blocks deployment if high-entropy strings or credential patterns are found (configurable)
|
|
184
|
+
- Never transmits or stores secrets — only fingerprints them locally
|
|
185
|
+
|
|
186
|
+
Disable with `--skip-security` for trusted codebases.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Development
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Clone and set up
|
|
194
|
+
git clone https://github.com/aasz253/DeployForge.git
|
|
195
|
+
cd DeployForge
|
|
196
|
+
python -m venv .venv && source .venv/bin/activate
|
|
197
|
+
pip install -e ".[dev]"
|
|
198
|
+
|
|
199
|
+
# Run tests
|
|
200
|
+
pytest
|
|
201
|
+
|
|
202
|
+
# Lint & type-check
|
|
203
|
+
ruff check src tests
|
|
204
|
+
mypy src
|
|
205
|
+
|
|
206
|
+
# Format
|
|
207
|
+
ruff format src tests
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## License
|
|
213
|
+
|
|
214
|
+
MIT — see [LICENSE](LICENSE).
|
|
215
|
+
|
|
216
|
+
## Security Policy
|
|
217
|
+
|
|
218
|
+
See [SECURITY.md](SECURITY.md) for credential handling and disclosure.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# DeployForge
|
|
2
|
+
|
|
3
|
+
**From GitHub to production. Automatically.**
|
|
4
|
+
|
|
5
|
+
DeployForge is the second stage of the PushForge → DeployForge workflow.
|
|
6
|
+
PushForge handles **Local → GitHub**, while DeployForge handles **GitHub → Production** (frontend → Vercel, backend → Render).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pip install deployforge
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Or with [pipx](https://pypa.github.io/pipx/) (recommended):
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pipx install deployforge
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
DeployForge is a single, cross-platform CLI — it works on Windows, macOS, and Linux.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# 1. Push your code with PushForge
|
|
30
|
+
pushforge
|
|
31
|
+
|
|
32
|
+
# 2. Deploy with DeployForge
|
|
33
|
+
deployforge
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
DeployForge automatically:
|
|
37
|
+
1. Analyzes your project structure (Next.js, Vite, FastAPI, Express, Django…)
|
|
38
|
+
2. Creates a deployment plan (what goes to Vercel, what goes to Render)
|
|
39
|
+
3. Runs security preflight checks (scans for leaked secrets)
|
|
40
|
+
4. Deploys backend → Render, frontend → Vercel
|
|
41
|
+
5. Wires environment variables (`NEXT_PUBLIC_API_URL`, `FRONTEND_URL`, `CORS_ORIGIN`)
|
|
42
|
+
6. Sets up CORS on the backend
|
|
43
|
+
7. Verifies all deployments and prints live URLs
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Commands
|
|
48
|
+
|
|
49
|
+
| Command | Description |
|
|
50
|
+
|---------|-------------|
|
|
51
|
+
| `deployforge` | Full automated deployment (analyze → deploy → verify) |
|
|
52
|
+
| `deployforge init` | Create `.deployforge/config.yml` for a project |
|
|
53
|
+
| `deployforge analyze` | Analyze project structure and show deployment plan |
|
|
54
|
+
| `deployforge deploy` | Deploy directly (with flags `--dry-run`, `--debug`) |
|
|
55
|
+
| `deployforge status` | Show status of deployed services |
|
|
56
|
+
| `deployforge verify` | Verify all deployed URLs are reachable and healthy |
|
|
57
|
+
| `deployforge security` | Run security preflight scan |
|
|
58
|
+
| `deployforge doctor` | Diagnose environment and credentials |
|
|
59
|
+
| `deployforge config` | Show resolved configuration |
|
|
60
|
+
| `deployforge logs` | Show recent deployment history |
|
|
61
|
+
| `deployforge version` | Print version |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Options
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
--dry-run Show what DeployForge would do without making changes
|
|
69
|
+
--non-interactive Skip confirmations (CI-friendly)
|
|
70
|
+
--skip-security Disable the security preflight gate
|
|
71
|
+
--debug Show debug detail for troubleshooting
|
|
72
|
+
--timeout INT Deployment wait timeout in seconds (default: 900)
|
|
73
|
+
--plan TEXT Render plan: free | starter | pro (default: starter)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## How It Works with PushForge
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
+-------------------+ +-------------------+ +-------------------+
|
|
82
|
+
| Your Machine | | GitHub | | Production |
|
|
83
|
+
| | | | | |
|
|
84
|
+
| PushForge ───────┼────►│ Source Code │ | Vercel (frontend)│
|
|
85
|
+
| Local → GitHub │ | │ | Render (backend) │
|
|
86
|
+
| | │ DeployForge ─────┼────►│ Live URLs │
|
|
87
|
+
+-------------------+ | GitHub → Prod | +-------------------+
|
|
88
|
+
+-------------------+
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**You don't need PushForge installed** to use DeployForge — it detects Git repositories automatically. But the two tools are designed to work together seamlessly.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Authentication
|
|
96
|
+
|
|
97
|
+
DeployForge reads provider tokens from environment variables (in order):
|
|
98
|
+
|
|
99
|
+
| Provider | Environment Variables |
|
|
100
|
+
|----------|----------------------|
|
|
101
|
+
| Vercel | `DEPLOYFORGE_VERCEL_TOKEN`, `VERCEL_TOKEN` |
|
|
102
|
+
| Render | `DEPLOYFORGE_RENDER_API_KEY`, `RENDER_API_KEY` |
|
|
103
|
+
|
|
104
|
+
Tokens can also be stored securely in your OS keyring via:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
deployforge config --set vercel_token
|
|
108
|
+
deployforge config --set render_api_key
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> Credentials are **never** stored in project files or printed in logs. Only SHA-256 fingerprints are recorded.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Configuration
|
|
116
|
+
|
|
117
|
+
DeployForge creates `.deployforge/config.yml` when you run `deployforge init`:
|
|
118
|
+
|
|
119
|
+
```yaml
|
|
120
|
+
frontend:
|
|
121
|
+
provider: vercel
|
|
122
|
+
directory: frontend
|
|
123
|
+
|
|
124
|
+
backend:
|
|
125
|
+
provider: render
|
|
126
|
+
runtime: python
|
|
127
|
+
directory: backend
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Environment variables from `.env` files are automatically wired:
|
|
131
|
+
- `NEXT_PUBLIC_API_URL` → set to the backend Render URL
|
|
132
|
+
- `FRONTEND_URL` → set to the frontend Vercel URL (on the backend)
|
|
133
|
+
- CORS is configured automatically
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Security
|
|
138
|
+
|
|
139
|
+
DeployForge runs a security preflight before deployment:
|
|
140
|
+
- Scans for API keys, tokens, passwords in tracked files
|
|
141
|
+
- Blocks deployment if high-entropy strings or credential patterns are found (configurable)
|
|
142
|
+
- Never transmits or stores secrets — only fingerprints them locally
|
|
143
|
+
|
|
144
|
+
Disable with `--skip-security` for trusted codebases.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Development
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Clone and set up
|
|
152
|
+
git clone https://github.com/aasz253/DeployForge.git
|
|
153
|
+
cd DeployForge
|
|
154
|
+
python -m venv .venv && source .venv/bin/activate
|
|
155
|
+
pip install -e ".[dev]"
|
|
156
|
+
|
|
157
|
+
# Run tests
|
|
158
|
+
pytest
|
|
159
|
+
|
|
160
|
+
# Lint & type-check
|
|
161
|
+
ruff check src tests
|
|
162
|
+
mypy src
|
|
163
|
+
|
|
164
|
+
# Format
|
|
165
|
+
ruff format src tests
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## License
|
|
171
|
+
|
|
172
|
+
MIT — see [LICENSE](LICENSE).
|
|
173
|
+
|
|
174
|
+
## Security Policy
|
|
175
|
+
|
|
176
|
+
See [SECURITY.md](SECURITY.md) for credential handling and disclosure.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=69", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "deployforge"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "From GitHub to a Live Application. Automatically. DeployForge analyzes an application and deploys its frontend and backend to production."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "MIT" }
|
|
11
|
+
requires-python = ">=3.11"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "sifuna codex", email = "www.antonysifuna07@gmail.com" },
|
|
14
|
+
]
|
|
15
|
+
keywords = ["deploy", "vercel", "render", "devsecops", "cli", "automation", "github"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 3 - Alpha",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Operating System :: OS Independent",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Topic :: Software Development :: Build Tools",
|
|
27
|
+
"Topic :: System :: Installation/Setup",
|
|
28
|
+
]
|
|
29
|
+
dependencies = [
|
|
30
|
+
"typer>=0.12,<1.0",
|
|
31
|
+
"rich>=13.7,<15.0",
|
|
32
|
+
"requests>=2.31,<3.0",
|
|
33
|
+
"PyYAML>=6.0,<7.0",
|
|
34
|
+
"keyring>=24.3,<26.0",
|
|
35
|
+
"platformdirs>=4.0,<5.0",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.urls]
|
|
39
|
+
Homepage = "https://github.com/aasz253/DeployForge"
|
|
40
|
+
Repository = "https://github.com/aasz253/DeployForge"
|
|
41
|
+
Documentation = "https://github.com/aasz253/DeployForge#readme"
|
|
42
|
+
Issues = "https://github.com/aasz253/DeployForge/issues"
|
|
43
|
+
|
|
44
|
+
[project.optional-dependencies]
|
|
45
|
+
dev = [
|
|
46
|
+
"pytest>=8.0,<9.0",
|
|
47
|
+
"pytest-cov>=5.0,<6.0",
|
|
48
|
+
"ruff>=0.5,<1.0",
|
|
49
|
+
"mypy>=1.10,<2.0",
|
|
50
|
+
"types-PyYAML>=6.0",
|
|
51
|
+
"bandit>=1.7,<2.0",
|
|
52
|
+
"build>=1.2,<2.0",
|
|
53
|
+
"twine>=5.0,<6.0",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
[project.scripts]
|
|
57
|
+
deployforge = "deployforge.cli:entry"
|
|
58
|
+
|
|
59
|
+
[tool.setuptools.packages.find]
|
|
60
|
+
where = ["src"]
|
|
61
|
+
|
|
62
|
+
[tool.ruff]
|
|
63
|
+
target-version = "py311"
|
|
64
|
+
line-length = 100
|
|
65
|
+
extend-exclude = ["tests/fixtures", "build", "dist"]
|
|
66
|
+
|
|
67
|
+
[tool.ruff.lint]
|
|
68
|
+
select = ["E", "F", "W", "I", "UP", "B", "S", "SIM"]
|
|
69
|
+
ignore = ["S603", "S607"]
|
|
70
|
+
|
|
71
|
+
[tool.ruff.lint.per-file-ignores]
|
|
72
|
+
"tests/*" = ["S101", "S105", "S106", "E501"]
|
|
73
|
+
"src/deployforge/cli.py" = ["B008", "S301"]
|
|
74
|
+
|
|
75
|
+
[tool.mypy]
|
|
76
|
+
python_version = "3.11"
|
|
77
|
+
warn_return_any = true
|
|
78
|
+
warn_unused_configs = true
|
|
79
|
+
no_implicit_optional = true
|
|
80
|
+
check_untyped_defs = true
|
|
81
|
+
|
|
82
|
+
[tool.pytest.ini_options]
|
|
83
|
+
addopts = "-q"
|
|
84
|
+
testpaths = ["tests"]
|
|
85
|
+
|
|
86
|
+
[tool.coverage.run]
|
|
87
|
+
source = ["deployforge"]
|
|
88
|
+
omit = ["src/deployforge/ui/*"]
|
|
89
|
+
|
|
90
|
+
[tool.bandit]
|
|
91
|
+
exclude_dirs = ["tests"]
|
|
92
|
+
skips = ["B404", "B603", "B607", "B110"]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from deployforge.analyzer.backend import BACKEND_CORS_ENV_NAMES, detect_backend
|
|
2
|
+
from deployforge.analyzer.database import detect_database
|
|
3
|
+
from deployforge.analyzer.frontend import FRONTEND_API_ENV_NAMES, detect_frontend
|
|
4
|
+
from deployforge.analyzer.project import (
|
|
5
|
+
BackendApp,
|
|
6
|
+
FrontendApp,
|
|
7
|
+
ProjectAnalysis,
|
|
8
|
+
analyze_project,
|
|
9
|
+
suggest_name,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"BACKEND_CORS_ENV_NAMES",
|
|
14
|
+
"BackendApp",
|
|
15
|
+
"FRONTEND_API_ENV_NAMES",
|
|
16
|
+
"FrontendApp",
|
|
17
|
+
"ProjectAnalysis",
|
|
18
|
+
"analyze_project",
|
|
19
|
+
"detect_backend",
|
|
20
|
+
"detect_database",
|
|
21
|
+
"detect_frontend",
|
|
22
|
+
"suggest_name",
|
|
23
|
+
]
|