gcb-host 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 +35 -0
- package/lib/broker.d.ts.map +1 -1
- package/lib/broker.js +7 -1
- package/lib/broker.js.map +1 -1
- package/lib/commands/doctor.d.ts +17 -0
- package/lib/commands/doctor.d.ts.map +1 -0
- package/lib/commands/doctor.js +238 -0
- package/lib/commands/doctor.js.map +1 -0
- package/lib/commands/host.d.ts +33 -0
- package/lib/commands/host.d.ts.map +1 -0
- package/lib/commands/host.js +522 -0
- package/lib/commands/host.js.map +1 -0
- package/lib/daemon.js +1 -1
- package/lib/daemon.js.map +1 -1
- package/lib/gh.d.ts.map +1 -1
- package/lib/gh.js +8 -1
- package/lib/gh.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -4
- package/lib/index.js.map +1 -1
- package/package.json +2 -2
- package/lib/commands/host-opener.d.ts +0 -33
- package/lib/commands/host-opener.d.ts.map +0 -1
- package/lib/commands/host-opener.js +0 -343
- package/lib/commands/host-opener.js.map +0 -1
|
@@ -0,0 +1,522 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `host` — the host broker for typed person actions: create, review, reply, edit issues and pull
|
|
3
|
+
* requests, and fork with the gh account each request names.
|
|
4
|
+
*
|
|
5
|
+
* This runs on the host, beside the checkout the container also sees, and it does exactly one thing:
|
|
6
|
+
* it turns a request file into a pull request, issue, review, reply, issue edit/comment, pull
|
|
7
|
+
* request edit or fork, using the gh account the request names. That is the whole point — content authored by a person is what automated reviewers will
|
|
8
|
+
* actually review, and the app cannot be that person.
|
|
9
|
+
*
|
|
10
|
+
* It has no other power. It cannot push, merge, close or read anything, and it never runs a shell: the
|
|
11
|
+
* program it calls is configuration, and it is called with an argument list built here.
|
|
12
|
+
*/
|
|
13
|
+
import { execFile } from 'node:child_process';
|
|
14
|
+
import { existsSync, mkdtempSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
15
|
+
import { homedir, tmpdir } from 'node:os';
|
|
16
|
+
import { join, resolve } from 'node:path';
|
|
17
|
+
import { promisify } from 'node:util';
|
|
18
|
+
import { channelDir, clearOpener, discoverCheckouts, findGitDir, listRequests, readOpener, claimRequest, removeRequest, requestProblems, writeOpener, writeResult, HOST, REPOSITORY, } from 'gcb-core';
|
|
19
|
+
import { fail, listFlag, parseArgs, say, warn } from 'gcb-core';
|
|
20
|
+
import { applyProxyChoice, parseProxy } from '../http.js';
|
|
21
|
+
import { loadConfig, resolveConfigPath } from '../config.js';
|
|
22
|
+
import { hostConfig, repoAllowed } from '../policy.js';
|
|
23
|
+
const run = promisify(execFile);
|
|
24
|
+
/** How long one create, review, reply, edit or fork program may take. */
|
|
25
|
+
const CREATE_TIMEOUT_MS = 120_000;
|
|
26
|
+
/** Usage text for `host`. */
|
|
27
|
+
export const HOST_BROKER_USAGE = `Usage: gcb host [options]
|
|
28
|
+
|
|
29
|
+
Run on the host, once, beside the trees the container also sees. It finds the checkouts under the
|
|
30
|
+
roots it is given — ones created later included — and fulfils their typed requests to create a pull
|
|
31
|
+
request, issue or fork, reply to a review comment, submit a review, or edit an issue or pull
|
|
32
|
+
request, with the gh account each request names. The result is authored by a person rather than by the app's bot. It cannot push, merge or close anything.
|
|
33
|
+
|
|
34
|
+
--root <dir> A tree to serve, repeatable (default: $HOME)
|
|
35
|
+
--depth <n> How far below a root to look for checkouts (default: 4)
|
|
36
|
+
--repo <path> Serve this one checkout instead of discovering any
|
|
37
|
+
--config <path> Broker config whose allowlist fork, reply and explicit-repository requests use
|
|
38
|
+
(default: $GIT_BROKER_CONFIG, else ./broker.config.yml)
|
|
39
|
+
--command <path> The program that creates, replies or forks
|
|
40
|
+
(default: $GIT_BROKER_PR_COMMAND, else gh)
|
|
41
|
+
--arg <token> An extra argument for that program, before the subcommand (repeatable)
|
|
42
|
+
--interval <seconds> How often to look for requests (default: 5)
|
|
43
|
+
--once Fulfil what is waiting, then exit
|
|
44
|
+
-h, --help Show this help
|
|
45
|
+
|
|
46
|
+
The container asks for this by passing --as-user to \`pr\`. Requests are files under
|
|
47
|
+
<git dir>/gcb/pr-requests, which is shared with the container and untracked by git
|
|
48
|
+
— so the paths on the two sides never have to match: each writes and reads its own view of the same
|
|
49
|
+
directory, and only the roots this process scans are host-side paths.
|
|
50
|
+
`;
|
|
51
|
+
/**
|
|
52
|
+
* Read a pull request's number and URL out of a program's output.
|
|
53
|
+
*
|
|
54
|
+
* `gh pr create` prints the URL, and so does anything that behaves like it. Nothing else is trusted:
|
|
55
|
+
* without a URL in the output the host broker reports a failure rather than guessing.
|
|
56
|
+
*
|
|
57
|
+
* @param output - the program's standard output.
|
|
58
|
+
* @returns the number and URL, or `undefined`.
|
|
59
|
+
*/
|
|
60
|
+
export function pullRequestUrl(output) {
|
|
61
|
+
const match = /https:\/\/[^\s]+\/pull\/(\d+)/.exec(output);
|
|
62
|
+
const digits = match?.[1];
|
|
63
|
+
if (!match || digits === undefined)
|
|
64
|
+
return undefined;
|
|
65
|
+
return { number: Number(digits), url: match[0] };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Pull the issue number and URL out of the program's output.
|
|
69
|
+
*
|
|
70
|
+
* @param output - the program's standard output.
|
|
71
|
+
* @returns the number and URL, or `undefined`.
|
|
72
|
+
*/
|
|
73
|
+
export function issueUrl(output) {
|
|
74
|
+
const match = /https:\/\/[^\s]+\/issues\/(\d+)/.exec(output);
|
|
75
|
+
const digits = match?.[1];
|
|
76
|
+
if (!match || digits === undefined)
|
|
77
|
+
return undefined;
|
|
78
|
+
return { number: Number(digits), url: match[0] };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run the `host` command.
|
|
82
|
+
*
|
|
83
|
+
* @param argv - arguments after the command name.
|
|
84
|
+
* @returns the process exit code.
|
|
85
|
+
*/
|
|
86
|
+
export async function runHostBroker(argv) {
|
|
87
|
+
const args = parseArgs(argv, { booleans: ['help', 'once'] });
|
|
88
|
+
if (args.has('help') || args.has('h')) {
|
|
89
|
+
say(HOST_BROKER_USAGE);
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
const explicit = args.value('repo');
|
|
93
|
+
const single = explicit === undefined ? undefined : resolve(explicit);
|
|
94
|
+
const roots = listFlag(args, 'root');
|
|
95
|
+
const scanned = roots.length > 0 ? roots.map((root) => resolve(root)) : [homedir()];
|
|
96
|
+
const depth = Number(args.value('depth') ?? '4');
|
|
97
|
+
const command = args.value('command') ?? process.env['GIT_BROKER_PR_COMMAND'] ?? 'gh';
|
|
98
|
+
const configPath = args.value('config');
|
|
99
|
+
let config;
|
|
100
|
+
/** Whether the broker config allowlist permits this host/repository for a fork, reply or explicit repository. */
|
|
101
|
+
const allowed = (host, repo) => {
|
|
102
|
+
if (config === undefined) {
|
|
103
|
+
try {
|
|
104
|
+
config = loadConfig(resolveConfigPath(configPath));
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw new Error(`a fork, reply or explicit repository needs the broker config allowlist: ${error.message}; pass --config or set GIT_BROKER_CONFIG`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const block = hostConfig(config, host);
|
|
111
|
+
return block !== null && repoAllowed(block.allow, repo);
|
|
112
|
+
};
|
|
113
|
+
const extra = listFlag(args, 'arg');
|
|
114
|
+
const interval = Number(args.value('interval') ?? '5');
|
|
115
|
+
if (!Number.isFinite(interval) || interval < 1) {
|
|
116
|
+
fail(`--interval must be at least one second, got ${JSON.stringify(args.value('interval'))}`);
|
|
117
|
+
}
|
|
118
|
+
if (!Number.isInteger(depth) || depth < 0) {
|
|
119
|
+
fail(`--depth must be a whole number of levels, got ${JSON.stringify(args.value('depth'))}`);
|
|
120
|
+
}
|
|
121
|
+
/** The checkouts to serve: one named checkout, or everything under the roots. */
|
|
122
|
+
const targets = () => {
|
|
123
|
+
if (single === undefined)
|
|
124
|
+
return scanned.flatMap((root) => discoverCheckouts(root, depth));
|
|
125
|
+
const gitDir = findGitDir(single);
|
|
126
|
+
if (gitDir === undefined)
|
|
127
|
+
fail(`no git repository at or above ${single}`);
|
|
128
|
+
return [{ repo: single, dir: channelDir(gitDir) }];
|
|
129
|
+
};
|
|
130
|
+
const advertised = new Set();
|
|
131
|
+
/** Advertise a channel, without rewriting the marker on every sweep. */
|
|
132
|
+
const advertise = (dir) => {
|
|
133
|
+
advertised.add(dir);
|
|
134
|
+
if (readOpener(dir)?.pid !== process.pid) {
|
|
135
|
+
writeOpener(dir, {
|
|
136
|
+
pid: process.pid,
|
|
137
|
+
command,
|
|
138
|
+
startedAt: new Date().toISOString(),
|
|
139
|
+
kinds: ['pull-request', 'issue', 'issue-edit', 'issue-comment', 'review', 'reply', 'edit', 'fork'],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
// However this process ends — a signal, --once, an exception — its markers go with it. A stale
|
|
144
|
+
// marker would tell the container a host broker is there and make it wait for an answer that is not
|
|
145
|
+
// coming.
|
|
146
|
+
process.on('exit', () => {
|
|
147
|
+
for (const dir of advertised) {
|
|
148
|
+
try {
|
|
149
|
+
if (readOpener(dir)?.pid === process.pid)
|
|
150
|
+
clearOpener(dir);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Nothing useful is left to do while exiting.
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const stop = () => process.exit(0);
|
|
158
|
+
process.on('SIGINT', stop);
|
|
159
|
+
process.on('SIGTERM', stop);
|
|
160
|
+
say(single === undefined ? `serving the checkouts under ${scanned.join(', ')}` : `serving ${single}`);
|
|
161
|
+
say(`creating pull requests, issues, reviews, replies and forks with ${command}${extra.length > 0 ? ` ${extra.join(' ')}` : ''}, as the request's account or this user`);
|
|
162
|
+
for (;;) {
|
|
163
|
+
for (const { repo, dir } of targets()) {
|
|
164
|
+
// One checkout the container has made hostile — its channel directory replaced by a file, say —
|
|
165
|
+
// must not stop the host broker serving every other root, under Restart=always least of all.
|
|
166
|
+
try {
|
|
167
|
+
advertise(dir);
|
|
168
|
+
await sweep(dir, repo, command, extra, allowed);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
warn(`could not serve ${repo}: ${error.message}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (args.has('once'))
|
|
175
|
+
return 0;
|
|
176
|
+
await new Promise((done) => setTimeout(done, Math.max(interval, 0) * 1000));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Answer everything waiting in the channel.
|
|
181
|
+
*
|
|
182
|
+
* @param dir - the channel directory.
|
|
183
|
+
* @param repo - the checkout to create pull requests or issues in.
|
|
184
|
+
* @param command - the program to call.
|
|
185
|
+
* @param extra - arguments to pass before the subcommand.
|
|
186
|
+
* @returns how many requests were answered.
|
|
187
|
+
*/
|
|
188
|
+
async function sweep(dir, repo, command, extra, allowed) {
|
|
189
|
+
let answered = 0;
|
|
190
|
+
for (const id of listRequests(dir)) {
|
|
191
|
+
// Claimed, not read: two host brokers — a service and a hand-run --once — would otherwise both act on the
|
|
192
|
+
// same request and each create it, under the person's name.
|
|
193
|
+
const request = claimRequest(dir, id);
|
|
194
|
+
if (!request) {
|
|
195
|
+
// Either unreadable or already claimed, and the two are not worth telling apart here: removing
|
|
196
|
+
// anything now would delete another host broker's claim, which is the claim's whole purpose.
|
|
197
|
+
warn(`skipped ${id}: unreadable, or another host broker has it`);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
const problems = requestProblems(request);
|
|
201
|
+
if (problems.length > 0) {
|
|
202
|
+
writeResult(dir, id, { error: problems.join('; ') });
|
|
203
|
+
removeRequest(dir, id);
|
|
204
|
+
warn(`refused ${id}: ${problems.join('; ')}`);
|
|
205
|
+
answered += 1;
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const proxy = parseProxy(request.proxy);
|
|
209
|
+
if (proxy === false) {
|
|
210
|
+
writeResult(dir, id, { error: 'invalid proxy in the request' });
|
|
211
|
+
removeRequest(dir, id);
|
|
212
|
+
warn(`refused ${id}: invalid proxy`);
|
|
213
|
+
answered += 1;
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const result = await openOne(repo, command, extra, { ...request, proxy }, allowed);
|
|
217
|
+
writeResult(dir, id, result);
|
|
218
|
+
removeRequest(dir, id);
|
|
219
|
+
if (result.error !== undefined) {
|
|
220
|
+
warn(`failed to open ${request.kind === 'fork'
|
|
221
|
+
? 'fork'
|
|
222
|
+
: request.kind === 'issue'
|
|
223
|
+
? 'issue'
|
|
224
|
+
: request.kind === 'reply'
|
|
225
|
+
? `reply on #${request.number}`
|
|
226
|
+
: request.kind === 'review'
|
|
227
|
+
? `review on #${request.number}`
|
|
228
|
+
: request.kind === 'edit'
|
|
229
|
+
? `edit on #${request.number}`
|
|
230
|
+
: request.kind === 'issue-edit' || request.kind === 'issue-comment'
|
|
231
|
+
? `issue #${request.number}`
|
|
232
|
+
: request.head}: ${result.error}`);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
say(request.kind === 'fork'
|
|
236
|
+
? `forked ${request.repo} as ${request.account ?? 'this user'}: ${result.url}`
|
|
237
|
+
: request.kind === 'reply'
|
|
238
|
+
? `replied on #${result.number} as ${request.account ?? 'this user'}: ${result.url}`
|
|
239
|
+
: request.kind === 'review'
|
|
240
|
+
? `reviewed #${result.number} (${request.event}) as ${request.account ?? 'this user'}${result.url === undefined ? '' : `: ${result.url}`}`
|
|
241
|
+
: request.kind === 'edit'
|
|
242
|
+
? `edited #${result.number} as ${request.account ?? 'this user'}${result.url === undefined ? '' : `: ${result.url}`}`
|
|
243
|
+
: request.kind === 'issue-edit'
|
|
244
|
+
? `edited issue #${result.number} as ${request.account ?? 'this user'}${result.url === undefined ? '' : `: ${result.url}`}`
|
|
245
|
+
: request.kind === 'issue-comment'
|
|
246
|
+
? `commented on issue #${result.number} as ${request.account ?? 'this user'}${result.url === undefined ? '' : `: ${result.url}`}`
|
|
247
|
+
: `opened #${result.number} as ${request.account ?? 'this user'}: ${result.url}`);
|
|
248
|
+
}
|
|
249
|
+
answered += 1;
|
|
250
|
+
}
|
|
251
|
+
return answered;
|
|
252
|
+
}
|
|
253
|
+
/** Environment for one gh call: the selected account or inherited config, plus the proxy choice. */
|
|
254
|
+
function forkEnv(proxy, account, host) {
|
|
255
|
+
const env = hostEnv(proxy, account);
|
|
256
|
+
// gh chooses between GH_TOKEN and GH_ENTERPRISE_TOKEN by host; forcing GH_HOST is what keeps an
|
|
257
|
+
// inherited token from selecting another instance. Named accounts already had their tokens removed.
|
|
258
|
+
env['GH_HOST'] = host;
|
|
259
|
+
return env;
|
|
260
|
+
}
|
|
261
|
+
function hostEnv(proxy, account) {
|
|
262
|
+
const env = { ...process.env };
|
|
263
|
+
if (account !== undefined) {
|
|
264
|
+
const dir = join(homedir(), '.config', `gh-${account}`);
|
|
265
|
+
if (!existsSync(dir) || !statSync(dir).isDirectory()) {
|
|
266
|
+
throw new Error(`no gh config for account ${JSON.stringify(account)} at ${dir}`);
|
|
267
|
+
}
|
|
268
|
+
// Tokens in the host broker's own environment would override the selected account's config.
|
|
269
|
+
delete env['GH_TOKEN'];
|
|
270
|
+
delete env['GITHUB_TOKEN'];
|
|
271
|
+
delete env['GH_ENTERPRISE_TOKEN'];
|
|
272
|
+
delete env['GITHUB_ENTERPRISE_TOKEN'];
|
|
273
|
+
delete env['GH_HOST'];
|
|
274
|
+
env['GH_CONFIG_DIR'] = dir;
|
|
275
|
+
}
|
|
276
|
+
applyProxyChoice(env, proxy);
|
|
277
|
+
return env;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Run one person operation: check the allowlist, then call the program and turn its failure into a result.
|
|
281
|
+
*
|
|
282
|
+
* The five typed routes (review, reply, pull request edit, issue edit and issue comment) differ only in the
|
|
283
|
+
* argv they build, so the check and the catch live here once instead of being copied per route.
|
|
284
|
+
*/
|
|
285
|
+
async function personRun(host, repository, allowed, work) {
|
|
286
|
+
if (!HOST.test(host))
|
|
287
|
+
return { error: `not a host: ${JSON.stringify(host)}` };
|
|
288
|
+
try {
|
|
289
|
+
if (!allowed(host, repository)) {
|
|
290
|
+
return { error: `repository ${repository} is not in the allowlist for ${host}` };
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
return { error: error.message };
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
return await work(host);
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
const failure = error;
|
|
301
|
+
const reason = (failure.stderr ?? failure.message ?? 'the command failed').trim();
|
|
302
|
+
return { error: reason.slice(0, 300) || 'the command failed' };
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** Run work with a body in a private temp file, and remove it afterwards. */
|
|
306
|
+
async function withBodyFile(body, work) {
|
|
307
|
+
const scratch = mkdtempSync(join(tmpdir(), 'gcb-body-'));
|
|
308
|
+
try {
|
|
309
|
+
const bodyFile = join(scratch, 'body.md');
|
|
310
|
+
writeFileSync(bodyFile, body, 'utf8');
|
|
311
|
+
return await work(bodyFile);
|
|
312
|
+
}
|
|
313
|
+
finally {
|
|
314
|
+
rmSync(scratch, { recursive: true, force: true });
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Create one pull request, issue, review, reply, edit or comment.
|
|
319
|
+
*
|
|
320
|
+
* @param repo - the checkout to run it in.
|
|
321
|
+
* @param command - the program to call.
|
|
322
|
+
* @param extra - arguments to pass before the subcommand.
|
|
323
|
+
* @param request - what to do.
|
|
324
|
+
* @returns the number and URL, or the reason it did not work.
|
|
325
|
+
*/
|
|
326
|
+
async function openOne(repo, command, extra, request, allowed) {
|
|
327
|
+
if (request.kind === 'fork') {
|
|
328
|
+
if (request.host !== undefined && !HOST.test(request.host)) {
|
|
329
|
+
return { error: `not a host: ${JSON.stringify(request.host)}` };
|
|
330
|
+
}
|
|
331
|
+
const host = request.host ?? 'github.com';
|
|
332
|
+
try {
|
|
333
|
+
if (!allowed(host, request.repo)) {
|
|
334
|
+
return { error: `repository ${request.repo} is not in the allowlist for ${host}` };
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
return { error: error.message };
|
|
339
|
+
}
|
|
340
|
+
try {
|
|
341
|
+
const { stdout, stderr } = await run(command, [...extra, 'repo', 'fork', request.repo], {
|
|
342
|
+
cwd: repo,
|
|
343
|
+
timeout: CREATE_TIMEOUT_MS,
|
|
344
|
+
maxBuffer: 1 << 20,
|
|
345
|
+
env: forkEnv(request.proxy, request.account, host),
|
|
346
|
+
});
|
|
347
|
+
const match = /https:\/\/[^\s]+\/[^\s/]+\/[^\s/]+/.exec(stdout);
|
|
348
|
+
if (match?.[0] !== undefined)
|
|
349
|
+
return { url: match[0] };
|
|
350
|
+
// With no TTY, gh prints the URL only for a fresh fork; an existing fork older than a minute
|
|
351
|
+
// is `owner/name already exists` on stderr with empty stdout and exit 0.
|
|
352
|
+
const existing = /^([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+) already exists$/m.exec(stderr);
|
|
353
|
+
if (existing?.[1] !== undefined) {
|
|
354
|
+
return { url: `https://${host}/${existing[1]}` };
|
|
355
|
+
}
|
|
356
|
+
return { error: `no fork URL in the output: ${(stdout.trim() || stderr.trim()).slice(0, 300)}` };
|
|
357
|
+
}
|
|
358
|
+
catch (error) {
|
|
359
|
+
const failure = error;
|
|
360
|
+
const reason = (failure.stderr ?? failure.message ?? 'the command failed').trim();
|
|
361
|
+
return { error: reason.slice(0, 300) || 'the command failed' };
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
if (request.kind === 'reply') {
|
|
365
|
+
const host = request.host ?? 'github.com';
|
|
366
|
+
return personRun(host, request.repo, allowed, async (host) => {
|
|
367
|
+
const { stdout, stderr } = await run(command, [
|
|
368
|
+
...extra,
|
|
369
|
+
'api',
|
|
370
|
+
'--method',
|
|
371
|
+
'POST',
|
|
372
|
+
`/repos/${request.repo}/pulls/${request.number}/comments/${request.commentId}/replies`,
|
|
373
|
+
'--raw-field',
|
|
374
|
+
`body=${request.body}`,
|
|
375
|
+
], {
|
|
376
|
+
cwd: repo,
|
|
377
|
+
timeout: CREATE_TIMEOUT_MS,
|
|
378
|
+
maxBuffer: 1 << 20,
|
|
379
|
+
env: forkEnv(request.proxy, request.account, host),
|
|
380
|
+
});
|
|
381
|
+
let answer = null;
|
|
382
|
+
try {
|
|
383
|
+
answer = JSON.parse(stdout);
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
answer = null;
|
|
387
|
+
}
|
|
388
|
+
const reply = (answer ?? {});
|
|
389
|
+
if (typeof reply.html_url !== 'string' || reply.html_url === '') {
|
|
390
|
+
return { error: `no reply URL in the output: ${(stdout.trim() || stderr.trim()).slice(0, 300)}` };
|
|
391
|
+
}
|
|
392
|
+
return { number: request.number, url: reply.html_url };
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
if (request.kind === 'issue-edit' || request.kind === 'issue-comment') {
|
|
396
|
+
const host = request.host ?? 'github.com';
|
|
397
|
+
const edit = request.kind === 'issue-edit';
|
|
398
|
+
return personRun(host, request.repo, allowed, async (host) => {
|
|
399
|
+
const invoke = (bodyFile) => run(command, [
|
|
400
|
+
...extra,
|
|
401
|
+
'issue',
|
|
402
|
+
edit ? 'edit' : 'comment',
|
|
403
|
+
String(request.number),
|
|
404
|
+
'--repo',
|
|
405
|
+
request.repo,
|
|
406
|
+
...(edit && request.title !== undefined ? [`--title=${request.title}`] : []),
|
|
407
|
+
...(bodyFile === undefined ? [] : ['--body-file', bodyFile]),
|
|
408
|
+
], {
|
|
409
|
+
cwd: repo,
|
|
410
|
+
timeout: CREATE_TIMEOUT_MS,
|
|
411
|
+
maxBuffer: 1 << 20,
|
|
412
|
+
env: forkEnv(request.proxy, request.account, host),
|
|
413
|
+
}).then(({ stdout }) => issueUrl(stdout) ?? { number: request.number });
|
|
414
|
+
return request.body === undefined ? invoke() : withBodyFile(request.body, invoke);
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
if (request.kind === 'edit') {
|
|
418
|
+
const host = request.host ?? 'github.com';
|
|
419
|
+
return personRun(host, request.repo, allowed, async (host) => {
|
|
420
|
+
const invoke = (bodyFile) => run(command, [
|
|
421
|
+
...extra,
|
|
422
|
+
'pr',
|
|
423
|
+
'edit',
|
|
424
|
+
String(request.number),
|
|
425
|
+
'--repo',
|
|
426
|
+
request.repo,
|
|
427
|
+
...(request.title === undefined ? [] : [`--title=${request.title}`]),
|
|
428
|
+
...(bodyFile === undefined ? [] : ['--body-file', bodyFile]),
|
|
429
|
+
...(request.base === undefined ? [] : [`--base=${request.base}`]),
|
|
430
|
+
], {
|
|
431
|
+
cwd: repo,
|
|
432
|
+
timeout: CREATE_TIMEOUT_MS,
|
|
433
|
+
maxBuffer: 1 << 20,
|
|
434
|
+
env: forkEnv(request.proxy, request.account, host),
|
|
435
|
+
}).then(({ stdout }) => pullRequestUrl(stdout) ?? { number: request.number });
|
|
436
|
+
return request.body === undefined ? invoke() : withBodyFile(request.body, invoke);
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
if (request.kind === 'review') {
|
|
440
|
+
const host = request.host ?? 'github.com';
|
|
441
|
+
const flag = request.event === 'approve'
|
|
442
|
+
? '--approve'
|
|
443
|
+
: request.event === 'request-changes'
|
|
444
|
+
? '--request-changes'
|
|
445
|
+
: '--comment';
|
|
446
|
+
return personRun(host, request.repo, allowed, async (host) => {
|
|
447
|
+
const invoke = (bodyFile) => run(command, [
|
|
448
|
+
...extra,
|
|
449
|
+
'pr',
|
|
450
|
+
'review',
|
|
451
|
+
String(request.number),
|
|
452
|
+
'--repo',
|
|
453
|
+
request.repo,
|
|
454
|
+
flag,
|
|
455
|
+
...(bodyFile === undefined ? [] : ['--body-file', bodyFile]),
|
|
456
|
+
], {
|
|
457
|
+
cwd: repo,
|
|
458
|
+
timeout: CREATE_TIMEOUT_MS,
|
|
459
|
+
maxBuffer: 1 << 20,
|
|
460
|
+
env: forkEnv(request.proxy, request.account, host),
|
|
461
|
+
}).then(({ stdout }) => {
|
|
462
|
+
const match = /https:\/\/[^\s]+\/pull\/\d+(?:#pullrequestreview-\d+)?/.exec(stdout);
|
|
463
|
+
return match?.[0] === undefined ? { number: request.number } : { number: request.number, url: match[0] };
|
|
464
|
+
});
|
|
465
|
+
return request.body.trim() === '' ? invoke() : withBodyFile(request.body, invoke);
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
// An explicit repository is the allowlist's decision, not the checkout's: the request may name a
|
|
469
|
+
// repository this machine has no checkout of. Without one, gh still resolves the checkout.
|
|
470
|
+
const target = request.repo;
|
|
471
|
+
if (target !== undefined) {
|
|
472
|
+
if (!REPOSITORY.test(target))
|
|
473
|
+
return { error: `not a repository: ${JSON.stringify(target)}` };
|
|
474
|
+
try {
|
|
475
|
+
if (!allowed('github.com', target)) {
|
|
476
|
+
return { error: `repository ${target} is not in the allowlist for github.com` };
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
catch (error) {
|
|
480
|
+
return { error: error.message };
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
// The body goes to a private temp file: the program is given a path, never a string to interpret.
|
|
484
|
+
const issue = request.kind === 'issue';
|
|
485
|
+
try {
|
|
486
|
+
return await withBodyFile(request.body, async (bodyFile) => {
|
|
487
|
+
const { stdout, stderr } = await run(command, [
|
|
488
|
+
...extra,
|
|
489
|
+
issue ? 'issue' : 'pr',
|
|
490
|
+
'create',
|
|
491
|
+
// Without an explicit repository gh resolves the checkout it runs in; with one the allowlist
|
|
492
|
+
// above is the boundary, and no checkout of the target is required.
|
|
493
|
+
...(!issue && request.draft === true ? ['--draft'] : []),
|
|
494
|
+
...(target === undefined ? [] : ['--repo', target]),
|
|
495
|
+
...(issue ? [] : ['--base', request.base, '--head', request.head]),
|
|
496
|
+
`--title=${request.title}`,
|
|
497
|
+
'--body-file',
|
|
498
|
+
bodyFile,
|
|
499
|
+
], {
|
|
500
|
+
cwd: repo,
|
|
501
|
+
timeout: CREATE_TIMEOUT_MS,
|
|
502
|
+
maxBuffer: 1 << 20,
|
|
503
|
+
env: target === undefined
|
|
504
|
+
? hostEnv(request.proxy, request.account)
|
|
505
|
+
: forkEnv(request.proxy, request.account, 'github.com'),
|
|
506
|
+
});
|
|
507
|
+
const found = issue ? issueUrl(stdout) : pullRequestUrl(stdout);
|
|
508
|
+
if (!found) {
|
|
509
|
+
return {
|
|
510
|
+
error: `no ${issue ? 'issue' : 'pull request'} URL in the output: ${(stdout.trim() || stderr.trim()).slice(0, 300)}`,
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
return found;
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
catch (error) {
|
|
517
|
+
const failure = error;
|
|
518
|
+
const reason = (failure.stderr ?? failure.message ?? 'the command failed').trim();
|
|
519
|
+
return { error: reason.slice(0, 300) || 'the command failed' };
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/commands/host.ts"],"names":[],"mappings":"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"}
|
package/lib/daemon.js
CHANGED
|
@@ -144,7 +144,7 @@ export async function runDaemon(argv, io = {}) {
|
|
|
144
144
|
active.config = next.config;
|
|
145
145
|
active.providers = next.providers;
|
|
146
146
|
stderr.write(`gcb daemon: config reloaded\n`);
|
|
147
|
-
audit.record({ event: 'config', decision: 'reload' });
|
|
147
|
+
audit.record({ event: 'config', decision: 'reload', digest: next.digest });
|
|
148
148
|
return next.digest;
|
|
149
149
|
},
|
|
150
150
|
onError: (error) => {
|
package/lib/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
package/lib/gh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../src/gh.ts"],"names":[],"mappings":"AAaA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGvE,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAE/C,8DAA8D;AAC9D,eAAO,MAAM,aAAa,OAAQ,CAAC;AAEnC,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../src/gh.ts"],"names":[],"mappings":"AAaA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGvE,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAE/C,8DAA8D;AAC9D,eAAO,MAAM,aAAa,OAAQ,CAAC;AAEnC,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAoK7E"}
|
package/lib/gh.js
CHANGED
|
@@ -27,7 +27,6 @@ export async function runGhAction(options) {
|
|
|
27
27
|
if (!Number.isSafeInteger(maxBytes) || maxBytes < 0) {
|
|
28
28
|
throw new Error('maxOutputBytes must be a non-negative safe integer');
|
|
29
29
|
}
|
|
30
|
-
const argv = buildGhArgv(options.action, options.values, options.repo);
|
|
31
30
|
const home = mkdtempSync(path.join(tmpdir(), 'gcb-gh-'));
|
|
32
31
|
const configDir = path.join(home, 'gh');
|
|
33
32
|
mkdirSync(configDir, { recursive: true });
|
|
@@ -65,6 +64,14 @@ export async function runGhAction(options) {
|
|
|
65
64
|
applyProxyChoice(env, options.proxy);
|
|
66
65
|
const timeoutMs = options.timeoutMs ?? getGhAction(options.action).timeoutSeconds * 1000;
|
|
67
66
|
try {
|
|
67
|
+
// A body stays out of the process table; only its path reaches argv. A title still travels in
|
|
68
|
+
// argv, so this is about the free-form body rather than everything the person wrote.
|
|
69
|
+
let bodyFile;
|
|
70
|
+
if (typeof options.values['body'] === 'string') {
|
|
71
|
+
bodyFile = path.join(home, 'body.md');
|
|
72
|
+
writeFileSync(bodyFile, options.values['body'], { mode: 0o600 });
|
|
73
|
+
}
|
|
74
|
+
const argv = buildGhArgv(options.action, options.values, options.repo, bodyFile);
|
|
68
75
|
return await new Promise((resolve) => {
|
|
69
76
|
let stdout = '';
|
|
70
77
|
let stderr = '';
|