ghostrail 0.20.1 → 0.22.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/board/page.d.ts.map +1 -1
- package/dist/board/page.js +76 -14
- package/dist/board/page.js.map +1 -1
- package/dist/board/server.d.ts +10 -0
- package/dist/board/server.d.ts.map +1 -1
- package/dist/board/server.js +24 -0
- package/dist/board/server.js.map +1 -1
- package/dist/cli/commands.d.ts +56 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +203 -20
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +10 -0
- package/dist/commands/help.js.map +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +19 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +13 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/dashboard/page.d.ts.map +1 -1
- package/dist/dashboard/page.js +226 -9
- package/dist/dashboard/page.js.map +1 -1
- package/dist/dashboard/review-page.d.ts +5 -0
- package/dist/dashboard/review-page.d.ts.map +1 -1
- package/dist/dashboard/review-page.js +23 -3
- package/dist/dashboard/review-page.js.map +1 -1
- package/dist/dashboard/routes.d.ts +17 -0
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +25 -0
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/server.d.ts +29 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +91 -2
- package/dist/dashboard/server.js.map +1 -1
- package/dist/doctor/checks.d.ts +1 -0
- package/dist/doctor/checks.d.ts.map +1 -1
- package/dist/doctor/checks.js +1 -1
- package/dist/doctor/checks.js.map +1 -1
- package/dist/doctor/probes.d.ts +19 -3
- package/dist/doctor/probes.d.ts.map +1 -1
- package/dist/doctor/probes.js +22 -27
- package/dist/doctor/probes.js.map +1 -1
- package/dist/doctor/run.d.ts.map +1 -1
- package/dist/doctor/run.js +17 -3
- package/dist/doctor/run.js.map +1 -1
- package/dist/factory/build.d.ts +6 -0
- package/dist/factory/build.d.ts.map +1 -1
- package/dist/factory/build.js +26 -0
- package/dist/factory/build.js.map +1 -1
- package/dist/loop/next-tick.d.ts +50 -0
- package/dist/loop/next-tick.d.ts.map +1 -0
- package/dist/loop/next-tick.js +87 -0
- package/dist/loop/next-tick.js.map +1 -0
- package/dist/loop/schedule.d.ts +11 -2
- package/dist/loop/schedule.d.ts.map +1 -1
- package/dist/loop/schedule.js +3 -1
- package/dist/loop/schedule.js.map +1 -1
- package/dist/loop/tick-log.d.ts +13 -0
- package/dist/loop/tick-log.d.ts.map +1 -0
- package/dist/loop/tick-log.js +64 -0
- package/dist/loop/tick-log.js.map +1 -0
- package/dist/publish/gh.d.ts +43 -2
- package/dist/publish/gh.d.ts.map +1 -1
- package/dist/publish/gh.js +80 -2
- package/dist/publish/gh.js.map +1 -1
- package/dist/publish/githost.d.ts +18 -1
- package/dist/publish/githost.d.ts.map +1 -1
- package/dist/publish/githost.js +13 -0
- package/dist/publish/githost.js.map +1 -1
- package/dist/publish/index.d.ts +1 -1
- package/dist/publish/index.d.ts.map +1 -1
- package/dist/publish/index.js +1 -1
- package/dist/publish/index.js.map +1 -1
- package/dist/release/index.d.ts +2 -0
- package/dist/release/index.d.ts.map +1 -0
- package/dist/release/index.js +2 -0
- package/dist/release/index.js.map +1 -0
- package/dist/release/release.d.ts +67 -0
- package/dist/release/release.d.ts.map +1 -0
- package/dist/release/release.js +193 -0
- package/dist/release/release.js.map +1 -0
- package/dist/respond/ci-fix-queue.d.ts +40 -0
- package/dist/respond/ci-fix-queue.d.ts.map +1 -0
- package/dist/respond/ci-fix-queue.js +74 -0
- package/dist/respond/ci-fix-queue.js.map +1 -0
- package/dist/respond/index.d.ts +2 -1
- package/dist/respond/index.d.ts.map +1 -1
- package/dist/respond/index.js +2 -1
- package/dist/respond/index.js.map +1 -1
- package/dist/respond/merge.d.ts.map +1 -1
- package/dist/respond/merge.js +17 -1
- package/dist/respond/merge.js.map +1 -1
- package/dist/respond/respond.d.ts +33 -1
- package/dist/respond/respond.d.ts.map +1 -1
- package/dist/respond/respond.js +155 -9
- package/dist/respond/respond.js.map +1 -1
- package/dist/store/events.d.ts +30 -0
- package/dist/store/events.d.ts.map +1 -1
- package/dist/store/events.js +38 -0
- package/dist/store/events.js.map +1 -1
- package/dist/store/index.d.ts +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/triage/engine.d.ts +6 -2
- package/dist/triage/engine.d.ts.map +1 -1
- package/dist/triage/engine.js +6 -1
- package/dist/triage/engine.js.map +1 -1
- package/package.json +1 -1
- package/skill/ghostrail/SKILL.md +15 -4
- package/templates/code/ghostrail.toml +3 -0
- package/templates/code/prompts/release.md +40 -0
- package/templates/code/prompts/respond.md +2 -1
- package/templates/content/prompts/respond.md +3 -1
package/dist/doctor/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/doctor/run.ts"],"names":[],"mappings":"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"}
|
package/dist/factory/build.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { GlobalStore } from "../global/store.js";
|
|
|
4
4
|
import type { LoopDeps } from "../loop/engine.js";
|
|
5
5
|
import type { Lock, Logger, Source } from "../loop/ports.js";
|
|
6
6
|
import { type GhRunner } from "../publish/gh.js";
|
|
7
|
+
import type { ReleaseDeps, ReleaseRunConfig } from "../release/release.js";
|
|
7
8
|
import type { RespondConfig, RespondDeps } from "../respond/respond.js";
|
|
8
9
|
import { DEFAULT_FORWARD_ENV } from "../secrets/known.js";
|
|
9
10
|
import type { TriageDeps } from "../triage/engine.js";
|
|
@@ -81,4 +82,9 @@ export declare function buildRespondDeps(config: GhostrailConfig, ctx: BuildCont
|
|
|
81
82
|
deps: RespondDeps;
|
|
82
83
|
config: RespondConfig;
|
|
83
84
|
};
|
|
85
|
+
/** Assemble the release dependencies + config for `ghostrail release`. */
|
|
86
|
+
export declare function buildReleaseDeps(config: GhostrailConfig, ctx: BuildContext): {
|
|
87
|
+
deps: ReleaseDeps;
|
|
88
|
+
config: ReleaseRunConfig;
|
|
89
|
+
};
|
|
84
90
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAU,KAAK,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAW7D;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAc9E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,QAAQ,CA0BlF;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAiCtF;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAU,KAAK,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAAa,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,6DAA6D;IAC7D,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAW7D;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAc9E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,QAAQ,CA0BlF;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU,CAiCtF;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAoC9C;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,GAChB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAmBjD"}
|
package/dist/factory/build.js
CHANGED
|
@@ -6,6 +6,7 @@ import { spawnCollect } from "../backend/proc.js";
|
|
|
6
6
|
import { CommandGate } from "../gate/gate.js";
|
|
7
7
|
import { GhHost, parseRepoSlug } from "../publish/gh.js";
|
|
8
8
|
import { GitHubPublisher } from "../publish/github-publisher.js";
|
|
9
|
+
import { FileCiFixQueueStore } from "../respond/ci-fix-queue.js";
|
|
9
10
|
import { FileWatermarkStore } from "../respond/store.js";
|
|
10
11
|
import { DEFAULT_FORWARD_ENV } from "../secrets/known.js";
|
|
11
12
|
import { LinearSource, createFetchRequester } from "../source/linear.js";
|
|
@@ -137,7 +138,11 @@ export function buildRespondDeps(config, ctx) {
|
|
|
137
138
|
backend,
|
|
138
139
|
agent: new ClaudeCodeAgent(ctx.claudeProfileDir, ctx.promptSourceDir),
|
|
139
140
|
watermarks: new FileWatermarkStore(join(ctx.stateDir, "watermarks.json")),
|
|
141
|
+
ciFixQueue: new FileCiFixQueueStore(join(ctx.stateDir, "ci-fix-queue.json")),
|
|
140
142
|
baseBranch: config.factory.baseBranch,
|
|
143
|
+
// The same image the fix loop runs in. Omitted, the container backend uses
|
|
144
|
+
// its own default, which carries no git and no agent (TJ-1680).
|
|
145
|
+
...(config.backend.image === undefined ? {} : { image: config.backend.image }),
|
|
141
146
|
// Fold in tracker (Linear) comments too, not just PR comments.
|
|
142
147
|
source: buildSource(config, ctx),
|
|
143
148
|
// One store, read and written: the sink records the pass, and the lookup
|
|
@@ -159,4 +164,25 @@ export function buildRespondDeps(config, ctx) {
|
|
|
159
164
|
};
|
|
160
165
|
return { deps, config: respondConfig };
|
|
161
166
|
}
|
|
167
|
+
/** Assemble the release dependencies + config for `ghostrail release`. */
|
|
168
|
+
export function buildReleaseDeps(config, ctx) {
|
|
169
|
+
if (config.release === undefined) {
|
|
170
|
+
throw new Error("release requires a [release] config section");
|
|
171
|
+
}
|
|
172
|
+
const deps = {
|
|
173
|
+
repoPath: ctx.workRepoPath ?? ctx.repoPath,
|
|
174
|
+
backend: buildBackend(config),
|
|
175
|
+
agent: new ClaudeCodeAgent(ctx.claudeProfileDir, ctx.promptSourceDir),
|
|
176
|
+
baseBranch: config.factory.baseBranch,
|
|
177
|
+
events: new FileStore(ctx.stateDir),
|
|
178
|
+
stateDir: ctx.stateDir,
|
|
179
|
+
...(ctx.claudeProfileDir === undefined ? {} : { claudeProfileDir: ctx.claudeProfileDir }),
|
|
180
|
+
...(ctx.logger === undefined ? {} : { logger: ctx.logger }),
|
|
181
|
+
};
|
|
182
|
+
const releaseConfig = {
|
|
183
|
+
agent: { ...config.agent, prompt: config.release.prompt },
|
|
184
|
+
guardrails: config.guardrails,
|
|
185
|
+
};
|
|
186
|
+
return { deps, config: releaseConfig };
|
|
187
|
+
}
|
|
162
188
|
//# sourceMappingURL=build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/factory/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** The next-tick file's path inside a store directory (this repo's state dir). */
|
|
2
|
+
export declare function nextTickPath(dir: string): string;
|
|
3
|
+
export interface TickState {
|
|
4
|
+
/**
|
|
5
|
+
* Epoch millis of the next scheduled tick, absent for a ghostrail that has
|
|
6
|
+
* never ticked under `watch` or was last run under plain `ghostrail run`.
|
|
7
|
+
*/
|
|
8
|
+
nextTickAt?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Epoch millis of when the tick currently running started, absent when no
|
|
11
|
+
* tick is in flight. A tick that outlasts the interval is the ordinary case
|
|
12
|
+
* for an agent-backed repo, and without this the countdown reaches zero and
|
|
13
|
+
* sits at "due now" for the rest of the run with nothing to say (TJ-1683).
|
|
14
|
+
*/
|
|
15
|
+
tickStartedAt?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The loop's cycle state, or an empty record when the file is absent,
|
|
19
|
+
* unreadable, or holds anything other than the numbers it should. Each field
|
|
20
|
+
* is read independently, so a half-written file still yields whatever part of
|
|
21
|
+
* it does parse rather than nothing at all.
|
|
22
|
+
*/
|
|
23
|
+
export declare function readTickState(dir: string): Promise<TickState>;
|
|
24
|
+
/**
|
|
25
|
+
* Epoch millis of the next scheduled tick, or `undefined` when there is none
|
|
26
|
+
* to read. Kept alongside {@link readTickState} for callers that want only
|
|
27
|
+
* this one field.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readNextTickAt(dir: string): Promise<number | undefined>;
|
|
30
|
+
/** Write the whole cycle state, overwriting whatever was there. */
|
|
31
|
+
export declare function writeTickState(dir: string, state: TickState): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Record when the next tick is expected, and that no tick is running. Written
|
|
34
|
+
* at the end of a tick: the one that just finished is over, and the next is
|
|
35
|
+
* `intervalMs` away.
|
|
36
|
+
*/
|
|
37
|
+
export declare function writeNextTickAt(dir: string, at: number): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Record that a tick has started, keeping whatever `nextTickAt` was already
|
|
40
|
+
* there. Preserved rather than cleared so a reader still knows when this tick
|
|
41
|
+
* was originally due, which is what makes "running late" visible at all.
|
|
42
|
+
*/
|
|
43
|
+
export declare function markTickStarted(dir: string, at: number): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Clear any tick-in-flight marker, keeping `nextTickAt`. Called once when
|
|
46
|
+
* `watch` starts, so a process killed mid-tick cannot leave the dashboard
|
|
47
|
+
* reading "ticking now" forever.
|
|
48
|
+
*/
|
|
49
|
+
export declare function clearTickStarted(dir: string): Promise<void>;
|
|
50
|
+
//# sourceMappingURL=next-tick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-tick.d.ts","sourceRoot":"","sources":["../../src/loop/next-tick.ts"],"names":[],"mappings":"AAYA,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,MAAM,WAAW,SAAS;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAanE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7E;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Where a ghostrail's watch loop is in its cycle, so the dashboard can say so
|
|
5
|
+
* without a live connection to the daemon: when the next base tick is due, and
|
|
6
|
+
* whether one is running right now. A display convenience only: nothing in the
|
|
7
|
+
* loop reads any of this back to decide when to actually tick.
|
|
8
|
+
*/
|
|
9
|
+
const NEXT_TICK_FILE = "next-tick.json";
|
|
10
|
+
/** The next-tick file's path inside a store directory (this repo's state dir). */
|
|
11
|
+
export function nextTickPath(dir) {
|
|
12
|
+
return join(dir, NEXT_TICK_FILE);
|
|
13
|
+
}
|
|
14
|
+
/** One finite number off an unknown record, or undefined for anything else. */
|
|
15
|
+
function finiteAt(parsed, key) {
|
|
16
|
+
if (typeof parsed !== "object" || parsed === null || !(key in parsed))
|
|
17
|
+
return undefined;
|
|
18
|
+
const value = parsed[key];
|
|
19
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The loop's cycle state, or an empty record when the file is absent,
|
|
23
|
+
* unreadable, or holds anything other than the numbers it should. Each field
|
|
24
|
+
* is read independently, so a half-written file still yields whatever part of
|
|
25
|
+
* it does parse rather than nothing at all.
|
|
26
|
+
*/
|
|
27
|
+
export async function readTickState(dir) {
|
|
28
|
+
let parsed;
|
|
29
|
+
try {
|
|
30
|
+
parsed = JSON.parse(await readFile(nextTickPath(dir), "utf8"));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
const nextTickAt = finiteAt(parsed, "nextTickAt");
|
|
36
|
+
const tickStartedAt = finiteAt(parsed, "tickStartedAt");
|
|
37
|
+
return {
|
|
38
|
+
...(nextTickAt === undefined ? {} : { nextTickAt }),
|
|
39
|
+
...(tickStartedAt === undefined ? {} : { tickStartedAt }),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Epoch millis of the next scheduled tick, or `undefined` when there is none
|
|
44
|
+
* to read. Kept alongside {@link readTickState} for callers that want only
|
|
45
|
+
* this one field.
|
|
46
|
+
*/
|
|
47
|
+
export async function readNextTickAt(dir) {
|
|
48
|
+
return (await readTickState(dir)).nextTickAt;
|
|
49
|
+
}
|
|
50
|
+
/** Write the whole cycle state, overwriting whatever was there. */
|
|
51
|
+
export async function writeTickState(dir, state) {
|
|
52
|
+
await mkdir(dir, { recursive: true });
|
|
53
|
+
await writeFile(nextTickPath(dir), `${JSON.stringify(state)}\n`, "utf8");
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Record when the next tick is expected, and that no tick is running. Written
|
|
57
|
+
* at the end of a tick: the one that just finished is over, and the next is
|
|
58
|
+
* `intervalMs` away.
|
|
59
|
+
*/
|
|
60
|
+
export async function writeNextTickAt(dir, at) {
|
|
61
|
+
await writeTickState(dir, { nextTickAt: at });
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Record that a tick has started, keeping whatever `nextTickAt` was already
|
|
65
|
+
* there. Preserved rather than cleared so a reader still knows when this tick
|
|
66
|
+
* was originally due, which is what makes "running late" visible at all.
|
|
67
|
+
*/
|
|
68
|
+
export async function markTickStarted(dir, at) {
|
|
69
|
+
const existing = await readTickState(dir);
|
|
70
|
+
await writeTickState(dir, { ...existing, tickStartedAt: at });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Clear any tick-in-flight marker, keeping `nextTickAt`. Called once when
|
|
74
|
+
* `watch` starts, so a process killed mid-tick cannot leave the dashboard
|
|
75
|
+
* reading "ticking now" forever.
|
|
76
|
+
*/
|
|
77
|
+
export async function clearTickStarted(dir) {
|
|
78
|
+
const { nextTickAt, tickStartedAt } = await readTickState(dir);
|
|
79
|
+
// Nothing to clear: return before writing, so this never creates a file for a
|
|
80
|
+
// ghostrail that has never ticked. Keyed on the marker and not on
|
|
81
|
+
// `nextTickAt`, because a loop killed mid-tick before it ever recorded a
|
|
82
|
+
// schedule is precisely the case this exists for.
|
|
83
|
+
if (tickStartedAt === undefined)
|
|
84
|
+
return;
|
|
85
|
+
await writeTickState(dir, nextTickAt === undefined ? {} : { nextTickAt });
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=next-tick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-tick.js","sourceRoot":"","sources":["../../src/loop/next-tick.ts"],"names":[],"mappings":"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"}
|
package/dist/loop/schedule.d.ts
CHANGED
|
@@ -3,12 +3,21 @@
|
|
|
3
3
|
* without a clock, a tracker, or a daemon. See specs/watch-all-passes.spec.md.
|
|
4
4
|
*/
|
|
5
5
|
/** The passes `watch` can run, in the order a tick runs them. */
|
|
6
|
-
export declare const PASS_ORDER: readonly ["fix", "respond", "triage"];
|
|
6
|
+
export declare const PASS_ORDER: readonly ["fix", "respond", "triage", "release"];
|
|
7
7
|
export type PassName = (typeof PASS_ORDER)[number];
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* A schedulable pass's interval, in ms. Absent means the pass is not scheduled.
|
|
10
|
+
*
|
|
11
|
+
* `release` has no interval of its own: it is `true` when wired up (a
|
|
12
|
+
* `[release]` section is configured) and, unlike `respond`/`triage`, runs on
|
|
13
|
+
* every tick once wired, since it only ever does real work in response to an
|
|
14
|
+
* explicit request and checking for one costs nothing on the ticks that have
|
|
15
|
+
* none.
|
|
16
|
+
*/
|
|
9
17
|
export interface PassIntervals {
|
|
10
18
|
respond?: number;
|
|
11
19
|
triage?: number;
|
|
20
|
+
release?: true;
|
|
12
21
|
}
|
|
13
22
|
/** When each pass last finished, in epoch millis. Absent means it has never run. */
|
|
14
23
|
export interface PassLastRun {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,eAAO,MAAM,UAAU,kDAAmD,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,WAAW,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,EAAE,CAU3D"}
|
package/dist/loop/schedule.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* without a clock, a tracker, or a daemon. See specs/watch-all-passes.spec.md.
|
|
4
4
|
*/
|
|
5
5
|
/** The passes `watch` can run, in the order a tick runs them. */
|
|
6
|
-
export const PASS_ORDER = ["fix", "respond", "triage"];
|
|
6
|
+
export const PASS_ORDER = ["fix", "respond", "triage", "release"];
|
|
7
7
|
/**
|
|
8
8
|
* The passes due on this tick, in `PASS_ORDER`.
|
|
9
9
|
*
|
|
@@ -23,6 +23,8 @@ export function duePasses(input) {
|
|
|
23
23
|
if (last === undefined || input.now - last >= interval)
|
|
24
24
|
due.push(pass);
|
|
25
25
|
}
|
|
26
|
+
if (input.intervals.release === true)
|
|
27
|
+
due.push("release");
|
|
26
28
|
return due;
|
|
27
29
|
}
|
|
28
30
|
//# sourceMappingURL=schedule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/loop/schedule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AA8B3E;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,GAAG,GAAe,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,IAAI,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,KAAK,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** The log file's path inside a store directory (this repo's state dir). */
|
|
2
|
+
export declare function logPath(dir: string): string;
|
|
3
|
+
/** Append one line, timestamped, trimming the file first if it has grown large. */
|
|
4
|
+
export declare function appendLog(dir: string, message: string, now?: number): Promise<void>;
|
|
5
|
+
export interface LogPage {
|
|
6
|
+
/** Up to `limit` most recent lines, oldest first. */
|
|
7
|
+
lines: string[];
|
|
8
|
+
/** How many lines are currently on disk (after the last trim). */
|
|
9
|
+
total: number;
|
|
10
|
+
}
|
|
11
|
+
/** The most recent `limit` lines, oldest first, or all of them when there are fewer. */
|
|
12
|
+
export declare function readLog(dir: string, limit: number): Promise<LogPage>;
|
|
13
|
+
//# sourceMappingURL=tick-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tick-log.d.ts","sourceRoot":"","sources":["../../src/loop/tick-log.ts"],"names":[],"mappings":"AAmBA,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,mFAAmF;AACnF,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;AAqBD,MAAM,WAAW,OAAO;IACtB,qDAAqD;IACrD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wFAAwF;AACxF,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { appendFile, mkdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* A rolling, capped log of what a ghostrail's watch loop has logged, so the
|
|
5
|
+
* dashboard can show recent activity without shelling out to `journalctl`.
|
|
6
|
+
* Not a substitute for a real log: it caps at {@link MAX_LOG_LINES} and drops
|
|
7
|
+
* the oldest lines once it does.
|
|
8
|
+
*/
|
|
9
|
+
const LOG_FILE = "watch.log";
|
|
10
|
+
/** Once appending pushes the file past this many lines, it's trimmed. */
|
|
11
|
+
const MAX_LOG_LINES = 5000;
|
|
12
|
+
/** What a trim keeps: the most recent lines, oldest of them dropped first. */
|
|
13
|
+
const TRIM_TO_LINES = 2000;
|
|
14
|
+
// Trimming reads and rewrites the whole file, so it only runs once the file is
|
|
15
|
+
// comfortably past its cap; the common append is a plain O(1) appendFile.
|
|
16
|
+
const TRIM_CHECK_BYTES = 512 * 1024;
|
|
17
|
+
/** The log file's path inside a store directory (this repo's state dir). */
|
|
18
|
+
export function logPath(dir) {
|
|
19
|
+
return join(dir, LOG_FILE);
|
|
20
|
+
}
|
|
21
|
+
/** Append one line, timestamped, trimming the file first if it has grown large. */
|
|
22
|
+
export async function appendLog(dir, message, now = Date.now()) {
|
|
23
|
+
await mkdir(dir, { recursive: true });
|
|
24
|
+
const path = logPath(dir);
|
|
25
|
+
const line = `${new Date(now).toISOString()} ${message.replace(/\r?\n/g, " ")}\n`;
|
|
26
|
+
await appendFile(path, line, "utf8");
|
|
27
|
+
await trimIfLarge(path);
|
|
28
|
+
}
|
|
29
|
+
async function trimIfLarge(path) {
|
|
30
|
+
let size;
|
|
31
|
+
try {
|
|
32
|
+
size = (await stat(path)).size;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (size < TRIM_CHECK_BYTES)
|
|
38
|
+
return;
|
|
39
|
+
let raw;
|
|
40
|
+
try {
|
|
41
|
+
raw = await readFile(path, "utf8");
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const lines = raw.split("\n").filter((line) => line.length > 0);
|
|
47
|
+
if (lines.length <= MAX_LOG_LINES)
|
|
48
|
+
return;
|
|
49
|
+
await writeFile(path, `${lines.slice(-TRIM_TO_LINES).join("\n")}\n`, "utf8");
|
|
50
|
+
}
|
|
51
|
+
/** The most recent `limit` lines, oldest first, or all of them when there are fewer. */
|
|
52
|
+
export async function readLog(dir, limit) {
|
|
53
|
+
let raw;
|
|
54
|
+
try {
|
|
55
|
+
raw = await readFile(logPath(dir), "utf8");
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return { lines: [], total: 0 };
|
|
59
|
+
}
|
|
60
|
+
const lines = raw.split("\n").filter((line) => line.length > 0);
|
|
61
|
+
const bounded = Math.max(0, limit);
|
|
62
|
+
return { lines: lines.slice(Math.max(0, lines.length - bounded)), total: lines.length };
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=tick-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tick-log.js","sourceRoot":"","sources":["../../src/loop/tick-log.ts"],"names":[],"mappings":"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"}
|
package/dist/publish/gh.d.ts
CHANGED
|
@@ -32,6 +32,29 @@ export declare function ghCreateLabelArgs(label: string): string[];
|
|
|
32
32
|
* the head branch, rather than rewriting either branch's history).
|
|
33
33
|
*/
|
|
34
34
|
export declare function ghMergePrArgs(prNumber: number): string[];
|
|
35
|
+
/**
|
|
36
|
+
* How long to wait for GitHub to report the head we just pushed, and how often
|
|
37
|
+
* to ask. GitHub recomputes a PR's mergeability asynchronously; until it does,
|
|
38
|
+
* it answers with whatever it worked out for the previous head, which for the
|
|
39
|
+
* resolve-conflicts flow is the conflicted state that flow just fixed
|
|
40
|
+
* (TJ-1684). Seconds in practice, so the cap is generous rather than tuned.
|
|
41
|
+
*/
|
|
42
|
+
export declare const MERGE_HEAD_TIMEOUT_MS = 60000;
|
|
43
|
+
export declare const MERGE_HEAD_POLL_MS = 2000;
|
|
44
|
+
/** What `gh pr view --json headRefOid,mergeable` reports, as far as we use it. */
|
|
45
|
+
export interface PrHead {
|
|
46
|
+
headRefOid?: string;
|
|
47
|
+
mergeable?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Parse `gh pr view --json headRefOid,mergeable`, tolerating anything unexpected. */
|
|
50
|
+
export declare function parsePrHead(stdout: string): PrHead;
|
|
51
|
+
/**
|
|
52
|
+
* Whether the forge has caught up with `expectedHeadSha`: it reports that exact
|
|
53
|
+
* commit as the PR's head, and has finished working out what merging it would
|
|
54
|
+
* do. `UNKNOWN` is GitHub still computing, which is a different answer from
|
|
55
|
+
* "conflicting" and must not be mistaken for one.
|
|
56
|
+
*/
|
|
57
|
+
export declare function hasCaughtUp(head: PrHead, expectedHeadSha: string): boolean;
|
|
35
58
|
/** Build `gh pr create` args from a PR spec (one `--label` per label, in order). */
|
|
36
59
|
export declare function ghOpenPrArgs(spec: PrSpec): string[];
|
|
37
60
|
/** Parse `gh pr list --json number,url,headRefName` output into open PRs. */
|
|
@@ -44,14 +67,21 @@ export declare function parsePrStatus(stdout: string): PrStatus;
|
|
|
44
67
|
export declare class GhHost implements GitHost {
|
|
45
68
|
private readonly run;
|
|
46
69
|
private readonly repoSlug?;
|
|
70
|
+
private readonly sleep;
|
|
71
|
+
private readonly now;
|
|
47
72
|
/**
|
|
48
73
|
* @param run The `gh` runner.
|
|
49
74
|
* @param repoSlug Optional `owner/repo`. When set, every `gh` invocation is
|
|
50
75
|
* scoped to it with `--repo`, so commands resolve the target repo from the
|
|
51
76
|
* GitHub API rather than a local checkout. Required for the fully-ephemeral
|
|
52
77
|
* flow, where the host has no clone.
|
|
78
|
+
* @param clock Injected only so the merge wait (TJ-1684) can be tested
|
|
79
|
+
* without real time passing.
|
|
53
80
|
*/
|
|
54
|
-
constructor(run: GhRunner, repoSlug?: string
|
|
81
|
+
constructor(run: GhRunner, repoSlug?: string, clock?: {
|
|
82
|
+
sleep?: (ms: number) => Promise<void>;
|
|
83
|
+
now?: () => number;
|
|
84
|
+
});
|
|
55
85
|
openPr(spec: PrSpec): Promise<PrRef>;
|
|
56
86
|
/**
|
|
57
87
|
* Create `label` when the repo does not have it yet.
|
|
@@ -81,7 +111,18 @@ export declare class GhHost implements GitHost {
|
|
|
81
111
|
listComments(prNumber: number): Promise<PrComment[]>;
|
|
82
112
|
postComment(prNumber: number, body: string): Promise<void>;
|
|
83
113
|
getPrStatus(prNumber: number): Promise<PrStatus>;
|
|
84
|
-
mergePr(prNumber: number): Promise<void>;
|
|
114
|
+
mergePr(prNumber: number, expectedHeadSha?: string): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Block until GitHub reports `expectedHeadSha` as the PR's head with a
|
|
117
|
+
* settled mergeability, or the timeout runs out.
|
|
118
|
+
*
|
|
119
|
+
* A timeout does not throw. Everything this guards against is GitHub being
|
|
120
|
+
* slow, and the merge that follows reports its own failure perfectly well;
|
|
121
|
+
* refusing to even attempt it would turn a slow answer into a worse outcome
|
|
122
|
+
* than the bug this fixes. A read that fails is treated the same way: keep
|
|
123
|
+
* waiting, then merge and let the merge speak.
|
|
124
|
+
*/
|
|
125
|
+
private waitForHead;
|
|
85
126
|
private exec;
|
|
86
127
|
}
|
|
87
128
|
//# sourceMappingURL=gh.d.ts.map
|
package/dist/publish/gh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,GAAG,CACrB,IAAI,EAAE,SAAS,MAAM,EAAE,KACpB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhE;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAE7E,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAUzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBnD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxD;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB5D;AAqCD,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CActD;AAWD,sEAAsE;AACtE,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC
|
|
1
|
+
{"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"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"}
|
package/dist/publish/gh.js
CHANGED
|
@@ -51,6 +51,42 @@ export function ghCreateLabelArgs(label) {
|
|
|
51
51
|
export function ghMergePrArgs(prNumber) {
|
|
52
52
|
return ["pr", "merge", String(prNumber), "--merge"];
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* How long to wait for GitHub to report the head we just pushed, and how often
|
|
56
|
+
* to ask. GitHub recomputes a PR's mergeability asynchronously; until it does,
|
|
57
|
+
* it answers with whatever it worked out for the previous head, which for the
|
|
58
|
+
* resolve-conflicts flow is the conflicted state that flow just fixed
|
|
59
|
+
* (TJ-1684). Seconds in practice, so the cap is generous rather than tuned.
|
|
60
|
+
*/
|
|
61
|
+
export const MERGE_HEAD_TIMEOUT_MS = 60_000;
|
|
62
|
+
export const MERGE_HEAD_POLL_MS = 2_000;
|
|
63
|
+
/** Parse `gh pr view --json headRefOid,mergeable`, tolerating anything unexpected. */
|
|
64
|
+
export function parsePrHead(stdout) {
|
|
65
|
+
try {
|
|
66
|
+
const parsed = JSON.parse(stdout);
|
|
67
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
68
|
+
return {};
|
|
69
|
+
const record = parsed;
|
|
70
|
+
const headRefOid = record.headRefOid;
|
|
71
|
+
const mergeable = record.mergeable;
|
|
72
|
+
return {
|
|
73
|
+
...(typeof headRefOid === "string" ? { headRefOid } : {}),
|
|
74
|
+
...(typeof mergeable === "string" ? { mergeable } : {}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Whether the forge has caught up with `expectedHeadSha`: it reports that exact
|
|
83
|
+
* commit as the PR's head, and has finished working out what merging it would
|
|
84
|
+
* do. `UNKNOWN` is GitHub still computing, which is a different answer from
|
|
85
|
+
* "conflicting" and must not be mistaken for one.
|
|
86
|
+
*/
|
|
87
|
+
export function hasCaughtUp(head, expectedHeadSha) {
|
|
88
|
+
return head.headRefOid === expectedHeadSha && head.mergeable !== "UNKNOWN";
|
|
89
|
+
}
|
|
54
90
|
/** Build `gh pr create` args from a PR spec (one `--label` per label, in order). */
|
|
55
91
|
export function ghOpenPrArgs(spec) {
|
|
56
92
|
const args = [
|
|
@@ -172,16 +208,22 @@ function safeJsonArray(text) {
|
|
|
172
208
|
export class GhHost {
|
|
173
209
|
run;
|
|
174
210
|
repoSlug;
|
|
211
|
+
sleep;
|
|
212
|
+
now;
|
|
175
213
|
/**
|
|
176
214
|
* @param run The `gh` runner.
|
|
177
215
|
* @param repoSlug Optional `owner/repo`. When set, every `gh` invocation is
|
|
178
216
|
* scoped to it with `--repo`, so commands resolve the target repo from the
|
|
179
217
|
* GitHub API rather than a local checkout. Required for the fully-ephemeral
|
|
180
218
|
* flow, where the host has no clone.
|
|
219
|
+
* @param clock Injected only so the merge wait (TJ-1684) can be tested
|
|
220
|
+
* without real time passing.
|
|
181
221
|
*/
|
|
182
|
-
constructor(run, repoSlug) {
|
|
222
|
+
constructor(run, repoSlug, clock = {}) {
|
|
183
223
|
this.run = run;
|
|
184
224
|
this.repoSlug = repoSlug;
|
|
225
|
+
this.sleep = clock.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
226
|
+
this.now = clock.now ?? (() => Date.now());
|
|
185
227
|
}
|
|
186
228
|
async openPr(spec) {
|
|
187
229
|
for (const label of spec.labels)
|
|
@@ -259,9 +301,45 @@ export class GhHost {
|
|
|
259
301
|
]);
|
|
260
302
|
return parsePrStatus(result.stdout);
|
|
261
303
|
}
|
|
262
|
-
async mergePr(prNumber) {
|
|
304
|
+
async mergePr(prNumber, expectedHeadSha) {
|
|
305
|
+
if (expectedHeadSha !== undefined)
|
|
306
|
+
await this.waitForHead(prNumber, expectedHeadSha);
|
|
263
307
|
await this.exec(ghMergePrArgs(prNumber));
|
|
264
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Block until GitHub reports `expectedHeadSha` as the PR's head with a
|
|
311
|
+
* settled mergeability, or the timeout runs out.
|
|
312
|
+
*
|
|
313
|
+
* A timeout does not throw. Everything this guards against is GitHub being
|
|
314
|
+
* slow, and the merge that follows reports its own failure perfectly well;
|
|
315
|
+
* refusing to even attempt it would turn a slow answer into a worse outcome
|
|
316
|
+
* than the bug this fixes. A read that fails is treated the same way: keep
|
|
317
|
+
* waiting, then merge and let the merge speak.
|
|
318
|
+
*/
|
|
319
|
+
async waitForHead(prNumber, expectedHeadSha) {
|
|
320
|
+
const deadline = this.now() + MERGE_HEAD_TIMEOUT_MS;
|
|
321
|
+
for (;;) {
|
|
322
|
+
let head = {};
|
|
323
|
+
try {
|
|
324
|
+
const result = await this.exec([
|
|
325
|
+
"pr",
|
|
326
|
+
"view",
|
|
327
|
+
String(prNumber),
|
|
328
|
+
"--json",
|
|
329
|
+
"headRefOid,mergeable",
|
|
330
|
+
]);
|
|
331
|
+
head = parsePrHead(result.stdout);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
// A failed read is not an answer. Fall through to the deadline check.
|
|
335
|
+
}
|
|
336
|
+
if (hasCaughtUp(head, expectedHeadSha))
|
|
337
|
+
return;
|
|
338
|
+
if (this.now() >= deadline)
|
|
339
|
+
return;
|
|
340
|
+
await this.sleep(MERGE_HEAD_POLL_MS);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
265
343
|
async exec(args) {
|
|
266
344
|
const scoped = this.repoSlug === undefined ? args : [...args, "--repo", this.repoSlug];
|
|
267
345
|
const result = await this.run(scoped);
|