greenbump 0.2.0 → 0.4.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/CHANGELOG.md +93 -0
- package/CONTRIBUTING.md +52 -0
- package/README.md +40 -0
- package/SECURITY.md +38 -0
- package/action-dist/index.cjs +241 -1
- package/action.yml +1 -1
- package/competitive-analysis.md +304 -0
- package/dist/cli.js +22 -0
- package/dist/cli.js.map +1 -1
- package/dist/engine/change-detector.js +152 -0
- package/dist/engine/change-detector.js.map +1 -0
- package/dist/engine/dep-graph.js +101 -0
- package/dist/engine/dep-graph.js.map +1 -0
- package/dist/engine/git.js +9 -0
- package/dist/engine/git.js.map +1 -1
- package/dist/engine/run.js +22 -1
- package/dist/engine/run.js.map +1 -1
- package/dist/engine/staged-fix.js +108 -0
- package/dist/engine/staged-fix.js.map +1 -0
- package/dist/engine/stages.js +125 -0
- package/dist/engine/stages.js.map +1 -0
- package/dist/engine/verify.js +121 -0
- package/dist/engine/verify.js.map +1 -0
- package/dist/format.js +20 -0
- package/dist/format.js.map +1 -1
- package/examples/greenbump.yml +37 -0
- package/examples/legacy-repo/package.json +12 -0
- package/examples/legacy-repo/test.js +17 -0
- package/examples/multi-file-repo/models/todo.js +8 -0
- package/examples/multi-file-repo/models/user.js +11 -0
- package/examples/multi-file-repo/package.json +12 -0
- package/examples/multi-file-repo/services/session.js +9 -0
- package/examples/multi-file-repo/test.js +19 -0
- package/optimization-roadmap.md +772 -0
- package/package.json +4 -6
- package/dist/agent/fixer.test.js +0 -224
- package/dist/agent/fixer.test.js.map +0 -1
- package/dist/engine/batch.test.js +0 -59
- package/dist/engine/batch.test.js.map +0 -1
- package/dist/engine/checks.test.js +0 -92
- package/dist/engine/checks.test.js.map +0 -1
- package/dist/engine/ecosystems/parsers.test.js +0 -255
- package/dist/engine/ecosystems/parsers.test.js.map +0 -1
- package/dist/engine/git.test.js +0 -111
- package/dist/engine/git.test.js.map +0 -1
- package/dist/engine/run.test.js +0 -47
- package/dist/engine/run.test.js.map +0 -1
- package/dist/engine/workspace.test.js +0 -95
- package/dist/engine/workspace.test.js.map +0 -1
- package/dist/exitcode.test.js +0 -62
- package/dist/exitcode.test.js.map +0 -1
- package/dist/report.test.js +0 -56
- package/dist/report.test.js.map +0 -1
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { parseYarnOutdated } from "./yarn.js";
|
|
4
|
-
import { parseGoListOutdated } from "./go.js";
|
|
5
|
-
import { parseComposerOutdated } from "./composer.js";
|
|
6
|
-
import { parsePubOutdated } from "./pub.js";
|
|
7
|
-
import { parseNugetOutdated } from "./nuget.js";
|
|
8
|
-
import { parseCargoToml } from "./cargo.js";
|
|
9
|
-
import { parsePomXml } from "./maven.js";
|
|
10
|
-
import { parseGradleBuildFile } from "./gradle.js";
|
|
11
|
-
import { parseBundlerOutdated } from "./bundler.js";
|
|
12
|
-
import { parsePoetryOutdated } from "./poetry.js";
|
|
13
|
-
import { parseCocoapodsOutdated } from "./cocoapods.js";
|
|
14
|
-
import { parseMixOutdated } from "./mix.js";
|
|
15
|
-
import { parseConanfileTxt } from "./conan.js";
|
|
16
|
-
import { parseNpmOutdated } from "./npm.js";
|
|
17
|
-
import { parsePnpmOutdated } from "./pnpm.js";
|
|
18
|
-
import { parsePipOutdated } from "./pip.js";
|
|
19
|
-
import { parseUvOutdated } from "./uv.js";
|
|
20
|
-
import { parsePipenvOutdated } from "./pipenv.js";
|
|
21
|
-
import { parseElmDirectDeps } from "./elm.js";
|
|
22
|
-
import { parsePackageResolved, parsePackageSwiftDeps } from "./swiftpm.js";
|
|
23
|
-
test("yarn: parses the ndjson table row, skips non-table lines", () => {
|
|
24
|
-
const stdout = [
|
|
25
|
-
JSON.stringify({ type: "info", data: "unrelated" }),
|
|
26
|
-
JSON.stringify({
|
|
27
|
-
type: "table",
|
|
28
|
-
data: {
|
|
29
|
-
head: ["Package", "Current", "Wanted", "Latest", "Package Type", "URL"],
|
|
30
|
-
body: [
|
|
31
|
-
["lodash", "4.17.20", "4.17.21", "4.17.21", "dependencies", ""],
|
|
32
|
-
["left-pad", "1.0.0", "1.0.0", "1.0.0", "dependencies", ""],
|
|
33
|
-
],
|
|
34
|
-
},
|
|
35
|
-
}),
|
|
36
|
-
].join("\n");
|
|
37
|
-
const result = parseYarnOutdated(stdout);
|
|
38
|
-
assert.deepEqual(result, [{ name: "lodash", current: "4.17.20", wanted: "", latest: "4.17.21" }]);
|
|
39
|
-
});
|
|
40
|
-
test("go: parses ndjson module stream, skips main/indirect/no-update", () => {
|
|
41
|
-
const stdout = [
|
|
42
|
-
JSON.stringify({ Path: "example.com/app", Main: true }),
|
|
43
|
-
JSON.stringify({ Path: "example.com/indirect", Version: "v1.0.0", Indirect: true, Update: { Version: "v1.1.0" } }),
|
|
44
|
-
JSON.stringify({ Path: "example.com/nodiff", Version: "v1.0.0", Update: { Version: "v1.0.0" } }),
|
|
45
|
-
JSON.stringify({ Path: "example.com/direct", Version: "v1.0.0", Update: { Version: "v1.2.0" } }),
|
|
46
|
-
].join("\n");
|
|
47
|
-
const result = parseGoListOutdated(stdout);
|
|
48
|
-
assert.deepEqual(result, [{ name: "example.com/direct", current: "v1.0.0", wanted: "", latest: "v1.2.0" }]);
|
|
49
|
-
});
|
|
50
|
-
test("composer: parses `composer outdated --format json`", () => {
|
|
51
|
-
const stdout = JSON.stringify({
|
|
52
|
-
installed: [
|
|
53
|
-
{ name: "monolog/monolog", version: "2.0.0", latest: "3.5.0" },
|
|
54
|
-
{ name: "psr/log", version: "1.1.4", latest: "1.1.4" },
|
|
55
|
-
],
|
|
56
|
-
});
|
|
57
|
-
const result = parseComposerOutdated(stdout);
|
|
58
|
-
assert.deepEqual(result, [{ name: "monolog/monolog", current: "2.0.0", wanted: "", latest: "3.5.0" }]);
|
|
59
|
-
});
|
|
60
|
-
test("pub: parses `dart pub outdated --json`", () => {
|
|
61
|
-
const stdout = JSON.stringify({
|
|
62
|
-
packages: [
|
|
63
|
-
{ package: "http", current: { version: "0.13.0" }, latest: { version: "1.2.0" } },
|
|
64
|
-
{ package: "path", current: { version: "1.8.0" }, latest: { version: "1.8.0" } },
|
|
65
|
-
],
|
|
66
|
-
});
|
|
67
|
-
const result = parsePubOutdated(stdout);
|
|
68
|
-
assert.deepEqual(result, [{ name: "http", current: "0.13.0", wanted: "", latest: "1.2.0" }]);
|
|
69
|
-
});
|
|
70
|
-
test("nuget: parses `dotnet list package --outdated` table", () => {
|
|
71
|
-
const stdout = [
|
|
72
|
-
"Project 'App' has the following updates to its packages",
|
|
73
|
-
" [net8.0]:",
|
|
74
|
-
" Top-level Package Requested Resolved Latest",
|
|
75
|
-
" > Newtonsoft.Json 13.0.1 13.0.1 13.0.3",
|
|
76
|
-
].join("\n");
|
|
77
|
-
const result = parseNugetOutdated(stdout);
|
|
78
|
-
assert.deepEqual(result, [{ name: "Newtonsoft.Json", current: "13.0.1", wanted: "13.0.1", latest: "13.0.3" }]);
|
|
79
|
-
});
|
|
80
|
-
test("cargo: parses [dependencies] section of Cargo.toml", () => {
|
|
81
|
-
const raw = [
|
|
82
|
-
"[package]",
|
|
83
|
-
'name = "app"',
|
|
84
|
-
"",
|
|
85
|
-
"[dependencies]",
|
|
86
|
-
'serde = "1.0"',
|
|
87
|
-
'tokio = "^1.28"',
|
|
88
|
-
"",
|
|
89
|
-
"[dev-dependencies]",
|
|
90
|
-
'criterion = "0.5"',
|
|
91
|
-
].join("\n");
|
|
92
|
-
const result = parseCargoToml(raw);
|
|
93
|
-
assert.deepEqual([...result.entries()], [["serde", "1.0"], ["tokio", "1.28"]]);
|
|
94
|
-
});
|
|
95
|
-
test("maven: parses <dependency> blocks from pom.xml", () => {
|
|
96
|
-
const raw = `<project>
|
|
97
|
-
<dependencies>
|
|
98
|
-
<dependency>
|
|
99
|
-
<groupId>org.apache.commons</groupId>
|
|
100
|
-
<artifactId>commons-lang3</artifactId>
|
|
101
|
-
<version>3.12.0</version>
|
|
102
|
-
</dependency>
|
|
103
|
-
</dependencies>
|
|
104
|
-
</project>`;
|
|
105
|
-
const result = parsePomXml(raw);
|
|
106
|
-
assert.deepEqual(result, [{ name: "org.apache.commons:commons-lang3", version: "3.12.0" }]);
|
|
107
|
-
});
|
|
108
|
-
test("gradle: parses implementation(...) dependency declarations", () => {
|
|
109
|
-
const raw = `dependencies {
|
|
110
|
-
implementation("com.google.guava:guava:31.1-jre")
|
|
111
|
-
testImplementation 'junit:junit:4.13.2'
|
|
112
|
-
}`;
|
|
113
|
-
const result = parseGradleBuildFile(raw);
|
|
114
|
-
assert.deepEqual(result, [
|
|
115
|
-
{ group: "com.google.guava", artifact: "guava", version: "31.1-jre" },
|
|
116
|
-
{ group: "junit", artifact: "junit", version: "4.13.2" },
|
|
117
|
-
]);
|
|
118
|
-
});
|
|
119
|
-
test("bundler: parses `bundle outdated` gem lines", () => {
|
|
120
|
-
const stdout = [
|
|
121
|
-
"Fetching gem metadata...",
|
|
122
|
-
"Gem Current Latest Requested Groups",
|
|
123
|
-
"* rails (newest 7.1.2, installed 7.0.4, requested ~> 7.0) in groups \"default\"",
|
|
124
|
-
"* rake (newest 13.1.0, installed 13.1.0)",
|
|
125
|
-
].join("\n");
|
|
126
|
-
const result = parseBundlerOutdated(stdout);
|
|
127
|
-
assert.deepEqual(result, [{ name: "rails", current: "7.0.4", wanted: "", latest: "7.1.2" }]);
|
|
128
|
-
});
|
|
129
|
-
test("poetry: parses `poetry show -o` plain-text table", () => {
|
|
130
|
-
const stdout = ["requests 2.28.0 2.31.0 HTTP library", "click 8.1.3 8.1.3 CLI toolkit"].join("\n");
|
|
131
|
-
const result = parsePoetryOutdated(stdout);
|
|
132
|
-
assert.deepEqual(result, [{ name: "requests", current: "2.28.0", wanted: "", latest: "2.31.0" }]);
|
|
133
|
-
});
|
|
134
|
-
test("cocoapods: parses `pod outdated` list lines, using the (latest version) suffix", () => {
|
|
135
|
-
// The value after "->" is only what the Podfile's constraint resolves
|
|
136
|
-
// to (often == current for an exact pin, as with AFNetworking below) —
|
|
137
|
-
// the true latest is only in the "(latest version X)" suffix.
|
|
138
|
-
const stdout = [
|
|
139
|
-
"The following pod updates are available:",
|
|
140
|
-
"- AFNetworking 3.2.1 -> 3.2.1 (latest version 4.0.1)",
|
|
141
|
-
"- Alamofire 5.6.0 -> 5.6.0 (latest version 5.6.0)",
|
|
142
|
-
].join("\n");
|
|
143
|
-
const result = parseCocoapodsOutdated(stdout);
|
|
144
|
-
assert.deepEqual(result, [{ name: "AFNetworking", current: "3.2.1", wanted: "", latest: "4.0.1" }]);
|
|
145
|
-
});
|
|
146
|
-
test("mix: parses `mix hex.outdated` table rows, including the Only column", () => {
|
|
147
|
-
// Real `mix hex.outdated` output always has the "Only" column; it's blank
|
|
148
|
-
// for deps with no `only:` restriction (e.g. jason below).
|
|
149
|
-
const stdout = [
|
|
150
|
-
"Dependency Only Current Latest Status ",
|
|
151
|
-
"ex_doc dev 0.29.0 0.40.3 Update not possible ",
|
|
152
|
-
"jason 1.2.0 1.4.5 Update not possible ",
|
|
153
|
-
"",
|
|
154
|
-
"Run `mix hex.outdated APP` to see requirements for a specific dependency.",
|
|
155
|
-
].join("\n");
|
|
156
|
-
const result = parseMixOutdated(stdout);
|
|
157
|
-
assert.deepEqual(result, [
|
|
158
|
-
{ name: "ex_doc", current: "0.29.0", wanted: "", latest: "0.40.3" },
|
|
159
|
-
{ name: "jason", current: "1.2.0", wanted: "", latest: "1.4.5" },
|
|
160
|
-
]);
|
|
161
|
-
});
|
|
162
|
-
test("conan: parses [requires] section of conanfile.txt", () => {
|
|
163
|
-
const raw = ["[requires]", "zlib/1.2.13", "boost/1.83.0", "", "[generators]", "CMakeDeps"].join("\n");
|
|
164
|
-
const result = parseConanfileTxt(raw);
|
|
165
|
-
assert.deepEqual(result, [
|
|
166
|
-
{ name: "zlib", version: "1.2.13" },
|
|
167
|
-
{ name: "boost", version: "1.83.0" },
|
|
168
|
-
]);
|
|
169
|
-
});
|
|
170
|
-
test("npm: parses `npm outdated --json` output, dropping entries already at latest", () => {
|
|
171
|
-
const data = {
|
|
172
|
-
lodash: { current: "4.17.20", latest: "4.17.21" },
|
|
173
|
-
axios: { current: "1.3.0", latest: "1.3.0" },
|
|
174
|
-
};
|
|
175
|
-
const result = parseNpmOutdated(data);
|
|
176
|
-
assert.deepEqual(result, [{ name: "lodash", current: "4.17.20", wanted: "", latest: "4.17.21" }]);
|
|
177
|
-
});
|
|
178
|
-
test("npm: null data (non-JSON stdout) yields empty result", () => {
|
|
179
|
-
assert.deepEqual(parseNpmOutdated(null), []);
|
|
180
|
-
});
|
|
181
|
-
test("pnpm: parses `pnpm outdated --format json`, tolerating missing current/latest", () => {
|
|
182
|
-
const data = {
|
|
183
|
-
lodash: { current: "4.17.20", latest: "4.17.21" },
|
|
184
|
-
// pnpm can omit fields for workspace-linked packages; guard against undefined.
|
|
185
|
-
weird: {},
|
|
186
|
-
};
|
|
187
|
-
const result = parsePnpmOutdated(data);
|
|
188
|
-
assert.deepEqual(result, [{ name: "lodash", current: "4.17.20", wanted: "", latest: "4.17.21" }]);
|
|
189
|
-
});
|
|
190
|
-
test("pnpm: null data yields empty result", () => {
|
|
191
|
-
assert.deepEqual(parsePnpmOutdated(null), []);
|
|
192
|
-
});
|
|
193
|
-
test("pip: parses `pip list --outdated --format json`", () => {
|
|
194
|
-
const data = [
|
|
195
|
-
{ name: "requests", version: "2.28.0", latest_version: "2.31.0" },
|
|
196
|
-
{ name: "flask", version: "2.0.0", latest_version: "2.3.3" },
|
|
197
|
-
];
|
|
198
|
-
const result = parsePipOutdated(data);
|
|
199
|
-
assert.deepEqual(result, [
|
|
200
|
-
{ name: "requests", current: "2.28.0", wanted: "", latest: "2.31.0" },
|
|
201
|
-
{ name: "flask", current: "2.0.0", wanted: "", latest: "2.3.3" },
|
|
202
|
-
]);
|
|
203
|
-
});
|
|
204
|
-
test("pip: null data yields empty result", () => {
|
|
205
|
-
assert.deepEqual(parsePipOutdated(null), []);
|
|
206
|
-
});
|
|
207
|
-
test("uv: parses `uv pip list --outdated --format json` (same shape as pip)", () => {
|
|
208
|
-
const data = [{ name: "requests", version: "2.28.0", latest_version: "2.31.0" }];
|
|
209
|
-
const result = parseUvOutdated(data);
|
|
210
|
-
assert.deepEqual(result, [{ name: "requests", current: "2.28.0", wanted: "", latest: "2.31.0" }]);
|
|
211
|
-
});
|
|
212
|
-
test("uv: null data yields empty result", () => {
|
|
213
|
-
assert.deepEqual(parseUvOutdated(null), []);
|
|
214
|
-
});
|
|
215
|
-
test("pipenv: parses `pipenv run pip list --outdated --format json`", () => {
|
|
216
|
-
const data = [{ name: "django", version: "4.0.0", latest_version: "4.2.5" }];
|
|
217
|
-
const result = parsePipenvOutdated(data);
|
|
218
|
-
assert.deepEqual(result, [{ name: "django", current: "4.0.0", wanted: "", latest: "4.2.5" }]);
|
|
219
|
-
});
|
|
220
|
-
test("pipenv: null data yields empty result", () => {
|
|
221
|
-
assert.deepEqual(parsePipenvOutdated(null), []);
|
|
222
|
-
});
|
|
223
|
-
test("elm: extracts direct dependencies from elm.json, ignoring indirect deps", () => {
|
|
224
|
-
const json = {
|
|
225
|
-
dependencies: {
|
|
226
|
-
direct: { "elm/core": "1.0.5", "elm/json": "1.1.3" },
|
|
227
|
-
indirect: { "elm/bytes": "1.0.8" },
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
assert.deepEqual(parseElmDirectDeps(json), { "elm/core": "1.0.5", "elm/json": "1.1.3" });
|
|
231
|
-
});
|
|
232
|
-
test("elm: missing dependencies field yields empty object", () => {
|
|
233
|
-
assert.deepEqual(parseElmDirectDeps({}), {});
|
|
234
|
-
});
|
|
235
|
-
test("swiftpm: parses Package.resolved pins into a name-to-version map", () => {
|
|
236
|
-
const raw = JSON.stringify({
|
|
237
|
-
pins: [
|
|
238
|
-
{ identity: "swift-log", state: { version: "1.5.3" } },
|
|
239
|
-
{ identity: "no-version-pin", state: {} },
|
|
240
|
-
],
|
|
241
|
-
});
|
|
242
|
-
assert.deepEqual(parsePackageResolved(raw), { "swift-log": "1.5.3" });
|
|
243
|
-
});
|
|
244
|
-
test("swiftpm: extracts .package(url:, from:) declarations and joins with resolved versions", () => {
|
|
245
|
-
const manifest = [
|
|
246
|
-
".package(url: \"https://github.com/apple/swift-log.git\", from: \"1.4.0\")",
|
|
247
|
-
".package(url: \"https://github.com/apple/swift-nio.git\", from: \"2.0.0\")",
|
|
248
|
-
].join("\n");
|
|
249
|
-
const resolved = { "swift-log": "1.5.3" }; // swift-nio has no resolved pin (e.g. not yet fetched)
|
|
250
|
-
const result = parsePackageSwiftDeps(manifest, resolved);
|
|
251
|
-
assert.deepEqual(result, [
|
|
252
|
-
{ name: "swift-log", current: "1.5.3", url: "https://github.com/apple/swift-log.git" },
|
|
253
|
-
]);
|
|
254
|
-
});
|
|
255
|
-
//# sourceMappingURL=parsers.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.test.js","sourceRoot":"","sources":["../../../src/engine/ecosystems/parsers.test.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/git.test.js
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { mkdtemp, writeFile, rm, appendFile } from "node:fs/promises";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
|
-
import { join } from "node:path";
|
|
6
|
-
import { exec } from "./exec.js";
|
|
7
|
-
import { isGitRepo, isTreeClean, currentBranch, createBranch, checkout, commitAll, diffStat, fullDiff, changedFiles, } from "./git.js";
|
|
8
|
-
async function withRepo(fn) {
|
|
9
|
-
const dir = await mkdtemp(join(tmpdir(), "greenbump-git-"));
|
|
10
|
-
try {
|
|
11
|
-
await exec("git", ["init", "-q"], { cwd: dir });
|
|
12
|
-
// Never touch the machine's global git config — set identity locally only.
|
|
13
|
-
await exec("git", ["config", "user.email", "test@greenbump.dev"], { cwd: dir });
|
|
14
|
-
await exec("git", ["config", "user.name", "greenbump test"], { cwd: dir });
|
|
15
|
-
await fn(dir);
|
|
16
|
-
}
|
|
17
|
-
finally {
|
|
18
|
-
await rm(dir, { recursive: true, force: true });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/** Repo with one committed file, so HEAD is a real ref (not "unborn"). */
|
|
22
|
-
async function withInitializedRepo(fn) {
|
|
23
|
-
await withRepo(async (dir) => {
|
|
24
|
-
await writeFile(join(dir, "README.md"), "hello\n", "utf8");
|
|
25
|
-
await exec("git", ["add", "-A"], { cwd: dir });
|
|
26
|
-
await exec("git", ["commit", "-q", "-m", "init"], { cwd: dir });
|
|
27
|
-
await fn(dir);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
test("isGitRepo: true inside a git repo, false in a plain directory", async () => {
|
|
31
|
-
await withRepo(async (dir) => {
|
|
32
|
-
assert.equal(await isGitRepo(dir), true);
|
|
33
|
-
});
|
|
34
|
-
const plain = await mkdtemp(join(tmpdir(), "greenbump-plain-"));
|
|
35
|
-
try {
|
|
36
|
-
assert.equal(await isGitRepo(plain), false);
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
await rm(plain, { recursive: true, force: true });
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
test("isTreeClean: true right after commit, false with an untracked or modified file", async () => {
|
|
43
|
-
await withInitializedRepo(async (dir) => {
|
|
44
|
-
assert.equal(await isTreeClean(dir), true);
|
|
45
|
-
await writeFile(join(dir, "untracked.txt"), "x", "utf8");
|
|
46
|
-
assert.equal(await isTreeClean(dir), false);
|
|
47
|
-
await exec("git", ["add", "-A"], { cwd: dir });
|
|
48
|
-
await exec("git", ["commit", "-q", "-m", "add untracked"], { cwd: dir });
|
|
49
|
-
assert.equal(await isTreeClean(dir), true);
|
|
50
|
-
await appendFile(join(dir, "README.md"), "more\n");
|
|
51
|
-
assert.equal(await isTreeClean(dir), false);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
test("currentBranch + createBranch: creates and switches to a new branch", async () => {
|
|
55
|
-
await withInitializedRepo(async (dir) => {
|
|
56
|
-
const before = await currentBranch(dir);
|
|
57
|
-
assert.ok(before.length > 0);
|
|
58
|
-
await createBranch(dir, "greenbump/lodash-4.17.21");
|
|
59
|
-
const after = await currentBranch(dir);
|
|
60
|
-
assert.equal(after, "greenbump/lodash-4.17.21");
|
|
61
|
-
assert.notEqual(after, before);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
test("checkout: switches HEAD back to an existing branch", async () => {
|
|
65
|
-
await withInitializedRepo(async (dir) => {
|
|
66
|
-
const original = await currentBranch(dir);
|
|
67
|
-
await createBranch(dir, "feature-x");
|
|
68
|
-
assert.equal(await currentBranch(dir), "feature-x");
|
|
69
|
-
await checkout(dir, original);
|
|
70
|
-
assert.equal(await currentBranch(dir), original);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
test("commitAll: stages and commits pending changes, including untracked files", async () => {
|
|
74
|
-
await withInitializedRepo(async (dir) => {
|
|
75
|
-
await writeFile(join(dir, "new-file.txt"), "content", "utf8");
|
|
76
|
-
await appendFile(join(dir, "README.md"), "more\n");
|
|
77
|
-
assert.equal(await isTreeClean(dir), false);
|
|
78
|
-
await commitAll(dir, "chore(deps): bump lodash 4.17.20 → 4.17.21");
|
|
79
|
-
assert.equal(await isTreeClean(dir), true);
|
|
80
|
-
const log = await exec("git", ["log", "-1", "--pretty=%s"], { cwd: dir });
|
|
81
|
-
assert.equal(log.stdout.trim(), "chore(deps): bump lodash 4.17.20 → 4.17.21");
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
test("diffStat + fullDiff + changedFiles: report changes made since a ref", async () => {
|
|
85
|
-
await withInitializedRepo(async (dir) => {
|
|
86
|
-
const base = (await exec("git", ["rev-parse", "HEAD"], { cwd: dir })).stdout.trim();
|
|
87
|
-
await writeFile(join(dir, "src.js"), "export const x = 1;\n", "utf8");
|
|
88
|
-
await appendFile(join(dir, "README.md"), "changed\n");
|
|
89
|
-
await commitAll(dir, "add src.js and edit README");
|
|
90
|
-
const files = await changedFiles(dir, base);
|
|
91
|
-
assert.deepEqual([...files].sort(), ["README.md", "src.js"]);
|
|
92
|
-
const stat = await diffStat(dir, base);
|
|
93
|
-
assert.match(stat, /README\.md/);
|
|
94
|
-
assert.match(stat, /src\.js/);
|
|
95
|
-
const diff = await fullDiff(dir, base);
|
|
96
|
-
assert.match(diff, /\+export const x = 1;/);
|
|
97
|
-
assert.match(diff, /\+changed/);
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
test("commitAll: --no-verify means a failing pre-commit hook does not block the commit", async () => {
|
|
101
|
-
await withInitializedRepo(async (dir) => {
|
|
102
|
-
const hooksDir = join(dir, ".git", "hooks");
|
|
103
|
-
await writeFile(join(hooksDir, "pre-commit"), "#!/bin/sh\nexit 1\n", { mode: 0o755 });
|
|
104
|
-
await writeFile(join(dir, "another.txt"), "x", "utf8");
|
|
105
|
-
await commitAll(dir, "should succeed despite failing hook");
|
|
106
|
-
assert.equal(await isTreeClean(dir), true);
|
|
107
|
-
const log = await exec("git", ["log", "-1", "--pretty=%s"], { cwd: dir });
|
|
108
|
-
assert.equal(log.stdout.trim(), "should succeed despite failing hook");
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
//# sourceMappingURL=git.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.test.js","sourceRoot":"","sources":["../../src/engine/git.test.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/run.test.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { computeNeedsReview } from "./run.js";
|
|
4
|
-
test("computeNeedsReview: unverifiable always needs review, regardless of anything else", () => {
|
|
5
|
-
assert.equal(computeNeedsReview({ unverifiable: true, neededFix: false, fixed: true, testFilesTouched: [] }), true);
|
|
6
|
-
});
|
|
7
|
-
test("computeNeedsReview: clean upgrade (no fix needed) never needs review", () => {
|
|
8
|
-
assert.equal(computeNeedsReview({ unverifiable: false, neededFix: false, fixed: true, testFilesTouched: [] }), false);
|
|
9
|
-
});
|
|
10
|
-
test("computeNeedsReview: fixed with a test file touched needs review", () => {
|
|
11
|
-
assert.equal(computeNeedsReview({
|
|
12
|
-
unverifiable: false,
|
|
13
|
-
neededFix: true,
|
|
14
|
-
fixed: true,
|
|
15
|
-
testFilesTouched: ["src/foo.test.ts"],
|
|
16
|
-
}), true);
|
|
17
|
-
});
|
|
18
|
-
test("computeNeedsReview: fixed with no test file touched does not need review", () => {
|
|
19
|
-
assert.equal(computeNeedsReview({ unverifiable: false, neededFix: true, fixed: true, testFilesTouched: [] }), false);
|
|
20
|
-
});
|
|
21
|
-
test("computeNeedsReview: fix loop failed (unfixed) never needs review — that's exit code 2's job, not 3's", () => {
|
|
22
|
-
assert.equal(computeNeedsReview({
|
|
23
|
-
unverifiable: false,
|
|
24
|
-
neededFix: true,
|
|
25
|
-
fixed: false,
|
|
26
|
-
testFilesTouched: ["src/foo.test.ts"],
|
|
27
|
-
}), false);
|
|
28
|
-
});
|
|
29
|
-
test("computeNeedsReview: budgetExceeded always needs review, even on a clean/no-fix-needed run", () => {
|
|
30
|
-
assert.equal(computeNeedsReview({
|
|
31
|
-
unverifiable: false,
|
|
32
|
-
neededFix: false,
|
|
33
|
-
fixed: true,
|
|
34
|
-
testFilesTouched: [],
|
|
35
|
-
budgetExceeded: true,
|
|
36
|
-
}), true);
|
|
37
|
-
});
|
|
38
|
-
test("computeNeedsReview: budgetExceeded still needs review even when fixed with no test file touched", () => {
|
|
39
|
-
assert.equal(computeNeedsReview({
|
|
40
|
-
unverifiable: false,
|
|
41
|
-
neededFix: true,
|
|
42
|
-
fixed: true,
|
|
43
|
-
testFilesTouched: [],
|
|
44
|
-
budgetExceeded: true,
|
|
45
|
-
}), true);
|
|
46
|
-
});
|
|
47
|
-
//# sourceMappingURL=run.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.test.js","sourceRoot":"","sources":["../../src/engine/run.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,IAAI,CAAC,mFAAmF,EAAE,GAAG,EAAE;IAC7F,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,EAC/F,IAAI,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sEAAsE,EAAE,GAAG,EAAE;IAChF,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,EAChG,KAAK,CACN,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC;QACjB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;KACtC,CAAC,EACF,IAAI,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,EAC/F,KAAK,CACN,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sGAAsG,EAAE,GAAG,EAAE;IAChH,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC;QACjB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,CAAC,iBAAiB,CAAC;KACtC,CAAC,EACF,KAAK,CACN,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,GAAG,EAAE;IACrG,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC;QACjB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE,IAAI;KACrB,CAAC,EACF,IAAI,CACL,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iGAAiG,EAAE,GAAG,EAAE;IAC3G,MAAM,CAAC,KAAK,CACV,kBAAkB,CAAC;QACjB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,EAAE;QACpB,cAAc,EAAE,IAAI;KACrB,CAAC,EACF,IAAI,CACL,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import { withTmpDir } from "../test-utils.js";
|
|
6
|
-
import { detectWorkspaceMembers, resolveWorkspaceTarget, WorkspaceAmbiguityError, WORKSPACE_ROOT, } from "./workspace.js";
|
|
7
|
-
async function writeJson(path, data) {
|
|
8
|
-
await writeFile(path, JSON.stringify(data), "utf8");
|
|
9
|
-
}
|
|
10
|
-
test("detectWorkspaceMembers: non-workspace repo returns []", async () => {
|
|
11
|
-
await withTmpDir(async (dir) => {
|
|
12
|
-
await writeJson(join(dir, "package.json"), { name: "solo" });
|
|
13
|
-
assert.deepEqual(await detectWorkspaceMembers(dir), []);
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
test("detectWorkspaceMembers: npm/yarn `workspaces` array field", async () => {
|
|
17
|
-
await withTmpDir(async (dir) => {
|
|
18
|
-
await writeJson(join(dir, "package.json"), { name: "root", workspaces: ["packages/*"] });
|
|
19
|
-
await mkdir(join(dir, "packages", "api"), { recursive: true });
|
|
20
|
-
await mkdir(join(dir, "packages", "web"), { recursive: true });
|
|
21
|
-
await writeJson(join(dir, "packages", "api", "package.json"), { name: "@x/api" });
|
|
22
|
-
await writeJson(join(dir, "packages", "web", "package.json"), { name: "@x/web" });
|
|
23
|
-
const members = await detectWorkspaceMembers(dir);
|
|
24
|
-
const names = members.map((m) => m.name).sort();
|
|
25
|
-
const paths = members.map((m) => m.path).sort();
|
|
26
|
-
assert.deepEqual(names, ["@x/api", "@x/web"]);
|
|
27
|
-
assert.deepEqual(paths, ["packages/api", "packages/web"]);
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
test("detectWorkspaceMembers: npm `workspaces.packages` object form", async () => {
|
|
31
|
-
await withTmpDir(async (dir) => {
|
|
32
|
-
await writeJson(join(dir, "package.json"), { name: "root", workspaces: { packages: ["apps/*"] } });
|
|
33
|
-
await mkdir(join(dir, "apps", "cli"), { recursive: true });
|
|
34
|
-
await writeJson(join(dir, "apps", "cli", "package.json"), { name: "cli" });
|
|
35
|
-
const members = await detectWorkspaceMembers(dir);
|
|
36
|
-
assert.deepEqual(members, [{ path: "apps/cli", name: "cli" }]);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
test("detectWorkspaceMembers: pnpm-workspace.yaml", async () => {
|
|
40
|
-
await withTmpDir(async (dir) => {
|
|
41
|
-
await writeJson(join(dir, "package.json"), { name: "root" });
|
|
42
|
-
await writeFile(join(dir, "pnpm-workspace.yaml"), 'packages:\n - "packages/*"\n - "tools/*"\n', "utf8");
|
|
43
|
-
await mkdir(join(dir, "packages", "core"), { recursive: true });
|
|
44
|
-
await mkdir(join(dir, "tools", "gen"), { recursive: true });
|
|
45
|
-
await writeJson(join(dir, "packages", "core", "package.json"), { name: "core" });
|
|
46
|
-
await writeJson(join(dir, "tools", "gen", "package.json"), { name: "gen" });
|
|
47
|
-
const members = await detectWorkspaceMembers(dir);
|
|
48
|
-
const paths = members.map((m) => m.path).sort();
|
|
49
|
-
assert.deepEqual(paths, ["packages/core", "tools/gen"]);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
test("detectWorkspaceMembers: glob directories without a package.json are skipped", async () => {
|
|
53
|
-
await withTmpDir(async (dir) => {
|
|
54
|
-
await writeJson(join(dir, "package.json"), { name: "root", workspaces: ["packages/*"] });
|
|
55
|
-
await mkdir(join(dir, "packages", "empty-scaffold"), { recursive: true });
|
|
56
|
-
// no package.json inside "empty-scaffold"
|
|
57
|
-
assert.deepEqual(await detectWorkspaceMembers(dir), []);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
function outdated(name, current, latest, workspacePath) {
|
|
61
|
-
return { name, current, wanted: "", latest, workspacePath };
|
|
62
|
-
}
|
|
63
|
-
test("resolveWorkspaceTarget: unambiguous single match resolves directly", () => {
|
|
64
|
-
const candidates = [outdated("lodash", "4.17.20", "4.17.21", WORKSPACE_ROOT)];
|
|
65
|
-
const result = resolveWorkspaceTarget("lodash", candidates);
|
|
66
|
-
assert.equal(result?.workspacePath, WORKSPACE_ROOT);
|
|
67
|
-
});
|
|
68
|
-
test("resolveWorkspaceTarget: same version across packages is not ambiguous", () => {
|
|
69
|
-
const candidates = [
|
|
70
|
-
outdated("lodash", "4.17.20", "4.17.21", "packages/api"),
|
|
71
|
-
outdated("lodash", "4.17.20", "4.17.21", "packages/web"),
|
|
72
|
-
];
|
|
73
|
-
// Same current version everywhere — no real ambiguity, first match wins.
|
|
74
|
-
assert.doesNotThrow(() => resolveWorkspaceTarget("lodash", candidates));
|
|
75
|
-
});
|
|
76
|
-
test("resolveWorkspaceTarget: different versions across packages throws WorkspaceAmbiguityError", () => {
|
|
77
|
-
const candidates = [
|
|
78
|
-
outdated("lodash", "4.17.15", "4.17.21", "packages/api"),
|
|
79
|
-
outdated("lodash", "4.17.20", "4.17.21", "packages/web"),
|
|
80
|
-
];
|
|
81
|
-
assert.throws(() => resolveWorkspaceTarget("lodash", candidates), WorkspaceAmbiguityError);
|
|
82
|
-
});
|
|
83
|
-
test("resolveWorkspaceTarget: --workspace disambiguates an otherwise-ambiguous name", () => {
|
|
84
|
-
const candidates = [
|
|
85
|
-
outdated("lodash", "4.17.15", "4.17.21", "packages/api"),
|
|
86
|
-
outdated("lodash", "4.17.20", "4.17.21", "packages/web"),
|
|
87
|
-
];
|
|
88
|
-
const result = resolveWorkspaceTarget("lodash", candidates, "packages/web");
|
|
89
|
-
assert.equal(result?.current, "4.17.20");
|
|
90
|
-
});
|
|
91
|
-
test("resolveWorkspaceTarget: no match returns undefined", () => {
|
|
92
|
-
const candidates = [outdated("lodash", "4.17.20", "4.17.21", WORKSPACE_ROOT)];
|
|
93
|
-
assert.equal(resolveWorkspaceTarget("react", candidates), undefined);
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=workspace.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.test.js","sourceRoot":"","sources":["../../src/engine/workspace.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,GAEf,MAAM,gBAAgB,CAAC;AAExB,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,IAAa;IAClD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;IACvE,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,MAAM,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;IAC3E,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACzF,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClF,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElF,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACnG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3E,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC7D,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,SAAS,CACb,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,EAChC,8CAA8C,EAC9C,MAAM,CACP,CAAC;QACF,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjF,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6EAA6E,EAAE,KAAK,IAAI,EAAE;IAC7F,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACzF,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,0CAA0C;QAE1C,MAAM,CAAC,SAAS,CAAC,MAAM,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,MAAc,EAAE,aAAqB;IACpF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAC9D,CAAC;AAED,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAC9E,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE;IACjF,MAAM,UAAU,GAAG;QACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;KACzD,CAAC;IACF,yEAAyE;IACzE,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,GAAG,EAAE;IACrG,MAAM,UAAU,GAAG;QACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;KACzD,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAC7F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+EAA+E,EAAE,GAAG,EAAE;IACzF,MAAM,UAAU,GAAG;QACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;QACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC;KACzD,CAAC;IACF,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9E,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC"}
|
package/dist/exitcode.test.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { exitCodeFor, overallExitCode } from "./exitcode.js";
|
|
4
|
-
function summary(overrides) {
|
|
5
|
-
return {
|
|
6
|
-
dep: "lodash",
|
|
7
|
-
from: "4.17.20",
|
|
8
|
-
to: "4.17.21",
|
|
9
|
-
packageManager: "npm",
|
|
10
|
-
baselineGreen: true,
|
|
11
|
-
neededFix: false,
|
|
12
|
-
fixed: true,
|
|
13
|
-
unverifiable: false,
|
|
14
|
-
needsReview: false,
|
|
15
|
-
committed: true,
|
|
16
|
-
rounds: 0,
|
|
17
|
-
usage: { inputTokens: 0, outputTokens: 0 },
|
|
18
|
-
editedFiles: [],
|
|
19
|
-
testFilesTouched: [],
|
|
20
|
-
durationMs: 0,
|
|
21
|
-
...overrides,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
test("exitCodeFor: clean success is 0", () => {
|
|
25
|
-
assert.equal(exitCodeFor(summary({})), 0);
|
|
26
|
-
});
|
|
27
|
-
test("exitCodeFor: unfixed after a fix attempt is 2", () => {
|
|
28
|
-
assert.equal(exitCodeFor(summary({ neededFix: true, fixed: false })), 2);
|
|
29
|
-
});
|
|
30
|
-
test("exitCodeFor: needsReview (test file touched) is 3", () => {
|
|
31
|
-
assert.equal(exitCodeFor(summary({ neededFix: true, fixed: true, needsReview: true })), 3);
|
|
32
|
-
});
|
|
33
|
-
test("exitCodeFor: needsReview from unverifiable is 3", () => {
|
|
34
|
-
assert.equal(exitCodeFor(summary({ unverifiable: true, needsReview: true })), 3);
|
|
35
|
-
});
|
|
36
|
-
test("exitCodeFor: unfixed (2) takes priority over needsReview when both would apply", () => {
|
|
37
|
-
// neededFix && !fixed always wins — needsReview never overloads that state.
|
|
38
|
-
assert.equal(exitCodeFor(summary({ neededFix: true, fixed: false, needsReview: true })), 2);
|
|
39
|
-
});
|
|
40
|
-
test("overallExitCode: a hard failure (1) outranks everything else", () => {
|
|
41
|
-
const failure = { dep: "axios", error: "boom", fatal: true };
|
|
42
|
-
const items = [summary({}), summary({ neededFix: true, fixed: false }), failure];
|
|
43
|
-
assert.equal(overallExitCode(items), 1);
|
|
44
|
-
});
|
|
45
|
-
test("overallExitCode: unfixed (2) outranks needsReview (3) when no hard failure", () => {
|
|
46
|
-
const items = [
|
|
47
|
-
summary({ neededFix: true, fixed: true, needsReview: true }),
|
|
48
|
-
summary({ neededFix: true, fixed: false }),
|
|
49
|
-
];
|
|
50
|
-
assert.equal(overallExitCode(items), 2);
|
|
51
|
-
});
|
|
52
|
-
test("overallExitCode: needsReview (3) outranks clean success (0)", () => {
|
|
53
|
-
const items = [summary({}), summary({ unverifiable: true, needsReview: true })];
|
|
54
|
-
assert.equal(overallExitCode(items), 3);
|
|
55
|
-
});
|
|
56
|
-
test("overallExitCode: all clean is 0", () => {
|
|
57
|
-
assert.equal(overallExitCode([summary({}), summary({})]), 0);
|
|
58
|
-
});
|
|
59
|
-
test("overallExitCode: empty batch is 0", () => {
|
|
60
|
-
assert.equal(overallExitCode([]), 0);
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=exitcode.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exitcode.test.js","sourceRoot":"","sources":["../src/exitcode.test.ts"],"names":[],"mappings":"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"}
|