gcb-host 0.0.3 → 0.2.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 (42) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/lib/broker.d.ts +9 -2
  3. package/lib/broker.d.ts.map +1 -1
  4. package/lib/broker.js +63 -28
  5. package/lib/broker.js.map +1 -1
  6. package/lib/commands/compose.d.ts.map +1 -1
  7. package/lib/commands/compose.js +42 -15
  8. package/lib/commands/compose.js.map +1 -1
  9. package/lib/commands/config.d.ts +1 -1
  10. package/lib/commands/config.d.ts.map +1 -1
  11. package/lib/commands/config.js +27 -5
  12. package/lib/commands/config.js.map +1 -1
  13. package/lib/commands/host-opener.d.ts +11 -1
  14. package/lib/commands/host-opener.d.ts.map +1 -1
  15. package/lib/commands/host-opener.js +137 -38
  16. package/lib/commands/host-opener.js.map +1 -1
  17. package/lib/config.d.ts +5 -1
  18. package/lib/config.d.ts.map +1 -1
  19. package/lib/config.js +14 -8
  20. package/lib/config.js.map +1 -1
  21. package/lib/daemon.d.ts +0 -9
  22. package/lib/daemon.d.ts.map +1 -1
  23. package/lib/daemon.js +57 -7
  24. package/lib/daemon.js.map +1 -1
  25. package/lib/device-flow.d.ts +1 -0
  26. package/lib/device-flow.d.ts.map +1 -1
  27. package/lib/device-flow.js +1 -0
  28. package/lib/device-flow.js.map +1 -1
  29. package/lib/index.d.ts +1 -1
  30. package/lib/index.d.ts.map +1 -1
  31. package/lib/index.js +1 -1
  32. package/lib/policy.d.ts.map +1 -1
  33. package/lib/policy.js +5 -3
  34. package/lib/policy.js.map +1 -1
  35. package/lib/providers/github-app.d.ts.map +1 -1
  36. package/lib/providers/github-app.js +233 -165
  37. package/lib/providers/github-app.js.map +1 -1
  38. package/lib/reload.d.ts +45 -0
  39. package/lib/reload.d.ts.map +1 -0
  40. package/lib/reload.js +149 -0
  41. package/lib/reload.js.map +1 -0
  42. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # gcb-host
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#61](https://github.com/code-vaults/git-credential-broker/pull/61) [`165a95d`](https://github.com/code-vaults/git-credential-broker/commit/165a95d0f0d2b2ceac3222fc038d661373eb3375) Thanks [@JounQin](https://github.com/JounQin)! - Reload `broker.config.yml` without restarting: use a directory watch plus a 5-second safety poll,
8
+ accept `SIGHUP`, keep the last good snapshot on a parse/validation failure, and swap providers
9
+ atomically. The generated sidecar mounts the configuration directory at
10
+ `/etc/git-cred-broker/config` and passes the matching `--config`; the key and refresh token stay
11
+ outside that mount. `socketPath`, `socketMode` and `auditPath` still need a restart.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies []:
16
+ - gcb-core@0.2.0
17
+
18
+ ## 0.1.0
19
+
20
+ ### Minor Changes
21
+
22
+ - [#50](https://github.com/code-vaults/git-credential-broker/pull/50) [`a7efb20`](https://github.com/code-vaults/git-credential-broker/commit/a7efb204e2fe75baf08f624e4f12951657961adf) Thanks [@JounQin](https://github.com/JounQin)! - Add `gcb pr --as-user <login>` to create a pull request through the host opener using that person's
23
+ `~/.config/gh-<login>` configuration; `gcb issue create --as-user <login>` uses the same route.
24
+ `--via-host` is gone: the login names the route and the account. The selected directory must exist before the request is made.
25
+
26
+ - [#55](https://github.com/code-vaults/git-credential-broker/pull/55) [`c47a3a5`](https://github.com/code-vaults/git-credential-broker/commit/c47a3a5ea58593b8b1427571426db4e3316e1612) Thanks [@JounQin](https://github.com/JounQin)! - Make the pull-request identity explicit: app installation token by default, `--as-user` without a
27
+ login for the broker's authorized user token, and `--as-user <login>` for the host-opener route.
28
+
29
+ - [#56](https://github.com/code-vaults/git-credential-broker/pull/56) [`f4c8d71`](https://github.com/code-vaults/git-credential-broker/commit/f4c8d71679e8ca754c6f1fc870d64c61af13ea91) Thanks [@JounQin](https://github.com/JounQin)! - Add `gcb repo fork [owner/name]`: create a fork under a person's account with `--as-user` (broker
30
+ authorized user or host opener). The app identity cannot own a fork, so it is refused.
31
+
32
+ ### Patch Changes
33
+
34
+ - [#46](https://github.com/code-vaults/git-credential-broker/pull/46) [`3475d35`](https://github.com/code-vaults/git-credential-broker/commit/3475d359849ed6ffd7f0c3fec07e5a8e99c1ab0b) Thanks [@JounQin](https://github.com/JounQin)! - Add `gcb config edit` to open the broker configuration in `$VISUAL`/`$EDITOR` and validate the
35
+ saved file.
36
+
37
+ - [#60](https://github.com/code-vaults/git-credential-broker/pull/60) [`ceaf2be`](https://github.com/code-vaults/git-credential-broker/commit/ceaf2be9da7449fbd12800be02c4abbe5a42a382) Thanks [@JounQin](https://github.com/JounQin)! - Classify invalid-proxy pull-request refusals with the request op in the audit log, and stop counting an
38
+ empty comment body as omitted lines in `pr --threads`.
39
+
40
+ - [#57](https://github.com/code-vaults/git-credential-broker/pull/57) [`28fa646`](https://github.com/code-vaults/git-credential-broker/commit/28fa64613db41314afc3512c6923630158d367a5) Thanks [@JounQin](https://github.com/JounQin)! - Fail loudly when `pr --threads` gets no review-thread report instead of printing nothing; a malformed,
41
+ structurally incomplete, or missing-field GraphQL response is no longer reported as "no review
42
+ threads". Refused pull-request actions are audited as `pull-request`, not `credential`.
43
+ - Updated dependencies [[`a7efb20`](https://github.com/code-vaults/git-credential-broker/commit/a7efb204e2fe75baf08f624e4f12951657961adf), [`c47a3a5`](https://github.com/code-vaults/git-credential-broker/commit/c47a3a5ea58593b8b1427571426db4e3316e1612), [`f4c8d71`](https://github.com/code-vaults/git-credential-broker/commit/f4c8d71679e8ca754c6f1fc870d64c61af13ea91)]:
44
+ - gcb-core@0.1.0
45
+
3
46
  ## 0.0.3
4
47
 
5
48
  ### Patch Changes
package/lib/broker.d.ts CHANGED
@@ -10,11 +10,16 @@ export declare const CODES: {
10
10
  readonly REPO_NOT_ALLOWED: 'repo-not-allowed';
11
11
  readonly PROVIDER_ERROR: 'provider-error';
12
12
  };
13
+ /** The mutable part of a running broker: reload swaps these together. */
14
+ export interface HandlerState {
15
+ config: BrokerConfig;
16
+ providers: ReadonlyMap<string, Provider>;
17
+ }
13
18
  /** Options for {@link createRequestHandler}. */
14
19
  export interface RequestHandlerOptions {
15
- readonly config: BrokerConfig;
16
20
  readonly audit: AuditSink;
17
- readonly providers: ReadonlyMap<string, Provider>;
21
+ /** The live snapshot; startBroker uses this so reload can swap it atomically. */
22
+ readonly state: HandlerState;
18
23
  /** Host-side diagnostics sink; never seen by the caller. */
19
24
  readonly log?: (message: string) => void;
20
25
  }
@@ -49,6 +54,8 @@ export interface StartBrokerOptions {
49
54
  /** A running broker. */
50
55
  export interface RunningBroker {
51
56
  readonly socketPath: string;
57
+ /** Swap the configuration and providers; the socket path is immutable for one process. */
58
+ reload(config: BrokerConfig, providers: ReadonlyMap<string, Provider>): void;
52
59
  close(): Promise<void>;
53
60
  }
54
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAgB,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE9F,wFAAwF;AACxF,eAAO,MAAM,cAAc,QAAkB,CAAC;AAS9C,6CAA6C;AAC7C,eAAO,MAAM,KAAK;aAChB,WAAW,EAAE,aAAa;aAC1B,kBAAkB,EAAE,oBAAoB;aACxC,gBAAgB,EAAE,kBAAkB;aACpC,aAAa,EAAE,eAAe;aAC9B,gBAAgB,EAAE,kBAAkB;aACpC,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAUX,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAkC1D;AAGD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAqb7D;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsErF"}
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAgB,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE9F,wFAAwF;AACxF,eAAO,MAAM,cAAc,QAAkB,CAAC;AAS9C,6CAA6C;AAC7C,eAAO,MAAM,KAAK;aAChB,WAAW,EAAE,aAAa;aAC1B,kBAAkB,EAAE,oBAAoB;aACxC,gBAAgB,EAAE,kBAAkB;aACpC,aAAa,EAAE,eAAe;aAC9B,gBAAgB,EAAE,kBAAkB;aACpC,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAUX,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC1C;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAkC1D;AAGD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAC7B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAkd7D;AAMD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0FAA0F;IAC1F,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4ErF"}
package/lib/broker.js CHANGED
@@ -95,7 +95,8 @@ export function prepareSocketPath(socketPath) {
95
95
  * @returns the handler.
96
96
  */
97
97
  export function createRequestHandler(options) {
98
- const { config, audit, providers, log = () => { } } = options;
98
+ const { audit, log = () => { } } = options;
99
+ const state = options.state;
99
100
  /**
100
101
  * Record a refusal and produce the caller-visible response.
101
102
  *
@@ -116,15 +117,18 @@ export function createRequestHandler(options) {
116
117
  return { ok: false, code, reason: message };
117
118
  }
118
119
  async function handleRequest(message, proxy) {
119
- const auditEvent = message['op'] === 'action' ? 'action' : 'credential';
120
+ // One request keeps the snapshot it started with, even if a reload lands mid-flight.
121
+ const current = { config: state.config, providers: state.providers };
122
+ const auditEvent = auditEventFor(message['op']);
120
123
  const context = {
121
124
  host: typeof message['host'] === 'string' ? message['host'] : null,
122
125
  repo: null,
123
126
  session: typeof message['session'] === 'string' ? message['session'].slice(0, 128) : null,
124
127
  helper_pid: typeof message['pid'] === 'number' && Number.isInteger(message['pid']) ? message['pid'] : null,
125
128
  };
129
+ const denyPullRequest = (code, reason, message, hostDetail) => deny(context, code, reason, message, hostDetail, auditEvent);
126
130
  if (message['op'] === 'ping') {
127
- return { ok: true, version: BROKER_VERSION, hosts: [...providers.keys()] };
131
+ return { ok: true, version: BROKER_VERSION, hosts: [...current.providers.keys()] };
128
132
  }
129
133
  if (message['op'] !== 'credential' &&
130
134
  message['op'] !== 'logs' &&
@@ -134,7 +138,7 @@ export function createRequestHandler(options) {
134
138
  }
135
139
  // Host first: whether plaintext is tolerated is a property of the *host's* configuration,
136
140
  // not of the request, so the protocol can only be judged once the host is known.
137
- const block = hostConfig(config, message['host']);
141
+ const block = hostConfig(current.config, message['host']);
138
142
  if (!block) {
139
143
  return deny(context, CODES.HOST_NOT_ALLOWED, 'no configuration for this host', 'host is not configured', undefined, auditEvent);
140
144
  }
@@ -157,13 +161,17 @@ export function createRequestHandler(options) {
157
161
  if (!repoAllowed(block.allow, repo.full)) {
158
162
  return deny(context, CODES.REPO_NOT_ALLOWED, 'repository not in allowlist', 'repository is not allowlisted', undefined, auditEvent);
159
163
  }
160
- const provider = providers.get(block.host);
164
+ const provider = current.providers.get(block.host);
161
165
  if (!provider) {
162
166
  return deny(context, CODES.PROVIDER_ERROR, 'no provider instance for this host', 'provider unavailable', undefined, auditEvent);
163
167
  }
164
168
  if (message['op'] === 'action') {
165
169
  const ghAction = message['ghAction'];
166
170
  const values = message['values'];
171
+ const identity = message['identity'];
172
+ if (identity !== undefined && identity !== 'app' && identity !== 'user') {
173
+ return deny(context, CODES.BAD_REQUEST, 'bad action identity', 'the request names no usable identity', undefined, 'action');
174
+ }
167
175
  const denyAction = (code, reason, message, hostDetail) => deny(context, code, reason, message, hostDetail, 'action');
168
176
  if (typeof ghAction !== 'string' || values === null || typeof values !== 'object' || Array.isArray(values)) {
169
177
  return denyAction(CODES.BAD_REQUEST, 'bad action request', 'the request carries no usable action');
@@ -180,6 +188,9 @@ export function createRequestHandler(options) {
180
188
  }
181
189
  throw error;
182
190
  }
191
+ if (identity === 'user' && spec.appUser !== true) {
192
+ return denyAction(CODES.BAD_REQUEST, 'action does not support the user identity', 'that action cannot run as a person');
193
+ }
183
194
  if (typeof provider.runAction !== 'function') {
184
195
  return denyAction(CODES.PROVIDER_ERROR, `provider ${provider.name} cannot run actions`, "this host's provider cannot run GitHub actions");
185
196
  }
@@ -192,6 +203,7 @@ export function createRequestHandler(options) {
192
203
  full: repo.full,
193
204
  action: ghAction,
194
205
  values: actionValues,
206
+ ...(identity === undefined ? {} : { identity: identity }),
195
207
  proxy,
196
208
  });
197
209
  if (result.error !== undefined) {
@@ -205,6 +217,7 @@ export function createRequestHandler(options) {
205
217
  action: ghAction,
206
218
  command: spec.command.join(' '),
207
219
  permissions: spec.permissions,
220
+ identity: identity ?? 'app',
208
221
  duration_ms: Date.now() - startedAt,
209
222
  token_fingerprint: result.tokenFingerprint,
210
223
  exit_code: result.code,
@@ -274,14 +287,22 @@ export function createRequestHandler(options) {
274
287
  action !== 'threads' &&
275
288
  action !== 'reply' &&
276
289
  action !== 'edit' &&
277
- action !== 'resolve') {
278
- return deny(context, CODES.BAD_REQUEST, `bad action ${JSON.stringify(action)}`, 'unknown pull request action');
290
+ action !== 'resolve' &&
291
+ action !== 'fork') {
292
+ return denyPullRequest(CODES.BAD_REQUEST, `bad action ${JSON.stringify(action)}`, 'unknown pull request action');
279
293
  }
280
294
  const number = message['number'];
281
295
  const commentId = message['commentId'];
282
296
  const threadId = message['threadId'];
283
297
  const head = message['head'];
284
298
  const base = message['base'];
299
+ const identity = message['identity'];
300
+ if (identity !== undefined && identity !== 'app' && identity !== 'user') {
301
+ return denyPullRequest(CODES.BAD_REQUEST, `bad identity ${JSON.stringify(identity)}`, 'the identity must be app or user');
302
+ }
303
+ if (action === 'fork' && identity !== 'user') {
304
+ return denyPullRequest(CODES.BAD_REQUEST, 'fork without a user identity', 'a fork must be owned by a person');
305
+ }
285
306
  const title = message['title'];
286
307
  const body = message['body'];
287
308
  const filePath = message['filePath'];
@@ -290,24 +311,24 @@ export function createRequestHandler(options) {
290
311
  const branch = BRANCH;
291
312
  const usable = (value) => typeof value === 'string' && branch.test(value) && !value.includes('..');
292
313
  if (action === 'open' && !usable(head)) {
293
- return deny(context, CODES.BAD_REQUEST, `bad head ${JSON.stringify(head)}`, 'the head branch name is not usable');
314
+ return denyPullRequest(CODES.BAD_REQUEST, `bad head ${JSON.stringify(head)}`, 'the head branch name is not usable');
294
315
  }
295
316
  if (action === 'open' && base !== undefined && !usable(base)) {
296
- return deny(context, CODES.BAD_REQUEST, `bad base ${JSON.stringify(base)}`, 'the base branch name is not usable');
317
+ return denyPullRequest(CODES.BAD_REQUEST, `bad base ${JSON.stringify(base)}`, 'the base branch name is not usable');
297
318
  }
298
319
  if (action === 'open' && (typeof title !== 'string' || title.trim() === '' || title.length > MAX_TITLE_CHARS)) {
299
- return deny(context, CODES.BAD_REQUEST, 'bad title', `a pull request needs a title of at most ${MAX_TITLE_CHARS} characters`);
320
+ return denyPullRequest(CODES.BAD_REQUEST, 'bad title', `a pull request needs a title of at most ${MAX_TITLE_CHARS} characters`);
300
321
  }
301
322
  if (body !== undefined && (typeof body !== 'string' || body.length > MAX_BODY_CHARS)) {
302
- return deny(context, CODES.BAD_REQUEST, 'bad body', `the body must be text of at most ${MAX_BODY_CHARS} characters`);
323
+ return denyPullRequest(CODES.BAD_REQUEST, 'bad body', `the body must be text of at most ${MAX_BODY_CHARS} characters`);
303
324
  }
304
325
  // An anchored comment: both halves or neither, only on a comment, and never outside the repository.
305
326
  const anchored = filePath !== undefined || line !== undefined;
306
327
  if (anchored && action !== 'comment') {
307
- return deny(context, CODES.BAD_REQUEST, `anchor fields with ${action}`, 'only a comment can be anchored to a file and a line');
328
+ return denyPullRequest(CODES.BAD_REQUEST, `anchor fields with ${action}`, 'only a comment can be anchored to a file and a line');
308
329
  }
309
330
  if (anchored && (filePath === undefined || line === undefined)) {
310
- return deny(context, CODES.BAD_REQUEST, 'half an anchor', 'an anchored comment needs a file and a line, or neither');
331
+ return denyPullRequest(CODES.BAD_REQUEST, 'half an anchor', 'an anchored comment needs a file and a line, or neither');
311
332
  }
312
333
  if (filePath !== undefined) {
313
334
  if (typeof filePath !== 'string' ||
@@ -315,29 +336,33 @@ export function createRequestHandler(options) {
315
336
  filePath.startsWith('/') ||
316
337
  filePath.length > 1024 ||
317
338
  filePath.split('/').includes('..')) {
318
- return deny(context, CODES.BAD_REQUEST, `bad file path ${JSON.stringify(filePath)}`, 'the file path is not usable');
339
+ return denyPullRequest(CODES.BAD_REQUEST, `bad file path ${JSON.stringify(filePath)}`, 'the file path is not usable');
319
340
  }
320
341
  }
321
342
  if (line !== undefined && (!Number.isInteger(line) || Number(line) <= 0)) {
322
- return deny(context, CODES.BAD_REQUEST, `bad line ${JSON.stringify(line)}`, 'the line has to be a positive number');
343
+ return denyPullRequest(CODES.BAD_REQUEST, `bad line ${JSON.stringify(line)}`, 'the line has to be a positive number');
323
344
  }
324
345
  if (side !== 'left' && side !== 'right') {
325
- return deny(context, CODES.BAD_REQUEST, `bad side ${JSON.stringify(side)}`, 'the side has to be left or right');
346
+ return denyPullRequest(CODES.BAD_REQUEST, `bad side ${JSON.stringify(side)}`, 'the side has to be left or right');
326
347
  }
327
348
  if ((action === 'comment' || action === 'reply' || action === 'edit') && (typeof body !== 'string' || body.trim() === '')) {
328
- return deny(context, CODES.BAD_REQUEST, 'empty comment', 'a comment has to say something');
349
+ return denyPullRequest(CODES.BAD_REQUEST, 'empty comment', 'a comment has to say something');
329
350
  }
330
351
  if ((action === 'reply' || action === 'edit') && (typeof commentId !== 'number' || !Number.isInteger(commentId) || commentId <= 0)) {
331
- return deny(context, CODES.BAD_REQUEST, 'bad commentId', action === 'reply' ? 'a reply needs the id of the comment it answers' : 'an edit needs the id of the review comment it changes');
352
+ return denyPullRequest(CODES.BAD_REQUEST, 'bad commentId', action === 'reply' ? 'a reply needs the id of the comment it answers' : 'an edit needs the id of the review comment it changes');
332
353
  }
333
354
  if (action === 'resolve' && (typeof threadId !== 'string' || threadId === '')) {
334
- return deny(context, CODES.BAD_REQUEST, 'bad threadId', 'resolving needs the id of the thread, which --threads prints');
355
+ return denyPullRequest(CODES.BAD_REQUEST, 'bad threadId', 'resolving needs the id of the thread, which --threads prints');
335
356
  }
336
- if (action !== 'open' && action !== 'resolve' && action !== 'edit' && (typeof number !== 'number' || !Number.isInteger(number) || number <= 0)) {
337
- return deny(context, CODES.BAD_REQUEST, `bad number ${JSON.stringify(number)}`, 'this action needs a pull request number');
357
+ if (action !== 'open' &&
358
+ action !== 'resolve' &&
359
+ action !== 'edit' &&
360
+ action !== 'fork' &&
361
+ (typeof number !== 'number' || !Number.isInteger(number) || number <= 0)) {
362
+ return denyPullRequest(CODES.BAD_REQUEST, `bad number ${JSON.stringify(number)}`, 'this action needs a pull request number');
338
363
  }
339
364
  if (typeof provider.pullRequest !== 'function') {
340
- return deny(context, CODES.PROVIDER_ERROR, `provider ${provider.name} cannot manage pull requests`, "this host's provider cannot manage pull requests");
365
+ return denyPullRequest(CODES.PROVIDER_ERROR, `provider ${provider.name} cannot manage pull requests`, "this host's provider cannot manage pull requests");
341
366
  }
342
367
  try {
343
368
  const result = await provider.pullRequest({
@@ -345,6 +370,7 @@ export function createRequestHandler(options) {
345
370
  owner: repo.owner,
346
371
  repo: repo.repo,
347
372
  action,
373
+ ...(identity === 'app' || identity === 'user' ? { identity } : {}),
348
374
  proxy,
349
375
  ...(typeof number === 'number' ? { number } : {}),
350
376
  ...(typeof commentId === 'number' ? { commentId } : {}),
@@ -363,18 +389,18 @@ export function createRequestHandler(options) {
363
389
  decision: 'allow',
364
390
  ...context,
365
391
  action,
392
+ ...(identity === 'app' || identity === 'user' ? { identity } : {}),
366
393
  ...(typeof number === 'number' ? { number } : {}),
367
394
  // The comment an edit changes is the one thing the entry would otherwise not say, and the
368
395
  // number alone does not name it. Recorded for a reply too, which also carries an id.
369
396
  ...(typeof commentId === 'number' ? { comment_id: commentId } : {}),
370
397
  ...(typeof head === 'string' ? { head } : {}),
371
398
  ...(typeof base === 'string' ? { base } : {}),
372
- pr_number: result.number,
373
- pr_url: result.url,
399
+ ...(action === 'fork' ? { fork_url: result.url } : { pr_number: result.number, pr_url: result.url }),
374
400
  });
375
401
  return {
376
402
  ok: true,
377
- prNumber: result.number,
403
+ ...(action === 'fork' ? {} : { prNumber: result.number }),
378
404
  prUrl: result.url,
379
405
  prState: result.state,
380
406
  prStatus: result.status,
@@ -386,7 +412,7 @@ export function createRequestHandler(options) {
386
412
  const callerMessage = error instanceof ProviderConfigError
387
413
  ? reason
388
414
  : 'the broker could not manage that pull request; see the broker log';
389
- return deny(context, CODES.PROVIDER_ERROR, reason, callerMessage, hostDetail);
415
+ return denyPullRequest(CODES.PROVIDER_ERROR, reason, callerMessage, hostDetail);
390
416
  }
391
417
  }
392
418
  try {
@@ -429,11 +455,14 @@ export function createRequestHandler(options) {
429
455
  return async function handle(message) {
430
456
  const proxy = parseProxy(message['proxy']);
431
457
  if (proxy === false) {
432
- return deny({ host: null, repo: null, session: null, helper_pid: null }, CODES.BAD_REQUEST, 'invalid proxy', 'invalid proxy');
458
+ return deny({ host: null, repo: null, session: null, helper_pid: null }, CODES.BAD_REQUEST, 'invalid proxy', 'invalid proxy', undefined, auditEventFor(message['op']));
433
459
  }
434
460
  return withProxy(proxy, () => handleRequest(message, proxy));
435
461
  };
436
462
  }
463
+ function auditEventFor(op) {
464
+ return op === 'action' ? 'action' : op === 'pull-request' ? 'pull-request' : 'credential';
465
+ }
437
466
  /**
438
467
  * Start the broker.
439
468
  *
@@ -443,7 +472,12 @@ export function createRequestHandler(options) {
443
472
  export async function startBroker(options) {
444
473
  const { config, audit, providers, log = () => { } } = options;
445
474
  prepareSocketPath(config.socketPath);
446
- const handle = createRequestHandler({ config, audit, providers, log });
475
+ const state = { config, providers };
476
+ const handle = createRequestHandler({ audit, log, state });
477
+ const reload = (nextConfig, nextProviders) => {
478
+ state.config = nextConfig;
479
+ state.providers = nextProviders;
480
+ };
447
481
  const server = net.createServer({ allowHalfOpen: false }, (socket) => {
448
482
  socket.setTimeout(REQUEST_TIMEOUT_MS);
449
483
  const reader = createLineReader({
@@ -498,6 +532,7 @@ export async function startBroker(options) {
498
532
  log(`listening on ${config.socketPath} (mode ${config.socketMode.toString(8)})`);
499
533
  return {
500
534
  socketPath: config.socketPath,
535
+ reload,
501
536
  async close() {
502
537
  await new Promise((resolve) => server.close(() => resolve()));
503
538
  try {
package/lib/broker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"broker.js","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/commands/compose.ts"],"names":[],"mappings":"AAmBA,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uDAAuD;AACvD,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAgHzD;AAED,gCAAgC;AAChC,eAAO,MAAM,aAAa,kgCAgBzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CA0D1D"}
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/commands/compose.ts"],"names":[],"mappings":"AAmBA,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uDAAuD;AACvD,eAAO,MAAM,QAAQ,aAAa,CAAC;AAoBnC;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAwHzD;AAED,gCAAgC;AAChC,eAAO,MAAM,aAAa,kgCAgBzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CA2D1D"}
@@ -17,6 +17,24 @@ import { fail, parseArgs, say, warn } from 'gcb-core';
17
17
  import { USER_TOKEN_FILE } from '../config.js';
18
18
  /** Where a code-mounted sidecar expects the broker. */
19
19
  export const CODE_DIR = '/opt/gcb';
20
+ /** A volume scalar as YAML, with compose's dollar escaping applied first. */
21
+ function yamlVolume(host, container, mode) {
22
+ const raw = `${host}:${container}${mode === undefined ? '' : `:${mode}`}`;
23
+ const escaped = raw.replace(/\$/g, () => '$$');
24
+ // Plain YAML is fine until a path has a space, '#' or another indicator; JSON quoting is valid YAML.
25
+ return /^[A-Za-z0-9_./:@%+=,~-]+$/.test(raw) ? escaped : JSON.stringify(escaped);
26
+ }
27
+ /** Follow a selected config symlink; a missing file is the only fallback. */
28
+ function selectedConfigFile(configPath) {
29
+ try {
30
+ return fs.realpathSync(configPath);
31
+ }
32
+ catch (error) {
33
+ if (error.code === 'ENOENT')
34
+ return configPath;
35
+ throw error;
36
+ }
37
+ }
20
38
  /**
21
39
  * Render the compose file.
22
40
  *
@@ -26,6 +44,11 @@ export const CODE_DIR = '/opt/gcb';
26
44
  export function renderCompose(input) {
27
45
  const socketDir = input.socketDir.replace(/\/+$/, '');
28
46
  const configPath = input.configPath ?? `${input.dir}/broker.config.yml`;
47
+ // Follow a selected symlink: the directory bind exposes the link, not a target outside it.
48
+ const configFile = selectedConfigFile(configPath);
49
+ const mountedConfigPath = path.posix.join(path.posix.dirname(SIDECAR.configPath), path.basename(configFile));
50
+ // One shell word; compose interpolates $ before sh runs, so a literal dollar is doubled.
51
+ const mountedConfigArg = `'${mountedConfigPath.replace(/'/g, "'\\''")}'`.replace(/\$/g, () => '$$');
29
52
  const fromCode = input.code !== undefined;
30
53
  const origin = fromCode
31
54
  ? `# It runs the code mounted read-only from ${input.code}, which is whatever \`stage\` put there —
@@ -38,7 +61,7 @@ export function renderCompose(input) {
38
61
  # To avoid depending on the registry at boot, either render this file with --code <directory> to
39
62
  # run staged code from a mount, or point --image at an image of your own that already has the
40
63
  # package installed, and change \`command\` to the binary in it:
41
- # ["gcb", "daemon", "--config", "${SIDECAR.configPath}"]`;
64
+ # ["gcb", "daemon", "--config", "${mountedConfigPath}"]`;
42
65
  // The egress lines belong to both renders: a --code deployment is a sidecar too, and without them it
43
66
  // would carry no proxy variables at all, so the daemon would go direct and hang rather than refuse.
44
67
  const egress = `
@@ -61,12 +84,12 @@ export function renderCompose(input) {
61
84
  // directory instead of a token — for every action, not only the personal ones. Emit it once `authorize`
62
85
  // has written the file, and say what to run until then.
63
86
  const userRefreshMount = fs.existsSync(`${input.dir}/${USER_TOKEN_FILE}`)
64
- ? `\n # The authorized person's refresh token: the only secret mounted writable, because GitHub\n # rotates it on every exchange.\n - ${input.dir}/${USER_TOKEN_FILE}:${SIDECAR.userTokenPath}:rw`
87
+ ? `\n # The authorized person's refresh token: the only secret mounted writable, because GitHub\n # rotates it on every exchange.\n - ${yamlVolume(`${input.dir}/${USER_TOKEN_FILE}`, SIDECAR.userTokenPath, 'rw')}`
65
88
  : '\n # No user.refresh yet: run `gcb authorize` and render this again. A mount' +
66
89
  '\n # for a path that does not exist would become a directory, and the broker would read that.';
67
90
  const start = fromCode
68
- ? `exec node --conditions=development ${CODE_DIR}/packages/host/bin/gcb.js daemon --config ${SIDECAR.configPath}`
69
- : `exec npx --yes --package '${input.packageSpec}' gcb daemon --config ${SIDECAR.configPath}`;
91
+ ? `exec node --conditions=development ${CODE_DIR}/packages/host/bin/gcb.js daemon --config ${mountedConfigArg}`
92
+ : `exec npx --yes --package '${input.packageSpec}' gcb daemon --config ${mountedConfigArg}`;
70
93
  const command = ` - sh
71
94
  - -c
72
95
  - |
@@ -79,7 +102,7 @@ export function renderCompose(input) {
79
102
  const codeMount = fromCode
80
103
  ? `
81
104
  # The code, read-only, from the commit you reviewed and staged.
82
- - ${input.code}:${CODE_DIR}:ro`
105
+ - ${yamlVolume(input.code, CODE_DIR, 'ro')}`
83
106
  : '';
84
107
  return `# Docker sidecar for gcb-host@${PACKAGE_VERSION}
85
108
  #
@@ -120,11 +143,14 @@ services:
120
143
  command:
121
144
  ${command}
122
145
  volumes:${codeMount}
123
- - ${configPath}:${SIDECAR.configPath}:ro
124
- - ${input.dir}/app.pem:${SIDECAR.keyPath}:ro
146
+ # The directory, not the file: an atomic replacement on the host must be visible for reload.
147
+ # Keep broker.config.yml in its own subdirectory to keep this mount narrow; init's default
148
+ # layout puts it beside app.pem/user.refresh, which this mount also exposes read-only.
149
+ - ${yamlVolume(path.dirname(configFile), path.dirname(SIDECAR.configPath), 'ro')}
150
+ - ${yamlVolume(`${input.dir}/app.pem`, SIDECAR.keyPath, 'ro')}
125
151
  ${userRefreshMount}
126
- - ${input.dir}/log:${SIDECAR.auditDir}
127
- - ${socketDir}:${SIDECAR.socketDir}
152
+ - ${yamlVolume(`${input.dir}/log`, SIDECAR.auditDir)}
153
+ - ${yamlVolume(socketDir, SIDECAR.socketDir)}
128
154
  # The socket appears at ${socketDir}${SIDECAR.socketPath.slice(SIDECAR.socketDir.length)} on the host. Point the pushing
129
155
  # environment at the same socket with:
130
156
  # gcb setup --socket <that path as the pusher sees it>
@@ -167,22 +193,23 @@ export function runCompose(argv) {
167
193
  : dirArg !== undefined
168
194
  ? path.join(dirArg, 'broker.config.yml')
169
195
  : resolveConfigPath());
170
- const dir = path.resolve(dirArg ?? deploymentDir(configPath));
196
+ const configFile = selectedConfigFile(configPath);
197
+ const dir = path.resolve(dirArg ?? deploymentDir(configFile));
171
198
  const socketDir = args.value('socket-dir');
172
199
  if (!socketDir) {
173
200
  fail('--socket-dir is required (a host directory the pushing container already mounts)');
174
201
  }
175
202
  // Check before emitting. A config written for the other deployment produces a sidecar that
176
203
  // starts and then cannot find its own private key, which is a confusing way to find out.
177
- if (fs.existsSync(configPath)) {
178
- const mode = inferMode(loadConfig(configPath));
204
+ if (fs.existsSync(configFile)) {
205
+ const mode = inferMode(loadConfig(configFile));
179
206
  if (mode !== 'sidecar') {
180
- fail(`${configPath} was written with --mode host; re-run ` +
207
+ fail(`${configFile} was written with --mode host; re-run ` +
181
208
  '`gcb init --mode sidecar ...` before using compose');
182
209
  }
183
210
  }
184
211
  else {
185
- warn(`no configuration at ${configPath} yet; create it with \`init --mode sidecar\` first`);
212
+ warn(`no configuration at ${configFile} yet; create it with \`init --mode sidecar\` first`);
186
213
  }
187
214
  // POSIX only, and guaranteed to exist by the refusal above: the file this prints binds host paths
188
215
  // and a socket directory, neither of which works from a Windows host. Asserting it here rather
@@ -195,7 +222,7 @@ export function runCompose(argv) {
195
222
  const user = args.value('user') ?? `${uid}:${gid}`;
196
223
  say(renderCompose({
197
224
  dir,
198
- configPath,
225
+ configPath: configFile,
199
226
  socketDir,
200
227
  user,
201
228
  image: args.value('image') ?? 'node:24-slim',
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/commands/compose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/commands/compose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA0B/C,uDAAuD;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,6EAA6E;AAC7E,SAAS,UAAU,CAAC,IAAY,EAAE,SAAiB,EAAE,IAAa;IAChE,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,SAAS,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/C,qGAAqG;IACrG,OAAO,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,6EAA6E;AAC7E,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,UAAU,CAAC;QAC1E,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,KAAK,CAAC,GAAG,oBAAoB,CAAC;IACxE,2FAA2F;IAC3F,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7G,yFAAyF;IACzF,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;IAE1C,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,6CAA6C,KAAK,CAAC,IAAI;;gGAEmC;QAC5F,CAAC,CAAC;;2BAEqB,KAAK,CAAC,WAAW;;;;;qCAKP,iBAAiB,IAAI,CAAC;IAEzD,qGAAqG;IACrG,oGAAoG;IACpG,MAAM,MAAM,GAAG;;;;;;;;wCAQuB,CAAC;IAEvC,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC;kBACY,MAAM,EAAE;QACtB,CAAC,CAAC;;;yCAGmC,MAAM,EAAE,CAAC;IAEhD,oGAAoG;IACpG,wGAAwG;IACxG,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QACvE,CAAC,CAAC,qJAAqJ,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,eAAe,EAAE,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE;QACnO,CAAC,CAAC,mFAAmF;YACnF,oGAAoG,CAAC;IACzG,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,sCAAsC,QAAQ,6CAA6C,gBAAgB,EAAE;QAC/G,CAAC,CAAC,6BAA6B,KAAK,CAAC,WAAW,yBAAyB,gBAAgB,EAAE,CAAC;IAC9F,MAAM,OAAO,GAAG;;;;;;;;UAQR,KAAK,EAAE,CAAC;IAEhB,MAAM,SAAS,GAAG,QAAQ;QACxB,CAAC,CAAC;;UAEI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,iCAAiC,eAAe;;;;;;;;EAQvD,MAAM;;;;;;6CAMqC,KAAK,CAAC,GAAG;;;;qBAIjC,OAAO,CAAC,UAAU;qBAClB,OAAO,CAAC,OAAO;qBACf,OAAO,CAAC,SAAS;;;;IAIlC,KAAK,CAAC,IAAI;aACD,KAAK,CAAC,KAAK;sBACF,KAAK,CAAC,IAAI;;aAEnB,KAAK,CAAC,IAAI;;;;;;;gCAOS,WAAW;;EAEzC,OAAO;cACK,SAAS;;;;UAIb,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;UAC5E,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;EACjE,gBAAgB;UACR,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;UAChD,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC;0BACxB,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;;;CAGvF,CAAC;AACF,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;CAgB5B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAuB;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC;QACnC,CAAC,CAAC,MAAM,KAAK,SAAS;YACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC;YACxC,CAAC,CAAC,iBAAiB,EAAE,CAC1B,CAAC;IACF,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC3F,CAAC;IAED,2FAA2F;IAC3F,yFAAyF;IACzF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CACF,GAAG,UAAU,wCAAwC;gBACnD,oDAAoD,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,uBAAuB,UAAU,oDAAoD,CAAC,CAAC;IAC9F,CAAC;IAED,kGAAkG;IAClG,+FAA+F;IAC/F,wFAAwF;IACxF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEnD,GAAG,CACD,aAAa,CAAC;QACZ,GAAG;QACH,UAAU,EAAE,UAAU;QACtB,SAAS;QACT,IAAI;QACJ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,cAAc;QAC5C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,YAAY,eAAe,EAAE;QACnE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK;QACjC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;KACzB,CAAC,CACH,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const CONFIG_USAGE = "Usage: gcb config check [options]\n\nValidate the broker configuration without starting the service.\n\n --config <path> Config file (default: $GIT_BROKER_CONFIG, else ./broker.config.yml)\n -h, --help Show this help\n";
1
+ export declare const CONFIG_USAGE = "Usage: gcb config check|edit [options]\n\nValidate the broker configuration, or open it in $VISUAL/$EDITOR and validate the result.\n\n check Validate the file without changing it\n edit Open it, then validate the saved file\n --config <path> Config file (default: $GIT_BROKER_CONFIG, else ./broker.config.yml)\n -h, --help Show this help\n";
2
2
  export declare function runConfig(argv: readonly string[]): number;
3
3
  //# sourceMappingURL=config.d.ts.map