wup 0.2.1__tar.gz → 0.2.2__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.
- {wup-0.2.1 → wup-0.2.2}/PKG-INFO +115 -11
- {wup-0.2.1 → wup-0.2.2}/README.md +112 -8
- {wup-0.2.1 → wup-0.2.2}/pyproject.toml +3 -3
- {wup-0.2.1 → wup-0.2.2}/wup/__init__.py +1 -1
- {wup-0.2.1 → wup-0.2.2}/wup.egg-info/PKG-INFO +115 -11
- {wup-0.2.1 → wup-0.2.2}/LICENSE +0 -0
- {wup-0.2.1 → wup-0.2.2}/setup.cfg +0 -0
- {wup-0.2.1 → wup-0.2.2}/tests/test_testql_watcher.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/tests/test_wup.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/cli.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/config.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/core.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/dependency_mapper.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/models/__init__.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/models/config.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup/testql_watcher.py +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup.egg-info/SOURCES.txt +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup.egg-info/dependency_links.txt +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup.egg-info/entry_points.txt +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup.egg-info/requires.txt +0 -0
- {wup-0.2.1 → wup-0.2.2}/wup.egg-info/top_level.txt +0 -0
{wup-0.2.1 → wup-0.2.2}/PKG-INFO
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wup
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: WUP (What's Up) - Intelligent file watcher for regression testing in large projects
|
|
5
5
|
Author-email: Tom Sapletta <tom@sapletta.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
8
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/semcod/wup
|
|
8
|
+
Project-URL: Repository, https://github.com/semcod/wup
|
|
9
9
|
Keywords: wup,watcher,testing,regression,file-monitoring
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
@@ -28,17 +28,17 @@ Dynamic: license-file
|
|
|
28
28
|
|
|
29
29
|
## AI Cost Tracking
|
|
30
30
|
|
|
31
|
-
    
|
|
32
|
+
  
|
|
33
33
|
|
|
34
|
-
- 🤖 **LLM usage:** $0.
|
|
34
|
+
- 🤖 **LLM usage:** $0.9000 (6 commits)
|
|
35
35
|
- 👤 **Human dev:** ~$200 (2.0h @ $100/h, 30min dedup)
|
|
36
36
|
|
|
37
37
|
Generated on 2026-04-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
    
|
|
42
42
|
|
|
43
43
|
**WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
|
|
44
44
|
|
|
@@ -56,6 +56,9 @@ WUP monitors file changes and runs intelligent regression tests using a 3-layer
|
|
|
56
56
|
- 🔍 **Dependency Mapping**: Automatic detection of files → endpoints → services
|
|
57
57
|
- 🚀 **Framework Support**: FastAPI, Flask, Django, Express.js, and more
|
|
58
58
|
- 📝 **Blame Reports**: Detailed regression reports with file/line/commit info
|
|
59
|
+
- ⚙️ **Configuration System**: Declarative configuration via `wup.yaml` file
|
|
60
|
+
- 🎛️ **Per-Service Settings**: Custom test strategies per service
|
|
61
|
+
- 🧪 **TestQL Integration**: Native support for TestQL scenarios
|
|
59
62
|
|
|
60
63
|
## Installation
|
|
61
64
|
|
|
@@ -70,13 +73,16 @@ pip install -e ".[dev]"
|
|
|
70
73
|
## Quick Start
|
|
71
74
|
|
|
72
75
|
```bash
|
|
73
|
-
# 1.
|
|
76
|
+
# 1. Initialize configuration (optional)
|
|
77
|
+
wup init
|
|
78
|
+
|
|
79
|
+
# 2. Build dependency map (one-time setup)
|
|
74
80
|
wup map-deps ./my-project
|
|
75
81
|
|
|
76
|
-
#
|
|
82
|
+
# 3. Start watching for changes
|
|
77
83
|
wup watch ./my-project
|
|
78
84
|
|
|
79
|
-
#
|
|
85
|
+
# 4. Start with live dashboard
|
|
80
86
|
wup watch ./my-project --dashboard
|
|
81
87
|
```
|
|
82
88
|
|
|
@@ -98,7 +104,7 @@ wup map-deps ./my-project --output my-deps.json
|
|
|
98
104
|
### Watch Project
|
|
99
105
|
|
|
100
106
|
```bash
|
|
101
|
-
# Basic watching
|
|
107
|
+
# Basic watching (uses wup.yaml if present)
|
|
102
108
|
wup watch ./my-project
|
|
103
109
|
|
|
104
110
|
# With custom settings
|
|
@@ -109,6 +115,22 @@ wup watch ./my-project \
|
|
|
109
115
|
|
|
110
116
|
# With live dashboard
|
|
111
117
|
wup watch ./my-project --dashboard
|
|
118
|
+
|
|
119
|
+
# Use specific config file
|
|
120
|
+
wup watch ./my-project --config custom-config.yaml
|
|
121
|
+
|
|
122
|
+
# TestQL mode
|
|
123
|
+
wup watch ./my-project --mode testql
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Initialize Configuration
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Generate default wup.yaml configuration
|
|
130
|
+
wup init
|
|
131
|
+
|
|
132
|
+
# Generate with custom output path
|
|
133
|
+
wup init --output .wup.yaml
|
|
112
134
|
```
|
|
113
135
|
|
|
114
136
|
### Check Status
|
|
@@ -160,15 +182,87 @@ Full regression: 15s test → 15% CPU spike
|
|
|
160
182
|
|
|
161
183
|
## Configuration
|
|
162
184
|
|
|
185
|
+
### wup.yaml Configuration File
|
|
186
|
+
|
|
187
|
+
WUP supports declarative configuration via `wup.yaml` (or `.wup.yaml`) in your project root. This allows you to define watch paths, service-specific settings, and test strategies.
|
|
188
|
+
|
|
189
|
+
Generate a default configuration:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
wup init
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Example `wup.yaml`:
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
project:
|
|
199
|
+
name: "my-project"
|
|
200
|
+
description: "My awesome project"
|
|
201
|
+
|
|
202
|
+
watch:
|
|
203
|
+
# Folders to watch (supports glob patterns)
|
|
204
|
+
paths:
|
|
205
|
+
- "app/**"
|
|
206
|
+
- "src/**"
|
|
207
|
+
- "routes/**"
|
|
208
|
+
- "!tests/**" # exclusion
|
|
209
|
+
- "!node_modules/**"
|
|
210
|
+
|
|
211
|
+
# Global exclude patterns
|
|
212
|
+
exclude_patterns:
|
|
213
|
+
- "*.md"
|
|
214
|
+
- "*.txt"
|
|
215
|
+
- "migrations/**"
|
|
216
|
+
|
|
217
|
+
services:
|
|
218
|
+
# Service configurations
|
|
219
|
+
- name: "users"
|
|
220
|
+
root: "app/users"
|
|
221
|
+
paths:
|
|
222
|
+
- "app/users/**"
|
|
223
|
+
- "routes/users/**"
|
|
224
|
+
quick_tests:
|
|
225
|
+
scope: "read,write"
|
|
226
|
+
max_endpoints: 3
|
|
227
|
+
detail_tests:
|
|
228
|
+
scope: "all"
|
|
229
|
+
max_endpoints: 10
|
|
230
|
+
cpu_throttle: 0.7
|
|
231
|
+
notify:
|
|
232
|
+
type: "http+file"
|
|
233
|
+
url: "http://localhost:8001/notify"
|
|
234
|
+
file: "wup/notify-users.json"
|
|
235
|
+
|
|
236
|
+
test_strategy:
|
|
237
|
+
quick:
|
|
238
|
+
debounce_s: 2
|
|
239
|
+
max_queue: 5
|
|
240
|
+
timeout_s: 10
|
|
241
|
+
detail:
|
|
242
|
+
debounce_s: 10
|
|
243
|
+
max_queue: 1
|
|
244
|
+
timeout_s: 30
|
|
245
|
+
|
|
246
|
+
testql:
|
|
247
|
+
# TestQL-specific configuration
|
|
248
|
+
scenario_dir: "scenarios/tests"
|
|
249
|
+
smoke_scenario: "smoke.testql.toon.yaml"
|
|
250
|
+
output_format: "json"
|
|
251
|
+
extra_args:
|
|
252
|
+
- "--timeout 10s"
|
|
253
|
+
```
|
|
254
|
+
|
|
163
255
|
### CLI Options
|
|
164
256
|
|
|
165
257
|
| Option | Default | Description |
|
|
166
258
|
|--------|---------|-------------|
|
|
259
|
+
| `--config` | auto | Path to wup.yaml config file |
|
|
167
260
|
| `--cpu-throttle` | 0.8 | CPU usage threshold (0.0-1.0) |
|
|
168
261
|
| `--debounce` | 2 | Debounce time in seconds |
|
|
169
262
|
| `--cooldown` | 300 | Test cooldown in seconds |
|
|
170
263
|
| `--dashboard` | false | Enable live dashboard |
|
|
171
264
|
| `--deps` | deps.json | Dependency map file path |
|
|
265
|
+
| `--mode` | default | Watcher mode: default or testql |
|
|
172
266
|
|
|
173
267
|
### Environment Variables
|
|
174
268
|
|
|
@@ -213,11 +307,21 @@ async def run_detail_test(self, service: str, endpoints: List[str]) -> Dict:
|
|
|
213
307
|
wup/
|
|
214
308
|
├── wup/
|
|
215
309
|
│ ├── __init__.py # Package exports
|
|
310
|
+
│ ├── config.py # Configuration loader
|
|
311
|
+
│ ├── models/
|
|
312
|
+
│ │ ├── __init__.py # Models package
|
|
313
|
+
│ │ └── config.py # Configuration dataclasses
|
|
216
314
|
│ ├── core.py # WupWatcher implementation
|
|
217
315
|
│ ├── dependency_mapper.py # Dependency mapping logic
|
|
316
|
+
│ ├── testql_watcher.py # TestQL integration
|
|
218
317
|
│ └── cli.py # CLI interface
|
|
219
318
|
├── tests/
|
|
220
319
|
│ └── test_wup.py # Unit tests
|
|
320
|
+
├── docs/
|
|
321
|
+
│ ├── 2.md # Refactoring documentation
|
|
322
|
+
│ ├── 3.md # Configuration plan
|
|
323
|
+
│ └── TESTQL_INTEGRATION.md # TestQL integration docs
|
|
324
|
+
├── wup.yaml.example # Example configuration
|
|
221
325
|
├── pyproject.toml # Package configuration
|
|
222
326
|
└── README.md # This file
|
|
223
327
|
```
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
## AI Cost Tracking
|
|
5
5
|
|
|
6
|
-
    
|
|
7
|
+
  
|
|
8
8
|
|
|
9
|
-
- 🤖 **LLM usage:** $0.
|
|
9
|
+
- 🤖 **LLM usage:** $0.9000 (6 commits)
|
|
10
10
|
- 👤 **Human dev:** ~$200 (2.0h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
12
|
Generated on 2026-04-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
    
|
|
17
17
|
|
|
18
18
|
**WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
|
|
19
19
|
|
|
@@ -31,6 +31,9 @@ WUP monitors file changes and runs intelligent regression tests using a 3-layer
|
|
|
31
31
|
- 🔍 **Dependency Mapping**: Automatic detection of files → endpoints → services
|
|
32
32
|
- 🚀 **Framework Support**: FastAPI, Flask, Django, Express.js, and more
|
|
33
33
|
- 📝 **Blame Reports**: Detailed regression reports with file/line/commit info
|
|
34
|
+
- ⚙️ **Configuration System**: Declarative configuration via `wup.yaml` file
|
|
35
|
+
- 🎛️ **Per-Service Settings**: Custom test strategies per service
|
|
36
|
+
- 🧪 **TestQL Integration**: Native support for TestQL scenarios
|
|
34
37
|
|
|
35
38
|
## Installation
|
|
36
39
|
|
|
@@ -45,13 +48,16 @@ pip install -e ".[dev]"
|
|
|
45
48
|
## Quick Start
|
|
46
49
|
|
|
47
50
|
```bash
|
|
48
|
-
# 1.
|
|
51
|
+
# 1. Initialize configuration (optional)
|
|
52
|
+
wup init
|
|
53
|
+
|
|
54
|
+
# 2. Build dependency map (one-time setup)
|
|
49
55
|
wup map-deps ./my-project
|
|
50
56
|
|
|
51
|
-
#
|
|
57
|
+
# 3. Start watching for changes
|
|
52
58
|
wup watch ./my-project
|
|
53
59
|
|
|
54
|
-
#
|
|
60
|
+
# 4. Start with live dashboard
|
|
55
61
|
wup watch ./my-project --dashboard
|
|
56
62
|
```
|
|
57
63
|
|
|
@@ -73,7 +79,7 @@ wup map-deps ./my-project --output my-deps.json
|
|
|
73
79
|
### Watch Project
|
|
74
80
|
|
|
75
81
|
```bash
|
|
76
|
-
# Basic watching
|
|
82
|
+
# Basic watching (uses wup.yaml if present)
|
|
77
83
|
wup watch ./my-project
|
|
78
84
|
|
|
79
85
|
# With custom settings
|
|
@@ -84,6 +90,22 @@ wup watch ./my-project \
|
|
|
84
90
|
|
|
85
91
|
# With live dashboard
|
|
86
92
|
wup watch ./my-project --dashboard
|
|
93
|
+
|
|
94
|
+
# Use specific config file
|
|
95
|
+
wup watch ./my-project --config custom-config.yaml
|
|
96
|
+
|
|
97
|
+
# TestQL mode
|
|
98
|
+
wup watch ./my-project --mode testql
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Initialize Configuration
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Generate default wup.yaml configuration
|
|
105
|
+
wup init
|
|
106
|
+
|
|
107
|
+
# Generate with custom output path
|
|
108
|
+
wup init --output .wup.yaml
|
|
87
109
|
```
|
|
88
110
|
|
|
89
111
|
### Check Status
|
|
@@ -135,15 +157,87 @@ Full regression: 15s test → 15% CPU spike
|
|
|
135
157
|
|
|
136
158
|
## Configuration
|
|
137
159
|
|
|
160
|
+
### wup.yaml Configuration File
|
|
161
|
+
|
|
162
|
+
WUP supports declarative configuration via `wup.yaml` (or `.wup.yaml`) in your project root. This allows you to define watch paths, service-specific settings, and test strategies.
|
|
163
|
+
|
|
164
|
+
Generate a default configuration:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
wup init
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Example `wup.yaml`:
|
|
171
|
+
|
|
172
|
+
```yaml
|
|
173
|
+
project:
|
|
174
|
+
name: "my-project"
|
|
175
|
+
description: "My awesome project"
|
|
176
|
+
|
|
177
|
+
watch:
|
|
178
|
+
# Folders to watch (supports glob patterns)
|
|
179
|
+
paths:
|
|
180
|
+
- "app/**"
|
|
181
|
+
- "src/**"
|
|
182
|
+
- "routes/**"
|
|
183
|
+
- "!tests/**" # exclusion
|
|
184
|
+
- "!node_modules/**"
|
|
185
|
+
|
|
186
|
+
# Global exclude patterns
|
|
187
|
+
exclude_patterns:
|
|
188
|
+
- "*.md"
|
|
189
|
+
- "*.txt"
|
|
190
|
+
- "migrations/**"
|
|
191
|
+
|
|
192
|
+
services:
|
|
193
|
+
# Service configurations
|
|
194
|
+
- name: "users"
|
|
195
|
+
root: "app/users"
|
|
196
|
+
paths:
|
|
197
|
+
- "app/users/**"
|
|
198
|
+
- "routes/users/**"
|
|
199
|
+
quick_tests:
|
|
200
|
+
scope: "read,write"
|
|
201
|
+
max_endpoints: 3
|
|
202
|
+
detail_tests:
|
|
203
|
+
scope: "all"
|
|
204
|
+
max_endpoints: 10
|
|
205
|
+
cpu_throttle: 0.7
|
|
206
|
+
notify:
|
|
207
|
+
type: "http+file"
|
|
208
|
+
url: "http://localhost:8001/notify"
|
|
209
|
+
file: "wup/notify-users.json"
|
|
210
|
+
|
|
211
|
+
test_strategy:
|
|
212
|
+
quick:
|
|
213
|
+
debounce_s: 2
|
|
214
|
+
max_queue: 5
|
|
215
|
+
timeout_s: 10
|
|
216
|
+
detail:
|
|
217
|
+
debounce_s: 10
|
|
218
|
+
max_queue: 1
|
|
219
|
+
timeout_s: 30
|
|
220
|
+
|
|
221
|
+
testql:
|
|
222
|
+
# TestQL-specific configuration
|
|
223
|
+
scenario_dir: "scenarios/tests"
|
|
224
|
+
smoke_scenario: "smoke.testql.toon.yaml"
|
|
225
|
+
output_format: "json"
|
|
226
|
+
extra_args:
|
|
227
|
+
- "--timeout 10s"
|
|
228
|
+
```
|
|
229
|
+
|
|
138
230
|
### CLI Options
|
|
139
231
|
|
|
140
232
|
| Option | Default | Description |
|
|
141
233
|
|--------|---------|-------------|
|
|
234
|
+
| `--config` | auto | Path to wup.yaml config file |
|
|
142
235
|
| `--cpu-throttle` | 0.8 | CPU usage threshold (0.0-1.0) |
|
|
143
236
|
| `--debounce` | 2 | Debounce time in seconds |
|
|
144
237
|
| `--cooldown` | 300 | Test cooldown in seconds |
|
|
145
238
|
| `--dashboard` | false | Enable live dashboard |
|
|
146
239
|
| `--deps` | deps.json | Dependency map file path |
|
|
240
|
+
| `--mode` | default | Watcher mode: default or testql |
|
|
147
241
|
|
|
148
242
|
### Environment Variables
|
|
149
243
|
|
|
@@ -188,11 +282,21 @@ async def run_detail_test(self, service: str, endpoints: List[str]) -> Dict:
|
|
|
188
282
|
wup/
|
|
189
283
|
├── wup/
|
|
190
284
|
│ ├── __init__.py # Package exports
|
|
285
|
+
│ ├── config.py # Configuration loader
|
|
286
|
+
│ ├── models/
|
|
287
|
+
│ │ ├── __init__.py # Models package
|
|
288
|
+
│ │ └── config.py # Configuration dataclasses
|
|
191
289
|
│ ├── core.py # WupWatcher implementation
|
|
192
290
|
│ ├── dependency_mapper.py # Dependency mapping logic
|
|
291
|
+
│ ├── testql_watcher.py # TestQL integration
|
|
193
292
|
│ └── cli.py # CLI interface
|
|
194
293
|
├── tests/
|
|
195
294
|
│ └── test_wup.py # Unit tests
|
|
295
|
+
├── docs/
|
|
296
|
+
│ ├── 2.md # Refactoring documentation
|
|
297
|
+
│ ├── 3.md # Configuration plan
|
|
298
|
+
│ └── TESTQL_INTEGRATION.md # TestQL integration docs
|
|
299
|
+
├── wup.yaml.example # Example configuration
|
|
196
300
|
├── pyproject.toml # Package configuration
|
|
197
301
|
└── README.md # This file
|
|
198
302
|
```
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "wup"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
description = "WUP (What's Up) - Intelligent file watcher for regression testing in large projects"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -33,8 +33,8 @@ classifiers = [
|
|
|
33
33
|
wup = "wup.cli:app"
|
|
34
34
|
|
|
35
35
|
[project.urls]
|
|
36
|
-
Homepage = "https://github.com/
|
|
37
|
-
Repository = "https://github.com/
|
|
36
|
+
Homepage = "https://github.com/semcod/wup"
|
|
37
|
+
Repository = "https://github.com/semcod/wup"
|
|
38
38
|
|
|
39
39
|
[tool.pfix]
|
|
40
40
|
# Self-healing Python configuration
|
|
@@ -7,7 +7,7 @@ WUP monitors file changes and runs intelligent regression tests using a 3-layer
|
|
|
7
7
|
3. Detail Layer: Full tests with blame reports (only on failure)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
__version__ = "0.2.
|
|
10
|
+
__version__ = "0.2.2"
|
|
11
11
|
__author__ = "Tom Sapletta"
|
|
12
12
|
|
|
13
13
|
from .config import load_config, save_config, get_default_config
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wup
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: WUP (What's Up) - Intelligent file watcher for regression testing in large projects
|
|
5
5
|
Author-email: Tom Sapletta <tom@sapletta.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
8
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/semcod/wup
|
|
8
|
+
Project-URL: Repository, https://github.com/semcod/wup
|
|
9
9
|
Keywords: wup,watcher,testing,regression,file-monitoring
|
|
10
10
|
Classifier: Development Status :: 3 - Alpha
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
@@ -28,17 +28,17 @@ Dynamic: license-file
|
|
|
28
28
|
|
|
29
29
|
## AI Cost Tracking
|
|
30
30
|
|
|
31
|
-
    
|
|
32
|
+
  
|
|
33
33
|
|
|
34
|
-
- 🤖 **LLM usage:** $0.
|
|
34
|
+
- 🤖 **LLM usage:** $0.9000 (6 commits)
|
|
35
35
|
- 👤 **Human dev:** ~$200 (2.0h @ $100/h, 30min dedup)
|
|
36
36
|
|
|
37
37
|
Generated on 2026-04-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
    
|
|
42
42
|
|
|
43
43
|
**WUP (What's Up)** - Intelligent file watcher for regression testing in large projects.
|
|
44
44
|
|
|
@@ -56,6 +56,9 @@ WUP monitors file changes and runs intelligent regression tests using a 3-layer
|
|
|
56
56
|
- 🔍 **Dependency Mapping**: Automatic detection of files → endpoints → services
|
|
57
57
|
- 🚀 **Framework Support**: FastAPI, Flask, Django, Express.js, and more
|
|
58
58
|
- 📝 **Blame Reports**: Detailed regression reports with file/line/commit info
|
|
59
|
+
- ⚙️ **Configuration System**: Declarative configuration via `wup.yaml` file
|
|
60
|
+
- 🎛️ **Per-Service Settings**: Custom test strategies per service
|
|
61
|
+
- 🧪 **TestQL Integration**: Native support for TestQL scenarios
|
|
59
62
|
|
|
60
63
|
## Installation
|
|
61
64
|
|
|
@@ -70,13 +73,16 @@ pip install -e ".[dev]"
|
|
|
70
73
|
## Quick Start
|
|
71
74
|
|
|
72
75
|
```bash
|
|
73
|
-
# 1.
|
|
76
|
+
# 1. Initialize configuration (optional)
|
|
77
|
+
wup init
|
|
78
|
+
|
|
79
|
+
# 2. Build dependency map (one-time setup)
|
|
74
80
|
wup map-deps ./my-project
|
|
75
81
|
|
|
76
|
-
#
|
|
82
|
+
# 3. Start watching for changes
|
|
77
83
|
wup watch ./my-project
|
|
78
84
|
|
|
79
|
-
#
|
|
85
|
+
# 4. Start with live dashboard
|
|
80
86
|
wup watch ./my-project --dashboard
|
|
81
87
|
```
|
|
82
88
|
|
|
@@ -98,7 +104,7 @@ wup map-deps ./my-project --output my-deps.json
|
|
|
98
104
|
### Watch Project
|
|
99
105
|
|
|
100
106
|
```bash
|
|
101
|
-
# Basic watching
|
|
107
|
+
# Basic watching (uses wup.yaml if present)
|
|
102
108
|
wup watch ./my-project
|
|
103
109
|
|
|
104
110
|
# With custom settings
|
|
@@ -109,6 +115,22 @@ wup watch ./my-project \
|
|
|
109
115
|
|
|
110
116
|
# With live dashboard
|
|
111
117
|
wup watch ./my-project --dashboard
|
|
118
|
+
|
|
119
|
+
# Use specific config file
|
|
120
|
+
wup watch ./my-project --config custom-config.yaml
|
|
121
|
+
|
|
122
|
+
# TestQL mode
|
|
123
|
+
wup watch ./my-project --mode testql
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Initialize Configuration
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Generate default wup.yaml configuration
|
|
130
|
+
wup init
|
|
131
|
+
|
|
132
|
+
# Generate with custom output path
|
|
133
|
+
wup init --output .wup.yaml
|
|
112
134
|
```
|
|
113
135
|
|
|
114
136
|
### Check Status
|
|
@@ -160,15 +182,87 @@ Full regression: 15s test → 15% CPU spike
|
|
|
160
182
|
|
|
161
183
|
## Configuration
|
|
162
184
|
|
|
185
|
+
### wup.yaml Configuration File
|
|
186
|
+
|
|
187
|
+
WUP supports declarative configuration via `wup.yaml` (or `.wup.yaml`) in your project root. This allows you to define watch paths, service-specific settings, and test strategies.
|
|
188
|
+
|
|
189
|
+
Generate a default configuration:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
wup init
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Example `wup.yaml`:
|
|
196
|
+
|
|
197
|
+
```yaml
|
|
198
|
+
project:
|
|
199
|
+
name: "my-project"
|
|
200
|
+
description: "My awesome project"
|
|
201
|
+
|
|
202
|
+
watch:
|
|
203
|
+
# Folders to watch (supports glob patterns)
|
|
204
|
+
paths:
|
|
205
|
+
- "app/**"
|
|
206
|
+
- "src/**"
|
|
207
|
+
- "routes/**"
|
|
208
|
+
- "!tests/**" # exclusion
|
|
209
|
+
- "!node_modules/**"
|
|
210
|
+
|
|
211
|
+
# Global exclude patterns
|
|
212
|
+
exclude_patterns:
|
|
213
|
+
- "*.md"
|
|
214
|
+
- "*.txt"
|
|
215
|
+
- "migrations/**"
|
|
216
|
+
|
|
217
|
+
services:
|
|
218
|
+
# Service configurations
|
|
219
|
+
- name: "users"
|
|
220
|
+
root: "app/users"
|
|
221
|
+
paths:
|
|
222
|
+
- "app/users/**"
|
|
223
|
+
- "routes/users/**"
|
|
224
|
+
quick_tests:
|
|
225
|
+
scope: "read,write"
|
|
226
|
+
max_endpoints: 3
|
|
227
|
+
detail_tests:
|
|
228
|
+
scope: "all"
|
|
229
|
+
max_endpoints: 10
|
|
230
|
+
cpu_throttle: 0.7
|
|
231
|
+
notify:
|
|
232
|
+
type: "http+file"
|
|
233
|
+
url: "http://localhost:8001/notify"
|
|
234
|
+
file: "wup/notify-users.json"
|
|
235
|
+
|
|
236
|
+
test_strategy:
|
|
237
|
+
quick:
|
|
238
|
+
debounce_s: 2
|
|
239
|
+
max_queue: 5
|
|
240
|
+
timeout_s: 10
|
|
241
|
+
detail:
|
|
242
|
+
debounce_s: 10
|
|
243
|
+
max_queue: 1
|
|
244
|
+
timeout_s: 30
|
|
245
|
+
|
|
246
|
+
testql:
|
|
247
|
+
# TestQL-specific configuration
|
|
248
|
+
scenario_dir: "scenarios/tests"
|
|
249
|
+
smoke_scenario: "smoke.testql.toon.yaml"
|
|
250
|
+
output_format: "json"
|
|
251
|
+
extra_args:
|
|
252
|
+
- "--timeout 10s"
|
|
253
|
+
```
|
|
254
|
+
|
|
163
255
|
### CLI Options
|
|
164
256
|
|
|
165
257
|
| Option | Default | Description |
|
|
166
258
|
|--------|---------|-------------|
|
|
259
|
+
| `--config` | auto | Path to wup.yaml config file |
|
|
167
260
|
| `--cpu-throttle` | 0.8 | CPU usage threshold (0.0-1.0) |
|
|
168
261
|
| `--debounce` | 2 | Debounce time in seconds |
|
|
169
262
|
| `--cooldown` | 300 | Test cooldown in seconds |
|
|
170
263
|
| `--dashboard` | false | Enable live dashboard |
|
|
171
264
|
| `--deps` | deps.json | Dependency map file path |
|
|
265
|
+
| `--mode` | default | Watcher mode: default or testql |
|
|
172
266
|
|
|
173
267
|
### Environment Variables
|
|
174
268
|
|
|
@@ -213,11 +307,21 @@ async def run_detail_test(self, service: str, endpoints: List[str]) -> Dict:
|
|
|
213
307
|
wup/
|
|
214
308
|
├── wup/
|
|
215
309
|
│ ├── __init__.py # Package exports
|
|
310
|
+
│ ├── config.py # Configuration loader
|
|
311
|
+
│ ├── models/
|
|
312
|
+
│ │ ├── __init__.py # Models package
|
|
313
|
+
│ │ └── config.py # Configuration dataclasses
|
|
216
314
|
│ ├── core.py # WupWatcher implementation
|
|
217
315
|
│ ├── dependency_mapper.py # Dependency mapping logic
|
|
316
|
+
│ ├── testql_watcher.py # TestQL integration
|
|
218
317
|
│ └── cli.py # CLI interface
|
|
219
318
|
├── tests/
|
|
220
319
|
│ └── test_wup.py # Unit tests
|
|
320
|
+
├── docs/
|
|
321
|
+
│ ├── 2.md # Refactoring documentation
|
|
322
|
+
│ ├── 3.md # Configuration plan
|
|
323
|
+
│ └── TESTQL_INTEGRATION.md # TestQL integration docs
|
|
324
|
+
├── wup.yaml.example # Example configuration
|
|
221
325
|
├── pyproject.toml # Package configuration
|
|
222
326
|
└── README.md # This file
|
|
223
327
|
```
|
{wup-0.2.1 → wup-0.2.2}/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|