@heyditto/cli 2.18.0 → 2.20.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/dist/api.d.ts +42 -0
- package/dist/api.js +27 -0
- package/dist/api.js.map +1 -1
- package/dist/app-commands.d.ts +21 -1
- package/dist/app-commands.js +191 -1
- package/dist/app-commands.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +1 -0
- package/dist/commands.js +25 -0
- package/dist/commands.js.map +1 -1
- package/dist/review-commands.d.ts +57 -0
- package/dist/review-commands.js +150 -0
- package/dist/review-commands.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { apiFetch, resolveCompany } from "./api.js";
|
|
2
|
+
import { readStoredAuth } from "./store.js";
|
|
3
|
+
/** The server's bounds (backend reviewLimits). */
|
|
4
|
+
const MIN_MAX_MINUTES = 5;
|
|
5
|
+
const MAX_MAX_MINUTES = 45;
|
|
6
|
+
const MAX_BUDGET_CENTS = 10_000;
|
|
7
|
+
function isJSON(options) {
|
|
8
|
+
return options.output === "json" || options.output === "raw";
|
|
9
|
+
}
|
|
10
|
+
async function resolveScope(options) {
|
|
11
|
+
const wanted = options.org?.trim() || (await readStoredAuth())?.defaultCompany;
|
|
12
|
+
if (!wanted)
|
|
13
|
+
return undefined;
|
|
14
|
+
return resolveCompany(wanted);
|
|
15
|
+
}
|
|
16
|
+
function scopeQuery(company) {
|
|
17
|
+
return company ? `?company=${encodeURIComponent(company.id)}` : "";
|
|
18
|
+
}
|
|
19
|
+
export async function listReviewRepositories(company) {
|
|
20
|
+
const out = await apiFetch(`/api/v5/review${scopeQuery(company)}`);
|
|
21
|
+
return out.repositories ?? [];
|
|
22
|
+
}
|
|
23
|
+
function money(cents) {
|
|
24
|
+
return `$${(cents / 100).toFixed(2)}`;
|
|
25
|
+
}
|
|
26
|
+
export async function cmdReviewRepos(options) {
|
|
27
|
+
const company = await resolveScope(options);
|
|
28
|
+
const repos = await listReviewRepositories(company);
|
|
29
|
+
if (isJSON(options)) {
|
|
30
|
+
process.stdout.write(`${JSON.stringify({ repositories: repos }, null, 2)}\n`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (repos.length === 0) {
|
|
34
|
+
process.stdout.write(`No repositories are set up for Ditto Review${company ? ` in ${company.slug}` : ""}.\n`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const rows = repos.map((r) => [
|
|
38
|
+
r.fullName,
|
|
39
|
+
r.enabled ? "on" : "off",
|
|
40
|
+
`${r.maxMinutes} min`,
|
|
41
|
+
money(r.budgetCents),
|
|
42
|
+
r.mode,
|
|
43
|
+
r.trigger,
|
|
44
|
+
]);
|
|
45
|
+
const header = ["REPOSITORY", "ENABLED", "TIME LIMIT", "BUDGET/RUN", "MODE", "TRIGGER"];
|
|
46
|
+
const widths = header.map((h, i) => Math.max(h.length, ...rows.map((row) => row[i].length)));
|
|
47
|
+
for (const row of [header, ...rows]) {
|
|
48
|
+
process.stdout.write(`${row.map((c, i) => (i === row.length - 1 ? c : c.padEnd(widths[i]))).join(" ")}\n`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** The PUT body that saves `repo` exactly as read, guarded by its revision. */
|
|
52
|
+
export function reviewRepositoryInput(repo) {
|
|
53
|
+
return {
|
|
54
|
+
ifRevision: repo.revision,
|
|
55
|
+
fullName: repo.fullName,
|
|
56
|
+
endpointId: repo.endpointId,
|
|
57
|
+
enabled: repo.enabled,
|
|
58
|
+
verify: repo.verify,
|
|
59
|
+
reviewDrafts: repo.reviewDrafts,
|
|
60
|
+
postSummary: repo.postSummary,
|
|
61
|
+
autofixCi: repo.autofixCi,
|
|
62
|
+
allowFixCommand: repo.allowFixCommand,
|
|
63
|
+
resolveFixedThreads: repo.resolveFixedThreads,
|
|
64
|
+
reviewVerdicts: repo.reviewVerdicts,
|
|
65
|
+
blockingSeverity: repo.blockingSeverity,
|
|
66
|
+
instructions: repo.instructions,
|
|
67
|
+
mode: repo.mode,
|
|
68
|
+
trigger: repo.trigger,
|
|
69
|
+
minSeverity: repo.minSeverity,
|
|
70
|
+
pathFilters: repo.pathFilters ?? [],
|
|
71
|
+
pathInstructions: repo.pathInstructions ?? [],
|
|
72
|
+
budgetCents: repo.budgetCents,
|
|
73
|
+
maxMinutes: repo.maxMinutes,
|
|
74
|
+
minConfidence: repo.minConfidence,
|
|
75
|
+
maxComments: repo.maxComments,
|
|
76
|
+
autofixMaxPushes: repo.autofixMaxPushes,
|
|
77
|
+
monthlyBudgetUsd: repo.monthlyBudgetUsd,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function intFlag(flag, value, min, max) {
|
|
81
|
+
const n = Number(value);
|
|
82
|
+
if (!Number.isInteger(n) || n < min || n > max)
|
|
83
|
+
throw new Error(`${flag} must be a whole number from ${min} to ${max}`);
|
|
84
|
+
return n;
|
|
85
|
+
}
|
|
86
|
+
export async function cmdReviewSet(fullName, options) {
|
|
87
|
+
const changes = {};
|
|
88
|
+
if (options.maxMinutes !== undefined)
|
|
89
|
+
changes.maxMinutes = intFlag("--max-minutes", options.maxMinutes, MIN_MAX_MINUTES, MAX_MAX_MINUTES);
|
|
90
|
+
if (options.budgetCents !== undefined)
|
|
91
|
+
changes.budgetCents = intFlag("--budget-cents", options.budgetCents, 1, MAX_BUDGET_CENTS);
|
|
92
|
+
if (options.enabled !== undefined) {
|
|
93
|
+
if (options.enabled !== "on" && options.enabled !== "off")
|
|
94
|
+
throw new Error("--enabled must be on or off");
|
|
95
|
+
changes.enabled = options.enabled === "on";
|
|
96
|
+
}
|
|
97
|
+
if (Object.keys(changes).length === 0) {
|
|
98
|
+
throw new Error("nothing to change; pass at least one --flag (see `heyditto review set --help`)");
|
|
99
|
+
}
|
|
100
|
+
const company = await resolveScope(options);
|
|
101
|
+
const repos = await listReviewRepositories(company);
|
|
102
|
+
const repo = repos.find((r) => r.fullName.toLowerCase() === fullName.trim().toLowerCase());
|
|
103
|
+
if (!repo) {
|
|
104
|
+
const known = repos.map((r) => r.fullName).join(", ");
|
|
105
|
+
throw new Error(`${fullName} is not set up for Ditto Review${company ? ` in ${company.slug}` : " in your personal workspace (pass --org?)"}.` +
|
|
106
|
+
(known ? `\n\nRepositories here: ${known}` : ""));
|
|
107
|
+
}
|
|
108
|
+
const saved = await apiFetch(`/api/v5/review/repositories${scopeQuery(company)}`, {
|
|
109
|
+
method: "PUT",
|
|
110
|
+
body: { ...reviewRepositoryInput(repo), ...changes },
|
|
111
|
+
});
|
|
112
|
+
if (isJSON(options)) {
|
|
113
|
+
process.stdout.write(`${JSON.stringify(saved, null, 2)}\n`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const after = { ...repo, ...changes };
|
|
117
|
+
const lines = [`Saved ${repo.fullName}:`];
|
|
118
|
+
if ("maxMinutes" in changes)
|
|
119
|
+
lines.push(` time limit ${repo.maxMinutes} → ${after.maxMinutes} min`);
|
|
120
|
+
if ("budgetCents" in changes)
|
|
121
|
+
lines.push(` budget/run ${money(repo.budgetCents)} → ${money(after.budgetCents)}`);
|
|
122
|
+
if ("enabled" in changes)
|
|
123
|
+
lines.push(` enabled ${repo.enabled ? "on" : "off"} → ${after.enabled ? "on" : "off"}`);
|
|
124
|
+
process.stdout.write(`${lines.join("\n")}\n`);
|
|
125
|
+
}
|
|
126
|
+
export function registerReviewCommands(program, addExamples, outputOption, orgOption) {
|
|
127
|
+
const review = program
|
|
128
|
+
.command("review")
|
|
129
|
+
.description("Ditto Review repositories and their settings")
|
|
130
|
+
.summary("Ditto Review settings");
|
|
131
|
+
addExamples(review
|
|
132
|
+
.command("repos", { isDefault: true })
|
|
133
|
+
.description("list the repositories set up for Ditto Review")
|
|
134
|
+
.addOption(orgOption())
|
|
135
|
+
.addOption(outputOption())
|
|
136
|
+
.action(cmdReviewRepos), ` heyditto review repos --org omni-aura
|
|
137
|
+
heyditto review repos --output json`);
|
|
138
|
+
addExamples(review
|
|
139
|
+
.command("set")
|
|
140
|
+
.description("change a repository's review settings (the rest are kept as saved)")
|
|
141
|
+
.argument("<repository>", "owner/name")
|
|
142
|
+
.option("--max-minutes <n>", `time limit of one review (${MIN_MAX_MINUTES}-${MAX_MAX_MINUTES})`)
|
|
143
|
+
.option("--budget-cents <n>", "spend limit of one review, in cents (1-10000)")
|
|
144
|
+
.option("--enabled <on|off>", "review this repository's pull requests")
|
|
145
|
+
.addOption(orgOption())
|
|
146
|
+
.addOption(outputOption())
|
|
147
|
+
.action(cmdReviewSet), ` heyditto review set ditto-assistant/console --max-minutes 20 --org omni-aura
|
|
148
|
+
heyditto review set acme/api --budget-cents 300 --enabled on`);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=review-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-commands.js","sourceRoot":"","sources":["../src/review-commands.ts"],"names":[],"mappings":"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"}
|