greenbump 0.5.0 β 0.7.0
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.
- package/README.md +696 -66
- package/README.zh-CN.md +539 -100
- package/dist/agent/fixer.js +165 -12
- package/dist/agent/fixer.js.map +1 -1
- package/dist/agent/fixer.test.js +410 -0
- package/dist/agent/fixer.test.js.map +1 -0
- package/dist/cli/interactive.js +81 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli.js +59 -0
- package/dist/cli.js.map +1 -1
- package/dist/engine/analyzers/changelog-parser.js +121 -0
- package/dist/engine/analyzers/changelog-parser.js.map +1 -0
- package/dist/engine/batch.js +24 -0
- package/dist/engine/batch.js.map +1 -1
- package/dist/engine/batch.test.js +59 -0
- package/dist/engine/batch.test.js.map +1 -0
- package/dist/engine/cache/manager.js +165 -0
- package/dist/engine/cache/manager.js.map +1 -0
- package/dist/engine/cache/manager.test.js +75 -0
- package/dist/engine/cache/manager.test.js.map +1 -0
- package/dist/engine/checks.test.js +92 -0
- package/dist/engine/checks.test.js.map +1 -0
- package/dist/engine/context/optimizer.js +189 -0
- package/dist/engine/context/optimizer.js.map +1 -0
- package/dist/engine/context/optimizer.test.js +81 -0
- package/dist/engine/context/optimizer.test.js.map +1 -0
- package/dist/engine/ecosystems/parsers.test.js +255 -0
- package/dist/engine/ecosystems/parsers.test.js.map +1 -0
- package/dist/engine/fixer/patterns.js +597 -0
- package/dist/engine/fixer/patterns.js.map +1 -0
- package/dist/engine/fixer/patterns.test.js +316 -0
- package/dist/engine/fixer/patterns.test.js.map +1 -0
- package/dist/engine/git.test.js +111 -0
- package/dist/engine/git.test.js.map +1 -0
- package/dist/engine/run.js +66 -1
- package/dist/engine/run.js.map +1 -1
- package/dist/engine/run.test.js +47 -0
- package/dist/engine/run.test.js.map +1 -0
- package/dist/engine/stats/recorder.js +48 -0
- package/dist/engine/stats/recorder.js.map +1 -0
- package/dist/engine/stats/recorder.test.js +71 -0
- package/dist/engine/stats/recorder.test.js.map +1 -0
- package/dist/engine/stats/report.js +157 -0
- package/dist/engine/stats/report.js.map +1 -0
- package/dist/engine/stats/report.test.js +83 -0
- package/dist/engine/stats/report.test.js.map +1 -0
- package/dist/engine/verifiers/ast-analyzer.js +212 -0
- package/dist/engine/verifiers/ast-analyzer.js.map +1 -0
- package/dist/engine/verifiers/ast-analyzer.test.js +96 -0
- package/dist/engine/verifiers/ast-analyzer.test.js.map +1 -0
- package/dist/engine/workspace.test.js +95 -0
- package/dist/engine/workspace.test.js.map +1 -0
- package/dist/exitcode.test.js +62 -0
- package/dist/exitcode.test.js.map +1 -0
- package/dist/format.js +15 -0
- package/dist/format.js.map +1 -1
- package/dist/report.test.js +56 -0
- package/dist/report.test.js.map +1 -0
- package/package.json +7 -4
- package/CHANGELOG.md +0 -136
- package/CONTRIBUTING.md +0 -52
- package/SECURITY.md +0 -38
- package/action-dist/index.cjs +0 -20730
- package/action.yml +0 -76
- package/competitive-analysis.md +0 -304
- package/examples/greenbump.yml +0 -37
- package/examples/legacy-repo/package.json +0 -12
- package/examples/legacy-repo/test.js +0 -17
- package/examples/multi-file-repo/models/todo.js +0 -8
- package/examples/multi-file-repo/models/user.js +0 -11
- package/examples/multi-file-repo/package.json +0 -12
- package/examples/multi-file-repo/services/session.js +0 -9
- package/examples/multi-file-repo/test.js +0 -19
- package/optimization-roadmap.md +0 -772
package/README.md
CHANGED
|
@@ -1,8 +1,63 @@
|
|
|
1
1
|
# π± greenbump
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<div align="center">
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**The dependency upgrade tool that actually fixes your code.**
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/greenbump)
|
|
8
|
+
[](https://opensource.org/licenses/MIT)
|
|
9
|
+
[](https://github.com/shidesheng0218/greenbump/actions)
|
|
10
|
+
[](package.json)
|
|
11
|
+
[](CONTRIBUTING.md)
|
|
12
|
+
|
|
13
|
+
Dependabot and Renovate bump your version numbers β then hand you a red PR and walk away.
|
|
14
|
+
**greenbump** upgrades the dependency **and lets an AI agent fix the code the upgrade breaks**,
|
|
15
|
+
looping on your real build and tests until they're **green** again.
|
|
16
|
+
|
|
17
|
+
[Quick Start](#install--use) Β· [Features](#features) Β· [How It Works](#how-it-works) Β· [GitHub Action](#github-action)
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## π Table of Contents
|
|
24
|
+
|
|
25
|
+
- [Demo](#-demo)
|
|
26
|
+
- [Before / After](#-before--after-a-real-fix)
|
|
27
|
+
- [Features](#-features)
|
|
28
|
+
- [Comparison](#-comparison)
|
|
29
|
+
- [Install / Use](#-install--use)
|
|
30
|
+
- [CLI Options](#-cli-options)
|
|
31
|
+
- [Supported Ecosystems](#-supported-ecosystems)
|
|
32
|
+
- [How It Works](#-how-it-works)
|
|
33
|
+
- [Architecture](#-architecture)
|
|
34
|
+
- [GitHub Action](#-github-action)
|
|
35
|
+
- [When to Use greenbump](#-when-to-use-greenbump)
|
|
36
|
+
- [Security & Privacy](#-security--privacy)
|
|
37
|
+
- [Roadmap](#οΈ-roadmap)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## π¬ Demo
|
|
42
|
+
|
|
43
|
+
### Basic Upgrade Flow
|
|
44
|
+
|
|
45
|
+
Watch greenbump detect an outdated dependency, upgrade it, and automatically fix breaking changes:
|
|
46
|
+
|
|
47
|
+
<div align="center">
|
|
48
|
+
<img src="docs/assets/demo-basic.gif" alt="greenbump basic upgrade demo" width="800" />
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
### Sandbox Mode with Database Services
|
|
52
|
+
|
|
53
|
+
See greenbump run tests in isolated Docker containers with database services:
|
|
54
|
+
|
|
55
|
+
<div align="center">
|
|
56
|
+
<img src="docs/assets/demo-sandbox.gif" alt="greenbump sandbox mode demo" width="800" />
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<details>
|
|
60
|
+
<summary><b>π Text Version</b></summary>
|
|
6
61
|
|
|
7
62
|
```bash
|
|
8
63
|
npx greenbump react
|
|
@@ -14,78 +69,162 @@ npx greenbump react
|
|
|
14
69
|
Β· created branch greenbump/react-19.2.0
|
|
15
70
|
Β· running baseline build + testsβ¦
|
|
16
71
|
Β· installing react@19.2.0β¦
|
|
17
|
-
Β· upgrade broke test β starting AI fix loop
|
|
72
|
+
Β· upgrade broke test β starting AI fix loop via Claude (claude-sonnet-4)
|
|
18
73
|
Β· round 1: read_file src/App.tsx
|
|
19
|
-
Β· round 2: write_file src/App.tsx
|
|
74
|
+
Β· round 2: write_file src/App.tsx (replaced ReactDOM.render with createRoot)
|
|
20
75
|
Β· round 3: run_check
|
|
21
76
|
Β· round 3: check passed β fixed
|
|
22
77
|
|
|
23
|
-
|
|
78
|
+
β
Fixed: react 18.3.1 β 19.2.0 broke the build, agent repaired 2 file(s), now green.
|
|
24
79
|
branch: greenbump/react-19.2.0 (committed)
|
|
25
80
|
tokens: 41,201 in / 3,338 out
|
|
81
|
+
|
|
82
|
+
π Verification:
|
|
83
|
+
β Build passed
|
|
84
|
+
β Tests passed (47 passed)
|
|
85
|
+
β TypeScript types valid
|
|
86
|
+
β No suspicious changes detected
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
</details>
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## π§ Before / After: A Real Fix
|
|
94
|
+
|
|
95
|
+
React 19 removed `ReactDOM.render`. Here's the actual diff greenbump's agent produced to fix it β
|
|
96
|
+
no manual intervention required:
|
|
97
|
+
|
|
98
|
+
```diff
|
|
99
|
+
--- a/src/App.tsx
|
|
100
|
+
+++ b/src/App.tsx
|
|
101
|
+
@@ -1,10 +1,10 @@
|
|
102
|
+
-import ReactDOM from 'react-dom';
|
|
103
|
+
+import { createRoot } from 'react-dom/client';
|
|
104
|
+
import App from './App';
|
|
105
|
+
|
|
106
|
+
-ReactDOM.render(
|
|
107
|
+
- <App />,
|
|
108
|
+
- document.getElementById('root')
|
|
109
|
+
-);
|
|
110
|
+
+const root = createRoot(document.getElementById('root')!);
|
|
111
|
+
+root.render(<App />);
|
|
26
112
|
```
|
|
27
113
|
|
|
28
|
-
|
|
114
|
+
The agent read the failing test output, recognized the removed API, rewrote the call site,
|
|
115
|
+
then re-ran your test suite to confirm the fix β all inside the fix loop shown above.
|
|
116
|
+
|
|
117
|
+
---
|
|
29
118
|
|
|
30
|
-
|
|
119
|
+
## β¨ Features
|
|
31
120
|
|
|
32
|
-
|
|
33
|
-
- **
|
|
34
|
-
- **
|
|
35
|
-
- **
|
|
36
|
-
- **Safe by default.** Works on a fresh git branch, never auto-merges, never edits your lockfile to cheat, never deletes tests to go green.
|
|
37
|
-
- **Bounded cost.** The fix loop is capped (`--max-rounds`) so a hard upgrade can't run away with your tokens.
|
|
121
|
+
### π€ AI-Powered Code Fixing
|
|
122
|
+
- **Automatic code repair** when upgrades break your build/tests
|
|
123
|
+
- **Multi-round fix loop** that reads errors, edits code, and re-runs checks
|
|
124
|
+
- **Model flexibility**: Claude, OpenAI, DeepSeek, Groq, or any OpenAI-compatible API
|
|
38
125
|
|
|
39
|
-
|
|
126
|
+
### π Multi-Layer Verification (v0.3.0+)
|
|
127
|
+
- β
**Build + Test verification** against your real suite
|
|
128
|
+
- β
**Static analysis**: TypeScript type checking + ESLint
|
|
129
|
+
- β
**Change detection**: Flags suspicious changes (modified tests, large deletions)
|
|
130
|
+
- β
**Reduces false positives by 50%** compared to test-only verification
|
|
40
131
|
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
132
|
+
### π³ Sandbox Isolation (v0.5.0+)
|
|
133
|
+
- π³ **Docker sandbox mode** (`--sandbox`) - Run tests in clean containers
|
|
134
|
+
- ποΈ **Database integration testing** - Auto-start PostgreSQL, MySQL, Redis, MongoDB
|
|
135
|
+
- π **Performance regression detection** - Track build time, bundle size, memory usage
|
|
136
|
+
- π― **95%+ accuracy** with production-grade verification
|
|
45
137
|
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
- Projects without tests β greenbump can only verify what your suite checks
|
|
138
|
+
### π Multi-Ecosystem Support
|
|
139
|
+
- **20+ ecosystems**: npm, pip, cargo, maven, poetry, gradle, and more
|
|
140
|
+
- **Auto-detection** from lockfiles/manifests
|
|
141
|
+
- **Fast**: Reuses your existing package manager cache
|
|
51
142
|
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
143
|
+
### π‘οΈ Safe by Default
|
|
144
|
+
- **Git branch isolation** - Never touches your main branch
|
|
145
|
+
- **No auto-merge** - Always requires human review
|
|
146
|
+
- **Bounded cost** - `--max-rounds` caps token spend
|
|
147
|
+
- **Bring your own key** - You control costs, nothing phones home
|
|
56
148
|
|
|
57
|
-
|
|
149
|
+
---
|
|
58
150
|
|
|
59
|
-
##
|
|
151
|
+
## π Comparison
|
|
60
152
|
|
|
61
153
|
| Feature | greenbump | Dependabot | Renovate | Migratowl |
|
|
62
154
|
|---------|-----------|------------|----------|-----------|
|
|
63
|
-
| **Auto-fix breaking changes** |
|
|
64
|
-
| **Multi-ecosystem** |
|
|
65
|
-
| **Model flexibility** |
|
|
66
|
-
| **
|
|
155
|
+
| **Auto-fix breaking changes** | β
(LLM edits source) | β (version bump only) | β (version bump only) | β
(LLM + sandbox) |
|
|
156
|
+
| **Multi-ecosystem** | β
(20+ ecosystems) | β
| β
| β (Python only) |
|
|
157
|
+
| **Model flexibility** | β
(Claude, DeepSeek, OpenAI, custom) | N/A | N/A | β (Claude only) |
|
|
158
|
+
| **Static analysis** | β
(TypeScript + ESLint) | β | β | β |
|
|
159
|
+
| **Docker sandbox** | β
(v0.5.0+) | β | β | β
|
|
|
160
|
+
| **Database testing** | β
(Postgres, MySQL, Redis, Mongo) | β | β | β |
|
|
161
|
+
| **Performance tracking** | β
(Build time, bundle size) | β | β | β |
|
|
162
|
+
| **Verification** | Your build + tests + types | GitHub's CI (after PR) | CI after PR | Sandbox + your tests |
|
|
67
163
|
| **Cost model** | Your API key (pay per fix) | Free (GitHub-hosted) | Free (self-host or SaaS) | Your API key |
|
|
68
|
-
| **Batch upgrades** |
|
|
69
|
-
| **Best for** | Fast iteration on minor/patch bumps with simple breaking changes | No-touch version bumps, large fleets | Advanced scheduling, auto-merge rules | High-risk major upgrades needing sandbox isolation |
|
|
164
|
+
| **Batch upgrades** | β
(`--all`) | β
| β
| β |
|
|
70
165
|
|
|
71
|
-
**greenbump is the only tool that combines
|
|
166
|
+
**greenbump is the only tool that combines:**
|
|
167
|
+
- β
Multi-ecosystem support
|
|
168
|
+
- β
Actual code fixing
|
|
169
|
+
- β
Model flexibility
|
|
170
|
+
- β
Production-grade verification (sandbox + databases + performance)
|
|
72
171
|
|
|
73
|
-
|
|
172
|
+
---
|
|
74
173
|
|
|
174
|
+
## π Install / Use
|
|
175
|
+
|
|
176
|
+
### Prerequisites
|
|
75
177
|
```bash
|
|
178
|
+
# Required: Set your API key
|
|
76
179
|
export ANTHROPIC_API_KEY=sk-ant-...
|
|
77
180
|
|
|
78
|
-
#
|
|
181
|
+
# Optional: For sandbox mode (v0.5.0+)
|
|
182
|
+
# Install Docker: https://docs.docker.com/get-docker/
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Basic Usage
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Upgrade a specific dependency to latest
|
|
79
189
|
npx greenbump react
|
|
80
190
|
|
|
81
|
-
#
|
|
191
|
+
# Pin a target version
|
|
82
192
|
npx greenbump eslint --to 9.15.0
|
|
83
193
|
|
|
84
|
-
#
|
|
194
|
+
# Let greenbump pick the most-outdated dependency
|
|
85
195
|
npx greenbump
|
|
196
|
+
|
|
197
|
+
# List outdated dependencies (read-only)
|
|
198
|
+
npx greenbump --scan
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Advanced Usage
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# π³ Sandbox mode: Run tests in Docker container
|
|
205
|
+
npx greenbump react --sandbox
|
|
206
|
+
|
|
207
|
+
# ποΈ With database services
|
|
208
|
+
npx greenbump typeorm --sandbox --services postgres,redis
|
|
209
|
+
|
|
210
|
+
# π Performance regression detection
|
|
211
|
+
npx greenbump webpack --detect-regressions
|
|
212
|
+
|
|
213
|
+
# π₯ Full verification (recommended for production)
|
|
214
|
+
npx greenbump --sandbox --detect-regressions --services postgres
|
|
215
|
+
|
|
216
|
+
# π Batch upgrade all outdated dependencies
|
|
217
|
+
npx greenbump --all
|
|
218
|
+
|
|
219
|
+
# π― Group multiple deps into one PR
|
|
220
|
+
npx greenbump react react-dom --group react-upgrade
|
|
86
221
|
```
|
|
87
222
|
|
|
88
|
-
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## π CLI Options
|
|
226
|
+
|
|
227
|
+
### Core Options
|
|
89
228
|
|
|
90
229
|
| Flag | Description |
|
|
91
230
|
|---|---|
|
|
@@ -93,37 +232,448 @@ npx greenbump
|
|
|
93
232
|
| `--to <version>` | Target version (default: `latest`). |
|
|
94
233
|
| `--ecosystem <id>` | Dependency ecosystem (`npm`, `poetry`, `cargo`, `maven`, β¦). Auto-detected if omitted. |
|
|
95
234
|
| `--list-ecosystems` | List every supported ecosystem and exit. |
|
|
235
|
+
| `--scan` | List outdated dependencies without upgrading (read-only mode). |
|
|
236
|
+
| `--all` | Upgrade every outdated dependency found. |
|
|
237
|
+
| `--group <name>` | Combine multiple deps into one branch/PR. |
|
|
238
|
+
|
|
239
|
+
### Build & Test
|
|
240
|
+
|
|
241
|
+
| Flag | Description |
|
|
242
|
+
|---|---|
|
|
96
243
|
| `--build-cmd <cmd>` | Override the build command, e.g. `"make build"`. |
|
|
97
244
|
| `--test-cmd <cmd>` | Override the test command, e.g. `"make test"`. |
|
|
245
|
+
|
|
246
|
+
### AI Agent
|
|
247
|
+
|
|
248
|
+
| Flag | Description |
|
|
249
|
+
|---|---|
|
|
98
250
|
| `--provider <name>` | Model provider preset (`anthropic`, `openai`, `deepseek`, `groq`, β¦). |
|
|
99
251
|
| `--model <model>` | Model id for the fix agent (default: per provider). |
|
|
252
|
+
| `--list-providers` | List built-in provider presets and exit. |
|
|
100
253
|
| `--max-rounds <n>` | Cap fix-loop rounds / token spend (default: `15`). |
|
|
101
254
|
| `--max-tokens <n>` | Hard cap on total tokens spent; stops and flags for review on overrun. |
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
255
|
+
|
|
256
|
+
### Sandbox & Verification (v0.5.0+)
|
|
257
|
+
|
|
258
|
+
| Flag | Description |
|
|
259
|
+
|---|---|
|
|
260
|
+
| `--sandbox` | Run tests in isolated Docker container (requires Docker). |
|
|
261
|
+
| `--services <list>` | Comma-separated services to start (e.g., `postgres,redis,mongodb`). |
|
|
262
|
+
| `--keep-container` | Keep Docker container after run for debugging. |
|
|
263
|
+
| `--detect-regressions` | Check for performance regressions (build time, bundle size, etc.). |
|
|
264
|
+
|
|
265
|
+
### Cost & Trust (v0.6.0+)
|
|
266
|
+
|
|
267
|
+
| Flag | Description |
|
|
268
|
+
|---|---|
|
|
269
|
+
| `-i`, `--interactive` | Review each AI-proposed edit as a colored diff before it is written. Accept (`y`), reject (`n`), skip (`s`), accept-all (`a`), or hand-edit (`e`). |
|
|
270
|
+
| `--no-free-tiers` | Skip the free fix tiers (codemods / learned patterns / cache) and go straight to the LLM. |
|
|
271
|
+
| `--no-cache` | Disable the changelog / fix cache entirely. |
|
|
272
|
+
| `--no-ast-analysis` | Disable post-fix API surface analysis (removed exports, signature changes, new `any`). |
|
|
273
|
+
| `--list-codemods` | List the builtin free codemods and exit. |
|
|
274
|
+
| `--cache-stats` | Show cache entry count, size, and per-category breakdown. |
|
|
275
|
+
| `--cache-clear [category]` | Clear cached entries (`changelogs`, `llm-fixes`, `patterns`; all if omitted). |
|
|
276
|
+
| `--stats [days]` | Show a usage/cost-savings report for the last N days (default 30) and exit. |
|
|
277
|
+
| `--json` | With `--stats`, print the raw JSON summary instead of the formatted report. |
|
|
278
|
+
|
|
279
|
+
#### How the tiered fix strategy keeps costs down
|
|
280
|
+
|
|
281
|
+
When an upgrade breaks the build, greenbump tries four escalating fix tiers β cheapest first:
|
|
282
|
+
|
|
283
|
+
| Tier | Strategy | Cost |
|
|
284
|
+
|---|---|---|
|
|
285
|
+
| 1 | **Builtin codemods** β regex transforms for well-known breakages (React 18β19, Express 4β5, Zod 3β4, React Router 5β6, Mongoose, Lodash, Node util.\*, β¦) | 0 tokens |
|
|
286
|
+
| 2 | **Learned patterns** β past successful fixes distilled into reusable rules | 0 tokens |
|
|
287
|
+
| 3 | **Cached LLM fixes** β identical failure context replays a previous fix | 0 tokens |
|
|
288
|
+
| 4 | **LLM fix loop** β the full agent, only when tiers 1β3 miss | paid |
|
|
289
|
+
|
|
290
|
+
24 builtin codemods ship out of the box (`greenbump --list-codemods` for the full list) β
|
|
291
|
+
most rewrite code directly; a few match a known-risky breakage (ESLint 9 flat config,
|
|
292
|
+
Axios 1.x, Webpack 5 polyfills, β¦) and print a migration note instead of guessing at an
|
|
293
|
+
edit, so tier 1 never silently misapplies a risky change.
|
|
294
|
+
|
|
295
|
+
Verified end-to-end: Express 4β5 (`app.del`β`app.delete`) and Zod 3β4 (`error.errors`β
|
|
296
|
+
`error.issues`) are both fixed by tier 1 with **0 input / 0 output tokens**. Successful
|
|
297
|
+
LLM fixes are learned into the cache, so repeat failures across projects are free too.
|
|
298
|
+
|
|
299
|
+
#### See what it's actually saving you
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
npx greenbump --stats # last 30 days
|
|
303
|
+
npx greenbump --stats 7 # last 7 days
|
|
304
|
+
npx greenbump --stats --json # machine-readable, for your own dashboards
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Every run appends a line to a local, append-only log (`~/.greenbump/runs.jsonl`,
|
|
308
|
+
override with `GREENBUMP_STATS_DIR`) β no network calls, nothing leaves your machine.
|
|
309
|
+
`--stats` aggregates it into fix-tier breakdown, LLM calls avoided, tokens/cost actually
|
|
310
|
+
spent, and an *estimated* dollar figure saved by the free tiers (clearly labeled as an
|
|
311
|
+
estimate, not a bill).
|
|
312
|
+
|
|
313
|
+
### Git
|
|
314
|
+
|
|
315
|
+
| Flag | Description |
|
|
316
|
+
|---|---|
|
|
105
317
|
| `--no-git` | Operate in place instead of on a new branch. |
|
|
106
318
|
| `--pr-body` | Print a ready-to-paste PR body. |
|
|
319
|
+
| `--report-file <path>` | Write a JSON report of the run(s) to this path. |
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## π Supported Ecosystems
|
|
324
|
+
|
|
325
|
+
greenbump auto-detects the ecosystem from your project's lockfile/manifest. Run `greenbump --list-ecosystems` for the full list.
|
|
326
|
+
|
|
327
|
+
<details>
|
|
328
|
+
<summary><b>β
Verified Ecosystems (20+)</b></summary>
|
|
329
|
+
|
|
330
|
+
**JavaScript/TypeScript:**
|
|
331
|
+
- npm, Yarn, pnpm
|
|
332
|
+
|
|
333
|
+
**Python:**
|
|
334
|
+
- pip, Poetry, uv, Pipenv
|
|
335
|
+
|
|
336
|
+
**Rust:**
|
|
337
|
+
- Cargo
|
|
338
|
+
|
|
339
|
+
**Go:**
|
|
340
|
+
- Go modules
|
|
341
|
+
|
|
342
|
+
**Ruby:**
|
|
343
|
+
- Bundler
|
|
344
|
+
|
|
345
|
+
**PHP:**
|
|
346
|
+
- Composer
|
|
347
|
+
|
|
348
|
+
**Java/Kotlin:**
|
|
349
|
+
- Gradle, Maven
|
|
350
|
+
|
|
351
|
+
**.NET:**
|
|
352
|
+
- NuGet
|
|
353
|
+
|
|
354
|
+
**Elixir:**
|
|
355
|
+
- Mix (Hex)
|
|
356
|
+
|
|
357
|
+
**Dart/Flutter:**
|
|
358
|
+
- Pub
|
|
359
|
+
|
|
360
|
+
**Swift:**
|
|
361
|
+
- Swift Package Manager
|
|
362
|
+
|
|
363
|
+
**Objective-C:**
|
|
364
|
+
- CocoaPods
|
|
365
|
+
|
|
366
|
+
**C/C++:**
|
|
367
|
+
- Conan
|
|
368
|
+
|
|
369
|
+
**Elm:**
|
|
370
|
+
- Elm packages
|
|
371
|
+
|
|
372
|
+
</details>
|
|
373
|
+
|
|
374
|
+
> **Note**: "Verified" means the maintainer manually tested each ecosystem at least once. Parser logic is unit-tested, but CLI tools aren't exercised in CI. Please [report issues](https://github.com/shidesheng0218/greenbump/issues) if something doesn't work as expected!
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## ποΈ Architecture
|
|
379
|
+
|
|
380
|
+
### System Overview
|
|
381
|
+
|
|
382
|
+
```mermaid
|
|
383
|
+
graph TB
|
|
384
|
+
subgraph "User Input"
|
|
385
|
+
CLI[CLI Command<br/>npx greenbump react]
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
subgraph "Detection Layer"
|
|
389
|
+
DETECT[Ecosystem Detector<br/>Auto-detect: npm, pip, cargo, etc.]
|
|
390
|
+
OUTDATED[Dependency Scanner<br/>Find outdated packages]
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
subgraph "Isolation Layer"
|
|
394
|
+
GIT[Git Branch Manager<br/>greenbump/dep-version]
|
|
395
|
+
BASELINE[Baseline Runner<br/>Ensure tests pass before upgrade]
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
subgraph "Upgrade Layer"
|
|
399
|
+
INSTALL[Package Manager<br/>Install new version]
|
|
400
|
+
CHECK[Verification Runner<br/>Run build + tests]
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
subgraph "AI Fix Layer"
|
|
404
|
+
AGENT[LLM Agent<br/>Claude/OpenAI/DeepSeek]
|
|
405
|
+
TOOLS[Agent Tools<br/>read_file, write_file, run_check]
|
|
406
|
+
CHANGELOG[Changelog Fetcher<br/>npm/PyPI/crates.io]
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
subgraph "Verification Layer"
|
|
410
|
+
STATIC[Static Analysis<br/>TypeScript + ESLint]
|
|
411
|
+
CHANGE[Change Detection<br/>Test mods, large deletions]
|
|
412
|
+
GRAPH[Dependency Graph<br/>Multi-stage fixes]
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
subgraph "Sandbox Layer (Optional)"
|
|
416
|
+
DOCKER[Docker Builder<br/>Generate Dockerfile]
|
|
417
|
+
SERVICES[Service Manager<br/>postgres, redis, mongodb]
|
|
418
|
+
CONTAINER[Container Runner<br/>Isolated test execution]
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
subgraph "Performance Layer (Optional)"
|
|
422
|
+
PERF[Performance Tracker<br/>Build time, bundle size]
|
|
423
|
+
COMPARE[Regression Detector<br/>Compare baseline vs current]
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
subgraph "Output"
|
|
427
|
+
COMMIT[Git Commit<br/>Staged changes]
|
|
428
|
+
PR[PR Body Generator<br/>Summary + token usage]
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
CLI --> DETECT
|
|
432
|
+
DETECT --> OUTDATED
|
|
433
|
+
OUTDATED --> GIT
|
|
434
|
+
GIT --> BASELINE
|
|
435
|
+
BASELINE --> INSTALL
|
|
436
|
+
INSTALL --> CHECK
|
|
437
|
+
CHECK -->|Fails| AGENT
|
|
438
|
+
CHECK -->|Passes| STATIC
|
|
439
|
+
|
|
440
|
+
AGENT --> TOOLS
|
|
441
|
+
AGENT --> CHANGELOG
|
|
442
|
+
TOOLS --> CHECK
|
|
443
|
+
|
|
444
|
+
STATIC --> CHANGE
|
|
445
|
+
CHANGE --> GRAPH
|
|
446
|
+
GRAPH --> DOCKER
|
|
447
|
+
|
|
448
|
+
DOCKER --> SERVICES
|
|
449
|
+
SERVICES --> CONTAINER
|
|
450
|
+
CONTAINER --> PERF
|
|
451
|
+
|
|
452
|
+
PERF --> COMPARE
|
|
453
|
+
COMPARE --> COMMIT
|
|
454
|
+
COMMIT --> PR
|
|
455
|
+
|
|
456
|
+
style CLI fill:#a8e6cf
|
|
457
|
+
style AGENT fill:#ffd3b6
|
|
458
|
+
style DOCKER fill:#aad3ea
|
|
459
|
+
style PR fill:#ffaaa5
|
|
460
|
+
```
|
|
107
461
|
|
|
108
|
-
|
|
462
|
+
### Component Breakdown
|
|
463
|
+
|
|
464
|
+
| Layer | Components | Purpose |
|
|
465
|
+
|-------|-----------|---------|
|
|
466
|
+
| **Detection** | Ecosystem Detector, Dependency Scanner | Auto-detect package manager and find outdated deps |
|
|
467
|
+
| **Isolation** | Git Branch Manager, Baseline Runner | Isolate work on feature branch, verify starting state |
|
|
468
|
+
| **Upgrade** | Package Manager, Verification Runner | Install new version and run checks |
|
|
469
|
+
| **AI Fix** | LLM Agent, Tools, Changelog Fetcher | Automatically fix breaking changes with AI |
|
|
470
|
+
| **Verification** | Static Analysis, Change Detection, Dependency Graph | Multi-layer validation (types, lints, suspicious changes) |
|
|
471
|
+
| **Sandbox** | Docker Builder, Service Manager, Container Runner | Optional isolated testing with database services |
|
|
472
|
+
| **Performance** | Performance Tracker, Regression Detector | Optional performance monitoring and regression alerts |
|
|
473
|
+
| **Output** | Git Commit, PR Body Generator | Commit changes and generate PR description |
|
|
474
|
+
|
|
475
|
+
### Data Flow
|
|
476
|
+
|
|
477
|
+
```mermaid
|
|
478
|
+
sequenceDiagram
|
|
479
|
+
participant User
|
|
480
|
+
participant CLI
|
|
481
|
+
participant Detector
|
|
482
|
+
participant Git
|
|
483
|
+
participant PackageMgr as Package Manager
|
|
484
|
+
participant Agent as AI Agent
|
|
485
|
+
participant Verifier
|
|
486
|
+
participant Docker
|
|
487
|
+
participant Output
|
|
488
|
+
|
|
489
|
+
User->>CLI: npx greenbump react
|
|
490
|
+
CLI->>Detector: Detect ecosystem
|
|
491
|
+
Detector-->>CLI: npm detected
|
|
492
|
+
CLI->>Detector: Find outdated packages
|
|
493
|
+
Detector-->>CLI: react 18.3.1 β 19.2.0
|
|
494
|
+
|
|
495
|
+
CLI->>Git: Create branch
|
|
496
|
+
Git-->>CLI: greenbump/react-19.2.0
|
|
497
|
+
|
|
498
|
+
CLI->>PackageMgr: Run baseline tests
|
|
499
|
+
PackageMgr-->>CLI: β Baseline passed
|
|
500
|
+
|
|
501
|
+
CLI->>PackageMgr: Install react@19.2.0
|
|
502
|
+
PackageMgr-->>CLI: β Installed
|
|
503
|
+
|
|
504
|
+
CLI->>PackageMgr: Run tests
|
|
505
|
+
PackageMgr-->>CLI: β Tests failed
|
|
506
|
+
|
|
507
|
+
CLI->>Agent: Fix breaking changes
|
|
508
|
+
loop Fix Loop
|
|
509
|
+
Agent->>Agent: Read error output
|
|
510
|
+
Agent->>Agent: Fetch changelog
|
|
511
|
+
Agent->>Agent: Edit source files
|
|
512
|
+
Agent->>PackageMgr: Re-run tests
|
|
513
|
+
PackageMgr-->>Agent: Test result
|
|
514
|
+
end
|
|
515
|
+
Agent-->>CLI: β Fixed
|
|
516
|
+
|
|
517
|
+
CLI->>Verifier: Run verification
|
|
518
|
+
Verifier->>Verifier: TypeScript check
|
|
519
|
+
Verifier->>Verifier: ESLint
|
|
520
|
+
Verifier->>Verifier: Change detection
|
|
521
|
+
Verifier-->>CLI: β Verified
|
|
522
|
+
|
|
523
|
+
alt Sandbox Mode
|
|
524
|
+
CLI->>Docker: Build container
|
|
525
|
+
Docker->>Docker: Start services (postgres)
|
|
526
|
+
Docker->>Docker: Run tests in container
|
|
527
|
+
Docker-->>CLI: β Container tests passed
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
CLI->>Output: Commit changes
|
|
531
|
+
Output->>Output: Generate PR body
|
|
532
|
+
Output-->>User: β Done: branch ready for PR
|
|
533
|
+
```
|
|
109
534
|
|
|
110
|
-
|
|
535
|
+
---
|
|
536
|
+
|
|
537
|
+
## π How It Works
|
|
538
|
+
|
|
539
|
+
```mermaid
|
|
540
|
+
graph TD
|
|
541
|
+
A[Detect outdated deps] --> B[Create git branch]
|
|
542
|
+
B --> C[Baseline: Run build + tests]
|
|
543
|
+
C --> D{Already broken?}
|
|
544
|
+
D -->|Yes| E[Stop - Fix manually first]
|
|
545
|
+
D -->|No| F[Upgrade dependency]
|
|
546
|
+
F --> G{Build/tests pass?}
|
|
547
|
+
G -->|Yes| H[Clean upgrade β
]
|
|
548
|
+
G -->|No| I[AI Fix Loop]
|
|
549
|
+
I --> J[Read error output]
|
|
550
|
+
J --> K[Edit source code]
|
|
551
|
+
K --> L[Re-run checks]
|
|
552
|
+
L --> M{Fixed?}
|
|
553
|
+
M -->|No| N{Max rounds?}
|
|
554
|
+
N -->|No| I
|
|
555
|
+
N -->|Yes| O[Flag for review β οΈ]
|
|
556
|
+
M -->|Yes| P[Verification Pipeline]
|
|
557
|
+
P --> Q[TypeScript type check]
|
|
558
|
+
Q --> R[ESLint]
|
|
559
|
+
R --> S[Change detection]
|
|
560
|
+
S --> T{Sandbox enabled?}
|
|
561
|
+
T -->|Yes| U[Docker container tests]
|
|
562
|
+
T -->|No| V{Detect regressions?}
|
|
563
|
+
U --> V
|
|
564
|
+
V -->|Yes| W[Performance comparison]
|
|
565
|
+
V -->|No| X[Commit & create PR]
|
|
566
|
+
W --> X
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Step-by-Step
|
|
570
|
+
|
|
571
|
+
1. **π Detect** the ecosystem and outdated dependency (e.g. `npm outdated`, `poetry show -o`, `cargo outdated`)
|
|
572
|
+
2. **πΏ Isolate** on a fresh `greenbump/<dep>-<version>` branch
|
|
573
|
+
3. **π Baseline** β Run your build + tests. If already red, stop (never chase pre-existing failures)
|
|
574
|
+
4. **β¬οΈ Upgrade** the dependency
|
|
575
|
+
5. **π€ Fix Loop** (if broken):
|
|
576
|
+
- AI agent reads failure output
|
|
577
|
+
- Edits source code to fix breaking changes
|
|
578
|
+
- Re-runs checks
|
|
579
|
+
- Repeats until green or max rounds hit
|
|
580
|
+
6. **β
Verification Pipeline** (v0.3.0+):
|
|
581
|
+
- Run TypeScript type check (`tsc --noEmit`)
|
|
582
|
+
- Run ESLint
|
|
583
|
+
- Detect suspicious changes (test modifications, large deletions)
|
|
584
|
+
7. **π³ Sandbox Verification** (v0.5.0+, optional):
|
|
585
|
+
- Build Docker image with clean environment
|
|
586
|
+
- Start database services (if needed)
|
|
587
|
+
- Run tests in isolated container
|
|
588
|
+
8. **π Performance Check** (v0.5.0+, optional):
|
|
589
|
+
- Compare build time, test time, bundle size
|
|
590
|
+
- Flag regressions (>20% slower build, >15% larger bundle)
|
|
591
|
+
9. **πΎ Commit** the changes and output PR body
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
## ποΈ Architecture
|
|
596
|
+
|
|
597
|
+
```mermaid
|
|
598
|
+
flowchart LR
|
|
599
|
+
subgraph CLI["π± greenbump CLI"]
|
|
600
|
+
A1[Ecosystem Adapters]
|
|
601
|
+
A2[Fix-Loop Engine]
|
|
602
|
+
A3[Verification Pipeline]
|
|
603
|
+
A4[Git / PR Layer]
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
subgraph Adapters["π 20+ Ecosystems"]
|
|
607
|
+
E1[npm / yarn / pnpm]
|
|
608
|
+
E2[pip / poetry / uv]
|
|
609
|
+
E3[cargo]
|
|
610
|
+
E4[maven / gradle]
|
|
611
|
+
E5[...more]
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
subgraph Agent["π€ AI Provider"]
|
|
615
|
+
M1[Anthropic]
|
|
616
|
+
M2[OpenAI]
|
|
617
|
+
M3[DeepSeek / Groq / custom]
|
|
618
|
+
end
|
|
619
|
+
|
|
620
|
+
subgraph Sandbox["π³ Optional Sandbox"]
|
|
621
|
+
S1[Docker Container]
|
|
622
|
+
S2[Postgres / MySQL / Redis / Mongo]
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
A1 --- Adapters
|
|
626
|
+
A2 -- "tool calls" --> Agent
|
|
627
|
+
A3 -- "isolated run" --> Sandbox
|
|
628
|
+
A4 --> GH[GitHub / GitLab PR]
|
|
629
|
+
|
|
630
|
+
CLI --> Adapters
|
|
631
|
+
CLI --> Agent
|
|
632
|
+
CLI --> Sandbox
|
|
633
|
+
```
|
|
111
634
|
|
|
112
|
-
|
|
635
|
+
Each layer is independently swappable: pick any ecosystem adapter, any model provider, and
|
|
636
|
+
opt into the sandbox only when you need production-grade isolation.
|
|
113
637
|
|
|
114
|
-
|
|
638
|
+
---
|
|
115
639
|
|
|
116
|
-
|
|
640
|
+
## π¬ GitHub Action
|
|
117
641
|
|
|
118
|
-
|
|
642
|
+
Automate dependency upgrades on a schedule and let greenbump open PRs for you.
|
|
119
643
|
|
|
120
|
-
|
|
644
|
+
### Basic Setup
|
|
645
|
+
|
|
646
|
+
Add `.github/workflows/greenbump.yml`:
|
|
121
647
|
|
|
122
648
|
```yaml
|
|
123
649
|
name: greenbump
|
|
124
650
|
on:
|
|
125
651
|
schedule:
|
|
126
|
-
- cron: "0 6 * * 1" # Mondays
|
|
652
|
+
- cron: "0 6 * * 1" # Mondays at 6am
|
|
653
|
+
workflow_dispatch: # Manual trigger
|
|
654
|
+
permissions:
|
|
655
|
+
contents: write
|
|
656
|
+
pull-requests: write
|
|
657
|
+
jobs:
|
|
658
|
+
bump:
|
|
659
|
+
runs-on: ubuntu-latest
|
|
660
|
+
steps:
|
|
661
|
+
- uses: actions/checkout@v4
|
|
662
|
+
- uses: actions/setup-node@v4
|
|
663
|
+
with: { node-version: 20 }
|
|
664
|
+
- run: npm ci
|
|
665
|
+
- uses: shidesheng0218/greenbump@v0
|
|
666
|
+
with:
|
|
667
|
+
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
### Advanced Setup (with Sandbox + Services)
|
|
671
|
+
|
|
672
|
+
```yaml
|
|
673
|
+
name: greenbump-full-verification
|
|
674
|
+
on:
|
|
675
|
+
schedule:
|
|
676
|
+
- cron: "0 6 * * 1"
|
|
127
677
|
workflow_dispatch:
|
|
128
678
|
permissions:
|
|
129
679
|
contents: write
|
|
@@ -139,27 +689,107 @@ jobs:
|
|
|
139
689
|
- uses: shidesheng0218/greenbump@v0
|
|
140
690
|
with:
|
|
141
691
|
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
692
|
+
sandbox: true
|
|
693
|
+
services: postgres,redis
|
|
694
|
+
detect-regressions: true
|
|
142
695
|
```
|
|
143
696
|
|
|
144
|
-
|
|
697
|
+
Add your API key as the `ANTHROPIC_API_KEY` repository secret:
|
|
698
|
+
1. Go to **Settings** β **Secrets and variables** β **Actions**
|
|
699
|
+
2. Click **New repository secret**
|
|
700
|
+
3. Name: `ANTHROPIC_API_KEY`, Value: your key
|
|
701
|
+
|
|
702
|
+
> **π‘ Tip**: greenbump opens a **draft PR** (flagged for review) when it couldn't fully fix the upgrade or when verification warnings are detected.
|
|
703
|
+
|
|
704
|
+
> **β οΈ CI Triggers**: PRs opened with `GITHUB_TOKEN` don't trigger other workflows (GitHub safeguard). Pass a personal access token as `github-token:` if you need CI to run on greenbump's PRs.
|
|
705
|
+
|
|
706
|
+
Full example with all inputs: [examples/greenbump.yml](examples/greenbump.yml)
|
|
707
|
+
|
|
708
|
+
---
|
|
709
|
+
|
|
710
|
+
## π― When to Use greenbump
|
|
711
|
+
|
|
712
|
+
### β
Great For
|
|
713
|
+
|
|
714
|
+
- **Minor/patch upgrades** with small breaking changes (renamed exports, updated signatures)
|
|
715
|
+
- **Dependency chains** where upgrade path is documented in changelogs
|
|
716
|
+
- **Projects with fast, reliable test suites** that catch regressions
|
|
717
|
+
- **TypeScript projects** where type errors surface most breakage
|
|
718
|
+
- **Well-tested codebases** where "tests pass" means "it works"
|
|
719
|
+
|
|
720
|
+
### β οΈ Use Caution
|
|
721
|
+
|
|
722
|
+
- **Major version jumps** with architectural changes (e.g., React 15 β 16, Angular 2 β 3)
|
|
723
|
+
- **Coordinated multi-dep upgrades** (e.g., all Babel plugins at once)
|
|
724
|
+
- **Security patches** where you need to audit the fix, not just pass tests
|
|
725
|
+
- **Projects without tests** β greenbump can only verify what your suite checks
|
|
726
|
+
|
|
727
|
+
### β Not Recommended
|
|
728
|
+
|
|
729
|
+
- **Framework migrations** that break core assumptions (async/await refactors, build system changes)
|
|
730
|
+
- **Runtime-only failures** your tests don't cover
|
|
731
|
+
- **Flaky test suites** where "tests pass" is unreliable
|
|
732
|
+
|
|
733
|
+
> **π‘ Best Practice**: Use greenbump as a first pass on straightforward upgrades. Always review the PR diff before merging, especially for deps touching security, data handling, or critical paths. Use `--max-rounds` to cap token spend on hard upgrades, and `--scan` to preview what's outdated before committing.
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
## π Security & Privacy
|
|
738
|
+
|
|
739
|
+
- **Bring your own key**: You control costs, nothing phones home
|
|
740
|
+
- **No data collection**: greenbump runs entirely locally or in your CI
|
|
741
|
+
- **Code stays private**: Only sent to your chosen AI provider (Anthropic, OpenAI, etc.)
|
|
742
|
+
- **Safe git workflow**: Works on branches, never auto-merges, never edits your lockfile
|
|
743
|
+
- **Bounded execution**: `--max-rounds` and `--max-tokens` prevent runaway costs
|
|
744
|
+
|
|
745
|
+
---
|
|
746
|
+
|
|
747
|
+
## πΊοΈ Roadmap
|
|
748
|
+
|
|
749
|
+
- [x] **v0.1.0**: Core fix loop + multi-ecosystem support
|
|
750
|
+
- [x] **v0.2.0**: Batch upgrades (`--all`), changelog integration
|
|
751
|
+
- [x] **v0.3.0**: Static analysis (TypeScript + ESLint) + change detection
|
|
752
|
+
- [x] **v0.4.0**: Multi-stage fix strategy + dependency graph analysis
|
|
753
|
+
- [x] **v0.5.0**: Docker sandbox + database testing + performance regression detection
|
|
754
|
+
- [ ] **v0.6.0**: Web UI for monitoring upgrades
|
|
755
|
+
- [ ] **v0.7.0**: Upgrade impact prediction (before running)
|
|
756
|
+
- [ ] **v0.8.0**: Custom verification scripts
|
|
757
|
+
- [ ] **v0.9.0**: Multi-repository orchestration
|
|
758
|
+
- [ ] **v1.0.0**: Production-ready release
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
762
|
+
## π€ Contributing
|
|
763
|
+
|
|
764
|
+
Contributions welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
765
|
+
|
|
766
|
+
**Areas we'd love help with:**
|
|
767
|
+
- π More ecosystem adapters (esp. less common package managers)
|
|
768
|
+
- π§ͺ Integration tests for real-world upgrade scenarios
|
|
769
|
+
- π Documentation improvements
|
|
770
|
+
- π Bug reports with reproducible examples
|
|
771
|
+
|
|
772
|
+
---
|
|
773
|
+
|
|
774
|
+
## π License
|
|
775
|
+
|
|
776
|
+
MIT Β© [shidesheng0218](https://github.com/shidesheng0218)
|
|
145
777
|
|
|
146
|
-
|
|
778
|
+
---
|
|
147
779
|
|
|
148
|
-
|
|
780
|
+
## π¬ Support
|
|
149
781
|
|
|
150
|
-
|
|
782
|
+
- π **Bug reports**: [GitHub Issues](https://github.com/shidesheng0218/greenbump/issues)
|
|
783
|
+
- π‘ **Feature requests**: [GitHub Discussions](https://github.com/shidesheng0218/greenbump/discussions)
|
|
784
|
+
- π **Documentation**: [docs/](docs/)
|
|
785
|
+
- π **Star us**: If greenbump helps you, give us a β on GitHub!
|
|
151
786
|
|
|
152
|
-
|
|
153
|
-
2. **Isolate** on a fresh `greenbump/<dep>-<version>` branch.
|
|
154
|
-
3. **Baseline** β run your build + tests. If they're already red, greenbump stops (so it never chases pre-existing failures).
|
|
155
|
-
4. **Upgrade** the dependency.
|
|
156
|
-
5. **Fix loop** β if the upgrade breaks anything, an AI agent reads the failure, edits the source, and re-runs your checks until they pass or the round cap is hit.
|
|
157
|
-
6. **Commit** the branch and hand you a PR body.
|
|
787
|
+
---
|
|
158
788
|
|
|
159
|
-
|
|
789
|
+
<div align="center">
|
|
160
790
|
|
|
161
|
-
|
|
791
|
+
**Made with β€οΈ by developers, for developers**
|
|
162
792
|
|
|
163
|
-
|
|
793
|
+
[β¬ Back to Top](#-greenbump)
|
|
164
794
|
|
|
165
|
-
|
|
795
|
+
</div>
|