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.
Files changed (53) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/CONTRIBUTING.md +52 -0
  3. package/README.md +40 -0
  4. package/SECURITY.md +38 -0
  5. package/action-dist/index.cjs +241 -1
  6. package/action.yml +1 -1
  7. package/competitive-analysis.md +304 -0
  8. package/dist/cli.js +22 -0
  9. package/dist/cli.js.map +1 -1
  10. package/dist/engine/change-detector.js +152 -0
  11. package/dist/engine/change-detector.js.map +1 -0
  12. package/dist/engine/dep-graph.js +101 -0
  13. package/dist/engine/dep-graph.js.map +1 -0
  14. package/dist/engine/git.js +9 -0
  15. package/dist/engine/git.js.map +1 -1
  16. package/dist/engine/run.js +22 -1
  17. package/dist/engine/run.js.map +1 -1
  18. package/dist/engine/staged-fix.js +108 -0
  19. package/dist/engine/staged-fix.js.map +1 -0
  20. package/dist/engine/stages.js +125 -0
  21. package/dist/engine/stages.js.map +1 -0
  22. package/dist/engine/verify.js +121 -0
  23. package/dist/engine/verify.js.map +1 -0
  24. package/dist/format.js +20 -0
  25. package/dist/format.js.map +1 -1
  26. package/examples/greenbump.yml +37 -0
  27. package/examples/legacy-repo/package.json +12 -0
  28. package/examples/legacy-repo/test.js +17 -0
  29. package/examples/multi-file-repo/models/todo.js +8 -0
  30. package/examples/multi-file-repo/models/user.js +11 -0
  31. package/examples/multi-file-repo/package.json +12 -0
  32. package/examples/multi-file-repo/services/session.js +9 -0
  33. package/examples/multi-file-repo/test.js +19 -0
  34. package/optimization-roadmap.md +772 -0
  35. package/package.json +4 -6
  36. package/dist/agent/fixer.test.js +0 -224
  37. package/dist/agent/fixer.test.js.map +0 -1
  38. package/dist/engine/batch.test.js +0 -59
  39. package/dist/engine/batch.test.js.map +0 -1
  40. package/dist/engine/checks.test.js +0 -92
  41. package/dist/engine/checks.test.js.map +0 -1
  42. package/dist/engine/ecosystems/parsers.test.js +0 -255
  43. package/dist/engine/ecosystems/parsers.test.js.map +0 -1
  44. package/dist/engine/git.test.js +0 -111
  45. package/dist/engine/git.test.js.map +0 -1
  46. package/dist/engine/run.test.js +0 -47
  47. package/dist/engine/run.test.js.map +0 -1
  48. package/dist/engine/workspace.test.js +0 -95
  49. package/dist/engine/workspace.test.js.map +0 -1
  50. package/dist/exitcode.test.js +0 -62
  51. package/dist/exitcode.test.js.map +0 -1
  52. package/dist/report.test.js +0 -56
  53. package/dist/report.test.js.map +0 -1
@@ -1,56 +0,0 @@
1
- import { test } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { readFile } from "node:fs/promises";
4
- import { join } from "node:path";
5
- import { buildReport, writeReport, REPORT_SCHEMA_VERSION } from "./report.js";
6
- import { withTmpDir } from "./test-utils.js";
7
- function summary(overrides = {}) {
8
- return {
9
- dep: "lodash",
10
- from: "4.17.20",
11
- to: "4.17.21",
12
- packageManager: "npm",
13
- baselineGreen: true,
14
- neededFix: false,
15
- fixed: true,
16
- unverifiable: false,
17
- needsReview: false,
18
- committed: true,
19
- rounds: 0,
20
- usage: { inputTokens: 0, outputTokens: 0 },
21
- editedFiles: [],
22
- testFilesTouched: [],
23
- durationMs: 0,
24
- ...overrides,
25
- };
26
- }
27
- test("buildReport: wraps a single run in the same array envelope as a batch", () => {
28
- const envelope = buildReport([summary()]);
29
- assert.equal(envelope.schemaVersion, REPORT_SCHEMA_VERSION);
30
- assert.ok(Array.isArray(envelope.runs));
31
- assert.equal(envelope.runs.length, 1);
32
- assert.ok(typeof envelope.generatedAt === "string" && !Number.isNaN(Date.parse(envelope.generatedAt)));
33
- });
34
- test("buildReport: batch of results, mixing successes and failures, keeps the array shape", () => {
35
- const failure = { dep: "axios", error: "install failed", fatal: true };
36
- const envelope = buildReport([summary({ dep: "lodash" }), failure]);
37
- assert.equal(envelope.runs.length, 2);
38
- });
39
- test("writeReport: round-trips through disk with schema and fields intact", async () => {
40
- await withTmpDir(async (dir) => {
41
- const failure = { dep: "axios", error: "install failed", fatal: true };
42
- const envelope = buildReport([summary({ dep: "lodash", rounds: 3 }), failure]);
43
- const path = join(dir, "report.json");
44
- await writeReport(path, envelope);
45
- const raw = await readFile(path, "utf8");
46
- const parsed = JSON.parse(raw);
47
- assert.equal(parsed.schemaVersion, 1);
48
- assert.equal(parsed.runs.length, 2);
49
- assert.equal(parsed.runs[0].dep, "lodash");
50
- assert.equal(parsed.runs[0].rounds, 3);
51
- assert.equal(parsed.runs[1].dep, "axios");
52
- assert.equal(parsed.runs[1].error, "install failed");
53
- assert.equal(parsed.runs[1].fatal, true);
54
- });
55
- });
56
- //# sourceMappingURL=report.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.test.js","sourceRoot":"","sources":["../src/report.test.ts"],"names":[],"mappings":"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"}