fixdoc 0.0.1__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.
- fixdoc-0.0.1/PKG-INFO +261 -0
- fixdoc-0.0.1/README.md +230 -0
- fixdoc-0.0.1/pyproject.toml +59 -0
- fixdoc-0.0.1/setup.cfg +4 -0
- fixdoc-0.0.1/src/fixdoc/__init__.py +8 -0
- fixdoc-0.0.1/src/fixdoc/cli.py +26 -0
- fixdoc-0.0.1/src/fixdoc/commands/__init__.py +11 -0
- fixdoc-0.0.1/src/fixdoc/commands/analyze.py +313 -0
- fixdoc-0.0.1/src/fixdoc/commands/capture.py +109 -0
- fixdoc-0.0.1/src/fixdoc/commands/capture_handlers.py +298 -0
- fixdoc-0.0.1/src/fixdoc/commands/delete.py +72 -0
- fixdoc-0.0.1/src/fixdoc/commands/edit.py +118 -0
- fixdoc-0.0.1/src/fixdoc/commands/manage.py +67 -0
- fixdoc-0.0.1/src/fixdoc/commands/search.py +65 -0
- fixdoc-0.0.1/src/fixdoc/commands/sync.py +268 -0
- fixdoc-0.0.1/src/fixdoc/config.py +113 -0
- fixdoc-0.0.1/src/fixdoc/fix.py +19 -0
- fixdoc-0.0.1/src/fixdoc/formatter.py +62 -0
- fixdoc-0.0.1/src/fixdoc/git.py +263 -0
- fixdoc-0.0.1/src/fixdoc/markdown_parser.py +106 -0
- fixdoc-0.0.1/src/fixdoc/models.py +83 -0
- fixdoc-0.0.1/src/fixdoc/parsers/__init__.py +24 -0
- fixdoc-0.0.1/src/fixdoc/parsers/base.py +131 -0
- fixdoc-0.0.1/src/fixdoc/parsers/kubernetes.py +584 -0
- fixdoc-0.0.1/src/fixdoc/parsers/router.py +160 -0
- fixdoc-0.0.1/src/fixdoc/parsers/terraform.py +409 -0
- fixdoc-0.0.1/src/fixdoc/storage.py +146 -0
- fixdoc-0.0.1/src/fixdoc/sync_engine.py +330 -0
- fixdoc-0.0.1/src/fixdoc/terraform_parser.py +135 -0
- fixdoc-0.0.1/src/fixdoc.egg-info/PKG-INFO +261 -0
- fixdoc-0.0.1/src/fixdoc.egg-info/SOURCES.txt +43 -0
- fixdoc-0.0.1/src/fixdoc.egg-info/dependency_links.txt +1 -0
- fixdoc-0.0.1/src/fixdoc.egg-info/entry_points.txt +2 -0
- fixdoc-0.0.1/src/fixdoc.egg-info/requires.txt +8 -0
- fixdoc-0.0.1/src/fixdoc.egg-info/top_level.txt +1 -0
- fixdoc-0.0.1/tests/test_analyzer.py +145 -0
- fixdoc-0.0.1/tests/test_config.py +143 -0
- fixdoc-0.0.1/tests/test_edit.py +150 -0
- fixdoc-0.0.1/tests/test_kubernetes_parser.py +475 -0
- fixdoc-0.0.1/tests/test_markdown_parser.py +194 -0
- fixdoc-0.0.1/tests/test_models.py +138 -0
- fixdoc-0.0.1/tests/test_parser_router.py +270 -0
- fixdoc-0.0.1/tests/test_storage.py +156 -0
- fixdoc-0.0.1/tests/test_sync.py +302 -0
- fixdoc-0.0.1/tests/test_terraform_parser.py +414 -0
fixdoc-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: fixdoc
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Capture and search infrastructure fixes for cloud/SRE engineers
|
|
5
|
+
Author-email: Fiyi <fiyignk@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/fiyiogunkoya/FixDoc
|
|
8
|
+
Keywords: devops,terraform,infrastructure,documentation,cli
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Intended Audience :: System Administrators
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: System :: Systems Administration
|
|
21
|
+
Classifier: Topic :: Utilities
|
|
22
|
+
Requires-Python: >=3.9
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
Requires-Dist: click>=8.0.0
|
|
25
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
29
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
30
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
31
|
+
|
|
32
|
+
# FixDoc
|
|
33
|
+
|
|
34
|
+
A CLI tool for cloud engineers to capture and search infrastructure fixes. Stop losing tribal knowledge in Slack threads and personal notes.
|
|
35
|
+
|
|
36
|
+
## The Problem
|
|
37
|
+
|
|
38
|
+
Infrastructure errors repeat. The same RBAC misconfiguration, the same Terraform state lock—solved six months ago, but the fix is buried in Slack or locked in someone's head. When engineers leave, the knowledge leaves with them. Teams waste hours debugging problems they've already solved.
|
|
39
|
+
|
|
40
|
+
## The Solution
|
|
41
|
+
|
|
42
|
+
FixDoc captures cloud fixes in seconds and makes them searchable. Pipe your Terraform or kubectl error output directly to FixDoc, document what fixed it, and move on. Next time you or a teammate hit a similar issue, search your fix history instead of debugging from scratch.
|
|
43
|
+
|
|
44
|
+
**Core features:**
|
|
45
|
+
|
|
46
|
+
- **Capture fixes fast** - Quick mode for one-liner captures, pipe errors directly from Terraform or kubectl
|
|
47
|
+
- **Search your history** - Find past fixes by keyword, tag, or error message
|
|
48
|
+
- **Analyze terraform plans** - Get warnings about resources that have caused problems before
|
|
49
|
+
- **Multi-cloud error parsing** - Auto-detect and parse errors from Terraform (AWS, Azure, GCP) and Kubernetes
|
|
50
|
+
- **Team sync via Git** - Share fixes across your team through a shared Git repo
|
|
51
|
+
- **Markdown export** - Every fix generates shareable documentation
|
|
52
|
+
|
|
53
|
+
## Installation
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Clone the repo
|
|
57
|
+
git clone https://github.com/fiyiogunkoya/fixdoc.git
|
|
58
|
+
cd fixdoc
|
|
59
|
+
|
|
60
|
+
# Recommended: set up a virtual environment
|
|
61
|
+
python -m venv venv
|
|
62
|
+
source venv/bin/activate
|
|
63
|
+
|
|
64
|
+
# Install
|
|
65
|
+
pip install -e .
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Requires Python 3.9+.
|
|
69
|
+
|
|
70
|
+
## Quick Start
|
|
71
|
+
|
|
72
|
+
### Capture a Fix
|
|
73
|
+
|
|
74
|
+
**Pipe terraform errors directly:**
|
|
75
|
+
```bash
|
|
76
|
+
terraform apply 2>&1 | fixdoc capture
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
FixDoc parses the error, extracts the resource and error code, and prompts you only for the fix:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
──────────────────────────────────────────────────
|
|
83
|
+
Captured from terraform:
|
|
84
|
+
|
|
85
|
+
Resource: azurerm_databricks_workspace.main
|
|
86
|
+
File: modules/databricks/main.tf:15
|
|
87
|
+
Error: KeyVaultAccessDenied: The operation does not have permission...
|
|
88
|
+
──────────────────────────────────────────────────
|
|
89
|
+
|
|
90
|
+
What fixed it? > Added managed identity to Key Vault access policy
|
|
91
|
+
|
|
92
|
+
Fix captured: a1b2c3d4(unique fix id)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Pipe kubectl errors:**
|
|
96
|
+
```bash
|
|
97
|
+
kubectl apply -f deployment.yaml 2>&1 | fixdoc capture
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Interactive mode:**
|
|
101
|
+
```bash
|
|
102
|
+
fixdoc capture
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Quick mode:**
|
|
106
|
+
```bash
|
|
107
|
+
fixdoc capture -q "User couldn't access storage | Added blob contributor role" -t storage,rbac
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Search Your Fixes
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
fixdoc search "storage account"
|
|
114
|
+
fixdoc search rbac
|
|
115
|
+
fixdoc search "access denied"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Edit a Fix
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Update specific fields
|
|
122
|
+
fixdoc edit a1b2c3d4 --resolution "Updated fix details"
|
|
123
|
+
fixdoc edit a1b2c3d4 --tags "storage,rbac,new_tag"
|
|
124
|
+
|
|
125
|
+
# Interactive edit
|
|
126
|
+
fixdoc edit a1b2c3d4 -I
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Analyze Terraform Plans
|
|
130
|
+
|
|
131
|
+
Before running `terraform apply`, check for known issues:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
terraform plan -out=plan.tfplan
|
|
135
|
+
terraform show -json plan.tfplan > plan.json
|
|
136
|
+
fixdoc analyze plan.json
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Output:
|
|
140
|
+
```
|
|
141
|
+
Found 2 potential issue(s) based on your fix history:
|
|
142
|
+
|
|
143
|
+
X azurerm_storage_account.main may relate to FIX-a1b2c3d4
|
|
144
|
+
Previous issue: Users couldn't access blob storage
|
|
145
|
+
Resolution: Added storage blob data contributor role
|
|
146
|
+
Tags: azurerm_storage_account,rbac
|
|
147
|
+
|
|
148
|
+
X azurerm_key_vault.main may relate to FIX-b5c6d7e8
|
|
149
|
+
Previous issue: Key Vault access denied for Databricks
|
|
150
|
+
Resolution: Added access policy with wrapKey permission
|
|
151
|
+
Tags: azurerm_key_vault,rbac
|
|
152
|
+
|
|
153
|
+
Run `fixdoc show <fix-id>` for full details on any fix.
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Sync Fixes with Your Team
|
|
157
|
+
|
|
158
|
+
Share fixes across your organization using a shared Git repository:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Initialize sync with a remote repo
|
|
162
|
+
fixdoc sync init git@github.com:your-org/team-fixes.git
|
|
163
|
+
|
|
164
|
+
# Push your local fixes to the shared repo
|
|
165
|
+
fixdoc sync push -m "Added storage account fixes"
|
|
166
|
+
|
|
167
|
+
# Pull fixes from your team
|
|
168
|
+
fixdoc sync pull
|
|
169
|
+
|
|
170
|
+
# Check sync status
|
|
171
|
+
fixdoc sync status
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Fixes marked as private (`is_private`) are excluded from sync.
|
|
175
|
+
|
|
176
|
+
### Other Commands
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
fixdoc list # List all fixes
|
|
180
|
+
fixdoc show a1b2c3d4 # Show full details
|
|
181
|
+
fixdoc delete a1b2c3d4 # Delete a fix
|
|
182
|
+
fixdoc delete --purge # Delete all fixes
|
|
183
|
+
fixdoc stats # View statistics
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Fix Fields
|
|
187
|
+
|
|
188
|
+
| Field | Required | Description |
|
|
189
|
+
|-------|----------|-------------|
|
|
190
|
+
| Issue | Yes | What was the problem? |
|
|
191
|
+
| Resolution | Yes | How did you fix it? |
|
|
192
|
+
| Error excerpt | No | Relevant error message or logs |
|
|
193
|
+
| Tags | No | Comma-separated keywords (resource types, categories) |
|
|
194
|
+
| Notes | No | Gotchas, misleading directions, additional context |
|
|
195
|
+
|
|
196
|
+
**Tip**: Use resource types as tags (e.g., `azurerm_storage_account`, `azurerm_key_vault`) to enable terraform plan analysis.
|
|
197
|
+
|
|
198
|
+
## Storage
|
|
199
|
+
|
|
200
|
+
FixDoc stores everything locally(cloud storage feature WIP):
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
~/.fixdoc/
|
|
204
|
+
├── fixes.json # JSON database of all fixes
|
|
205
|
+
├── config.yaml # Sync and user configuration
|
|
206
|
+
└── docs/ # Generated markdown files
|
|
207
|
+
├── <uuid>.md
|
|
208
|
+
└── ...
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Markdown files are generated alongside the JSON database, so you can:
|
|
212
|
+
- Push them to a wiki/confluence
|
|
213
|
+
- Commit them to a repo
|
|
214
|
+
- Share them with your team via `fixdoc sync`
|
|
215
|
+
|
|
216
|
+
## Philosophy
|
|
217
|
+
|
|
218
|
+
**Speed is everything.** Engineers won't document fixes if it takes too long. FixDoc is designed to capture information in seconds:
|
|
219
|
+
|
|
220
|
+
- Pipe errors directly from terraform or kubectl
|
|
221
|
+
- Quick mode for one-liner captures
|
|
222
|
+
- Auto-extract resource, file, and error code
|
|
223
|
+
- Optional fields you can skip
|
|
224
|
+
|
|
225
|
+
The goal is to build a searchable knowledge base over time, not to write perfect documentation for each fix.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Roadmap
|
|
230
|
+
|
|
231
|
+
| Feature | Description |
|
|
232
|
+
|---------|-------------|
|
|
233
|
+
| Similar fix suggestions | Show matching fixes before creating duplicates |
|
|
234
|
+
| Import/Export | `fixdoc export` and `fixdoc import --merge` |
|
|
235
|
+
| Search filters | Filter by tags, date range |
|
|
236
|
+
| Additional CLI parsers | AWS CLI, Azure CLI error parsers |
|
|
237
|
+
| AI-suggested fixes | Suggest resolutions from error context + fix history |
|
|
238
|
+
| SDK refactor | Use as library: `from fixdoc import FixDoc` |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Current Status
|
|
243
|
+
|
|
244
|
+
**v0.0.1 (Alpha)**
|
|
245
|
+
|
|
246
|
+
What works today:
|
|
247
|
+
- Capture fixes (interactive, quick mode, piped input)
|
|
248
|
+
- Auto-parse Terraform apply output (resource, file, line, error code) for AWS, Azure, and GCP
|
|
249
|
+
- Auto-parse Kubernetes/kubectl errors
|
|
250
|
+
- Search fixes by keyword
|
|
251
|
+
- Edit existing fixes
|
|
252
|
+
- Analyze terraform plans against fix history
|
|
253
|
+
- Delete individual fixes or purge all
|
|
254
|
+
- Git-based team sync (init, push, pull, status)
|
|
255
|
+
- Store as JSON + markdown
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Contributing
|
|
260
|
+
|
|
261
|
+
Contributions are welcome and encouraged! Please open an issue or PR.
|
fixdoc-0.0.1/README.md
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# FixDoc
|
|
2
|
+
|
|
3
|
+
A CLI tool for cloud engineers to capture and search infrastructure fixes. Stop losing tribal knowledge in Slack threads and personal notes.
|
|
4
|
+
|
|
5
|
+
## The Problem
|
|
6
|
+
|
|
7
|
+
Infrastructure errors repeat. The same RBAC misconfiguration, the same Terraform state lock—solved six months ago, but the fix is buried in Slack or locked in someone's head. When engineers leave, the knowledge leaves with them. Teams waste hours debugging problems they've already solved.
|
|
8
|
+
|
|
9
|
+
## The Solution
|
|
10
|
+
|
|
11
|
+
FixDoc captures cloud fixes in seconds and makes them searchable. Pipe your Terraform or kubectl error output directly to FixDoc, document what fixed it, and move on. Next time you or a teammate hit a similar issue, search your fix history instead of debugging from scratch.
|
|
12
|
+
|
|
13
|
+
**Core features:**
|
|
14
|
+
|
|
15
|
+
- **Capture fixes fast** - Quick mode for one-liner captures, pipe errors directly from Terraform or kubectl
|
|
16
|
+
- **Search your history** - Find past fixes by keyword, tag, or error message
|
|
17
|
+
- **Analyze terraform plans** - Get warnings about resources that have caused problems before
|
|
18
|
+
- **Multi-cloud error parsing** - Auto-detect and parse errors from Terraform (AWS, Azure, GCP) and Kubernetes
|
|
19
|
+
- **Team sync via Git** - Share fixes across your team through a shared Git repo
|
|
20
|
+
- **Markdown export** - Every fix generates shareable documentation
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Clone the repo
|
|
26
|
+
git clone https://github.com/fiyiogunkoya/fixdoc.git
|
|
27
|
+
cd fixdoc
|
|
28
|
+
|
|
29
|
+
# Recommended: set up a virtual environment
|
|
30
|
+
python -m venv venv
|
|
31
|
+
source venv/bin/activate
|
|
32
|
+
|
|
33
|
+
# Install
|
|
34
|
+
pip install -e .
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Requires Python 3.9+.
|
|
38
|
+
|
|
39
|
+
## Quick Start
|
|
40
|
+
|
|
41
|
+
### Capture a Fix
|
|
42
|
+
|
|
43
|
+
**Pipe terraform errors directly:**
|
|
44
|
+
```bash
|
|
45
|
+
terraform apply 2>&1 | fixdoc capture
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
FixDoc parses the error, extracts the resource and error code, and prompts you only for the fix:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
──────────────────────────────────────────────────
|
|
52
|
+
Captured from terraform:
|
|
53
|
+
|
|
54
|
+
Resource: azurerm_databricks_workspace.main
|
|
55
|
+
File: modules/databricks/main.tf:15
|
|
56
|
+
Error: KeyVaultAccessDenied: The operation does not have permission...
|
|
57
|
+
──────────────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
What fixed it? > Added managed identity to Key Vault access policy
|
|
60
|
+
|
|
61
|
+
Fix captured: a1b2c3d4(unique fix id)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Pipe kubectl errors:**
|
|
65
|
+
```bash
|
|
66
|
+
kubectl apply -f deployment.yaml 2>&1 | fixdoc capture
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Interactive mode:**
|
|
70
|
+
```bash
|
|
71
|
+
fixdoc capture
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Quick mode:**
|
|
75
|
+
```bash
|
|
76
|
+
fixdoc capture -q "User couldn't access storage | Added blob contributor role" -t storage,rbac
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Search Your Fixes
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
fixdoc search "storage account"
|
|
83
|
+
fixdoc search rbac
|
|
84
|
+
fixdoc search "access denied"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Edit a Fix
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Update specific fields
|
|
91
|
+
fixdoc edit a1b2c3d4 --resolution "Updated fix details"
|
|
92
|
+
fixdoc edit a1b2c3d4 --tags "storage,rbac,new_tag"
|
|
93
|
+
|
|
94
|
+
# Interactive edit
|
|
95
|
+
fixdoc edit a1b2c3d4 -I
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Analyze Terraform Plans
|
|
99
|
+
|
|
100
|
+
Before running `terraform apply`, check for known issues:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
terraform plan -out=plan.tfplan
|
|
104
|
+
terraform show -json plan.tfplan > plan.json
|
|
105
|
+
fixdoc analyze plan.json
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Output:
|
|
109
|
+
```
|
|
110
|
+
Found 2 potential issue(s) based on your fix history:
|
|
111
|
+
|
|
112
|
+
X azurerm_storage_account.main may relate to FIX-a1b2c3d4
|
|
113
|
+
Previous issue: Users couldn't access blob storage
|
|
114
|
+
Resolution: Added storage blob data contributor role
|
|
115
|
+
Tags: azurerm_storage_account,rbac
|
|
116
|
+
|
|
117
|
+
X azurerm_key_vault.main may relate to FIX-b5c6d7e8
|
|
118
|
+
Previous issue: Key Vault access denied for Databricks
|
|
119
|
+
Resolution: Added access policy with wrapKey permission
|
|
120
|
+
Tags: azurerm_key_vault,rbac
|
|
121
|
+
|
|
122
|
+
Run `fixdoc show <fix-id>` for full details on any fix.
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Sync Fixes with Your Team
|
|
126
|
+
|
|
127
|
+
Share fixes across your organization using a shared Git repository:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Initialize sync with a remote repo
|
|
131
|
+
fixdoc sync init git@github.com:your-org/team-fixes.git
|
|
132
|
+
|
|
133
|
+
# Push your local fixes to the shared repo
|
|
134
|
+
fixdoc sync push -m "Added storage account fixes"
|
|
135
|
+
|
|
136
|
+
# Pull fixes from your team
|
|
137
|
+
fixdoc sync pull
|
|
138
|
+
|
|
139
|
+
# Check sync status
|
|
140
|
+
fixdoc sync status
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Fixes marked as private (`is_private`) are excluded from sync.
|
|
144
|
+
|
|
145
|
+
### Other Commands
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
fixdoc list # List all fixes
|
|
149
|
+
fixdoc show a1b2c3d4 # Show full details
|
|
150
|
+
fixdoc delete a1b2c3d4 # Delete a fix
|
|
151
|
+
fixdoc delete --purge # Delete all fixes
|
|
152
|
+
fixdoc stats # View statistics
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Fix Fields
|
|
156
|
+
|
|
157
|
+
| Field | Required | Description |
|
|
158
|
+
|-------|----------|-------------|
|
|
159
|
+
| Issue | Yes | What was the problem? |
|
|
160
|
+
| Resolution | Yes | How did you fix it? |
|
|
161
|
+
| Error excerpt | No | Relevant error message or logs |
|
|
162
|
+
| Tags | No | Comma-separated keywords (resource types, categories) |
|
|
163
|
+
| Notes | No | Gotchas, misleading directions, additional context |
|
|
164
|
+
|
|
165
|
+
**Tip**: Use resource types as tags (e.g., `azurerm_storage_account`, `azurerm_key_vault`) to enable terraform plan analysis.
|
|
166
|
+
|
|
167
|
+
## Storage
|
|
168
|
+
|
|
169
|
+
FixDoc stores everything locally(cloud storage feature WIP):
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
~/.fixdoc/
|
|
173
|
+
├── fixes.json # JSON database of all fixes
|
|
174
|
+
├── config.yaml # Sync and user configuration
|
|
175
|
+
└── docs/ # Generated markdown files
|
|
176
|
+
├── <uuid>.md
|
|
177
|
+
└── ...
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Markdown files are generated alongside the JSON database, so you can:
|
|
181
|
+
- Push them to a wiki/confluence
|
|
182
|
+
- Commit them to a repo
|
|
183
|
+
- Share them with your team via `fixdoc sync`
|
|
184
|
+
|
|
185
|
+
## Philosophy
|
|
186
|
+
|
|
187
|
+
**Speed is everything.** Engineers won't document fixes if it takes too long. FixDoc is designed to capture information in seconds:
|
|
188
|
+
|
|
189
|
+
- Pipe errors directly from terraform or kubectl
|
|
190
|
+
- Quick mode for one-liner captures
|
|
191
|
+
- Auto-extract resource, file, and error code
|
|
192
|
+
- Optional fields you can skip
|
|
193
|
+
|
|
194
|
+
The goal is to build a searchable knowledge base over time, not to write perfect documentation for each fix.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Roadmap
|
|
199
|
+
|
|
200
|
+
| Feature | Description |
|
|
201
|
+
|---------|-------------|
|
|
202
|
+
| Similar fix suggestions | Show matching fixes before creating duplicates |
|
|
203
|
+
| Import/Export | `fixdoc export` and `fixdoc import --merge` |
|
|
204
|
+
| Search filters | Filter by tags, date range |
|
|
205
|
+
| Additional CLI parsers | AWS CLI, Azure CLI error parsers |
|
|
206
|
+
| AI-suggested fixes | Suggest resolutions from error context + fix history |
|
|
207
|
+
| SDK refactor | Use as library: `from fixdoc import FixDoc` |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Current Status
|
|
212
|
+
|
|
213
|
+
**v0.0.1 (Alpha)**
|
|
214
|
+
|
|
215
|
+
What works today:
|
|
216
|
+
- Capture fixes (interactive, quick mode, piped input)
|
|
217
|
+
- Auto-parse Terraform apply output (resource, file, line, error code) for AWS, Azure, and GCP
|
|
218
|
+
- Auto-parse Kubernetes/kubectl errors
|
|
219
|
+
- Search fixes by keyword
|
|
220
|
+
- Edit existing fixes
|
|
221
|
+
- Analyze terraform plans against fix history
|
|
222
|
+
- Delete individual fixes or purge all
|
|
223
|
+
- Git-based team sync (init, push, pull, status)
|
|
224
|
+
- Store as JSON + markdown
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Contributing
|
|
229
|
+
|
|
230
|
+
Contributions are welcome and encouraged! Please open an issue or PR.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "fixdoc"
|
|
7
|
+
version = "0.0.1"
|
|
8
|
+
description = "Capture and search infrastructure fixes for cloud/SRE engineers"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{ name="Fiyi", email="fiyignk@gmail.com" }
|
|
14
|
+
]
|
|
15
|
+
keywords = ["devops", "terraform", "infrastructure", "documentation", "cli"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"Intended Audience :: System Administrators",
|
|
21
|
+
"License :: OSI Approved :: MIT License",
|
|
22
|
+
"Operating System :: OS Independent",
|
|
23
|
+
"Programming Language :: Python :: 3",
|
|
24
|
+
"Programming Language :: Python :: 3.9",
|
|
25
|
+
"Programming Language :: Python :: 3.10",
|
|
26
|
+
"Programming Language :: Python :: 3.11",
|
|
27
|
+
"Programming Language :: Python :: 3.12",
|
|
28
|
+
"Topic :: System :: Systems Administration",
|
|
29
|
+
"Topic :: Utilities",
|
|
30
|
+
]
|
|
31
|
+
dependencies = [
|
|
32
|
+
"click>=8.0.0",
|
|
33
|
+
"pyyaml>=6.0.0",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
[project.scripts]
|
|
37
|
+
fixdoc = "fixdoc.fix:main"
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
dev = [
|
|
41
|
+
"pytest>=7.0.0",
|
|
42
|
+
"pytest-cov>=4.0.0",
|
|
43
|
+
"black>=23.0.0",
|
|
44
|
+
"ruff>=0.1.0",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
[tool.setuptools.packages.find]
|
|
48
|
+
where = ["src"]
|
|
49
|
+
|
|
50
|
+
[tool.black]
|
|
51
|
+
line-length = 88
|
|
52
|
+
target-version = ["py39"]
|
|
53
|
+
|
|
54
|
+
[tool.ruff]
|
|
55
|
+
line-length = 88
|
|
56
|
+
select = ["E", "F", "I", "N", "W"]
|
|
57
|
+
|
|
58
|
+
[project.urls]
|
|
59
|
+
Homepage = "https://github.com/fiyiogunkoya/FixDoc"
|
fixdoc-0.0.1/setup.cfg
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""CLI assembly for fixdoc."""
|
|
2
|
+
|
|
3
|
+
import click
|
|
4
|
+
|
|
5
|
+
from .commands import capture, search, show, analyze, list_fixes, stats, delete, edit, sync
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def create_cli() -> click.Group:
|
|
9
|
+
|
|
10
|
+
@click.group()
|
|
11
|
+
@click.version_option(version="0.1.0", prog_name="fixdoc")
|
|
12
|
+
def cli():
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
# group commands
|
|
16
|
+
cli.add_command(capture)
|
|
17
|
+
cli.add_command(search)
|
|
18
|
+
cli.add_command(show)
|
|
19
|
+
cli.add_command(analyze)
|
|
20
|
+
cli.add_command(list_fixes)
|
|
21
|
+
cli.add_command(stats)
|
|
22
|
+
cli.add_command(delete)
|
|
23
|
+
cli.add_command(edit)
|
|
24
|
+
cli.add_command(sync)
|
|
25
|
+
|
|
26
|
+
return cli
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""CLI commands for fixdoc."""
|
|
2
|
+
|
|
3
|
+
from .capture import capture
|
|
4
|
+
from .search import search, show
|
|
5
|
+
from .analyze import analyze
|
|
6
|
+
from .manage import list_fixes, stats
|
|
7
|
+
from .delete import delete
|
|
8
|
+
from .edit import edit
|
|
9
|
+
from .sync import sync
|
|
10
|
+
|
|
11
|
+
__all__ = ["capture", "search", "show", "analyze", "list_fixes", "stats", "delete", "edit", "sync"]
|