@intentius/chant 0.124.29 → 0.124.31
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/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +4 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +27 -5
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +64 -0
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +99 -0
- package/dist/cli/registry.d.ts +35 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/pr-pipeline.d.ts +24 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +16 -0
- package/dist/components/pr-run.d.ts +20 -2
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +26 -13
- package/dist/components/wave-plan.d.ts +11 -0
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +26 -0
- package/dist/lifecycle/release-ledger.d.ts +8 -3
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +2 -0
- package/dist/lifecycle/run-ledger.d.ts +1 -1
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +9 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -0
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +1 -0
- package/dist/op/activities/shell.d.ts +6 -0
- package/dist/op/activities/shell.d.ts.map +1 -1
- package/dist/op/activities/shell.js +1 -1
- package/dist/op/local-executor.d.ts +35 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +31 -6
- package/dist/op/redact.d.ts +34 -0
- package/dist/op/redact.d.ts.map +1 -0
- package/dist/op/redact.js +94 -0
- package/dist/op/runtime.d.ts +27 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtime.js +20 -0
- package/dist/op/step-console.d.ts +2 -0
- package/dist/op/step-console.d.ts.map +1 -1
- package/dist/op/step-console.js +5 -2
- package/dist/pr-forge.d.ts +40 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +56 -6
- package/dist/pr-loop.d.ts +10 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +7 -0
- package/dist/pr-report-url.d.ts +8 -0
- package/dist/pr-report-url.d.ts.map +1 -1
- package/dist/pr-report-url.js +47 -1
- package/dist/run-event-stream.d.ts +2 -2
- package/dist/run-event-stream.d.ts.map +1 -1
- package/dist/run-event-stream.js +2 -2
- package/dist/run-event.d.ts +15 -0
- package/dist/run-event.d.ts.map +1 -1
- package/dist/run-event.js +2 -0
- package/dist/wave-runtime.mjs +171 -171
- package/dist/workspace/ci-green-forge.d.ts +2 -0
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green.d.ts +2 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +4 -2
- package/dist/workspace/ci-run-index.d.ts +96 -0
- package/dist/workspace/ci-run-index.d.ts.map +1 -0
- package/dist/workspace/ci-run-index.js +162 -0
- package/dist/workspace/ci-run-index.schema.json +50 -0
- package/dist/workspace/ci-run.d.ts +299 -0
- package/dist/workspace/ci-run.d.ts.map +1 -0
- package/dist/workspace/ci-run.js +691 -0
- package/dist/workspace/ci-runner-key.d.ts +120 -0
- package/dist/workspace/ci-runner-key.d.ts.map +1 -0
- package/dist/workspace/ci-runner-key.js +217 -0
- package/dist/workspace/ci-secrets.d.ts +65 -0
- package/dist/workspace/ci-secrets.d.ts.map +1 -0
- package/dist/workspace/ci-secrets.js +211 -0
- package/dist/workspace/ci-serve.d.ts +227 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -0
- package/dist/workspace/ci-serve.js +468 -0
- package/dist/workspace/pr-report.schema.json +5 -0
- package/dist/workspace/reason-codes.d.ts +6 -2
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +7 -2
- package/dist/workspace/run-event.schema.json +14 -3
- package/dist/workspace/status-stewards.d.ts +2 -0
- package/dist/workspace/status-stewards.d.ts.map +1 -1
- package/dist/workspace/status-stewards.js +1 -0
- package/dist/workspace/status.schema.json +12 -1
- package/dist/workspace/trust/trust-write.d.ts +109 -0
- package/dist/workspace/trust/trust-write.d.ts.map +1 -0
- package/dist/workspace/trust/trust-write.js +320 -0
- package/dist/workspace/trust-write.schema.json +265 -0
- package/package.json +1 -1
- package/src/cli/handlers/build.test.ts +15 -0
- package/src/cli/handlers/build.ts +4 -1
- package/src/cli/handlers/fan-out.test.ts +82 -0
- package/src/cli/handlers/fan-out.ts +34 -5
- package/src/cli/handlers/pr.ts +5 -0
- package/src/cli/main.test.ts +1 -0
- package/src/cli/main.ts +64 -0
- package/src/cli/parse-args.ts +71 -0
- package/src/cli/registry.ts +35 -1
- package/src/components/pr-pipeline.ts +32 -0
- package/src/components/pr-run.test.ts +127 -0
- package/src/components/pr-run.ts +32 -12
- package/src/components/wave-plan.ts +30 -0
- package/src/lifecycle/release-ledger.ts +9 -3
- package/src/lifecycle/run-ledger.ts +7 -1
- package/src/op/activities/activity-contracts.ts +1 -0
- package/src/op/activities/shell.ts +7 -1
- package/src/op/local-executor.ts +58 -7
- package/src/op/redact.ts +93 -0
- package/src/op/runtime.ts +42 -0
- package/src/op/step-console.ts +7 -2
- package/src/pr-forge.test.ts +54 -0
- package/src/pr-forge.ts +92 -6
- package/src/pr-loop.test.ts +13 -1
- package/src/pr-loop.ts +16 -0
- package/src/pr-report-url.ts +53 -1
- package/src/run-event-stream.ts +4 -3
- package/src/run-event.ts +17 -0
- package/src/workspace/ci-green-forge.ts +2 -0
- package/src/workspace/ci-green.ts +6 -2
- package/src/workspace/ci-run-index.schema.json +50 -0
- package/src/workspace/ci-run-index.test.ts +353 -0
- package/src/workspace/ci-run-index.ts +192 -0
- package/src/workspace/ci-run.test.ts +716 -0
- package/src/workspace/ci-run.ts +833 -0
- package/src/workspace/ci-runner-key.test.ts +166 -0
- package/src/workspace/ci-runner-key.ts +250 -0
- package/src/workspace/ci-secrets.test.ts +106 -0
- package/src/workspace/ci-secrets.ts +213 -0
- package/src/workspace/ci-serve.test.ts +367 -0
- package/src/workspace/ci-serve.ts +574 -0
- package/src/workspace/pr-report.schema.json +5 -0
- package/src/workspace/reason-codes.test.ts +2 -0
- package/src/workspace/reason-codes.ts +7 -2
- package/src/workspace/run-event.schema.json +14 -3
- package/src/workspace/status-stewards.ts +3 -0
- package/src/workspace/status.schema.json +12 -1
- package/src/workspace/trust/trust-write.test.ts +179 -0
- package/src/workspace/trust/trust-write.ts +377 -0
- package/src/workspace/trust-write.schema.json +265 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `chant ci serve` (#4095, epic #4101): the chant runner's trigger loop on one
|
|
3
|
+
* host. It polls the forge for the open pull requests into the target branch
|
|
4
|
+
* and for the branch's head, and runs the pull-request jobs with
|
|
5
|
+
* {@link ciRun} (./ci-run.ts): `plan` for each new pull request head, and
|
|
6
|
+
* `apply` for each new commit on the target branch, measured from the head
|
|
7
|
+
* the previous poll saw (the push's `before`).
|
|
8
|
+
*
|
|
9
|
+
* - Dedupe. A state file in the state directory keeps every job it started,
|
|
10
|
+
* keyed by job and commit (`plan:<pr>:<sha>`, `apply:<sha>`), with how it
|
|
11
|
+
* ended, and the target head the last apply was measured to. A job already
|
|
12
|
+
* in it is not started again, unless it failed and `rerunFailed` asks for
|
|
13
|
+
* it: the forge's "re-run failed jobs".
|
|
14
|
+
* - One apply per group. An apply takes the git-ref lease (../lifecycle/lease.ts,
|
|
15
|
+
* the one `chant operator` holds) named for `prApplyGroup`, renews it while
|
|
16
|
+
* it runs and releases it after. An apply that finds it held waits for a
|
|
17
|
+
* later poll, as a forge's concurrency group queues it.
|
|
18
|
+
* - Merged pull request. An apply asks the forge for the pull request whose
|
|
19
|
+
* merge commit the new head is (`pullRequestFor`, as pr-apply does) and
|
|
20
|
+
* passes it as `--pr`, so its commit status link and run index use
|
|
21
|
+
* `<pr>/<commit>`. With none found it runs without `--pr`.
|
|
22
|
+
* - Resume records. Each apply gets `<state>/resume/<prApplyRecordKey>.json`
|
|
23
|
+
* as its `--resume` record, so a re-run of a failed apply at the same
|
|
24
|
+
* commit finishes under the approval it has. This replaces the forge's CI
|
|
25
|
+
* cache.
|
|
26
|
+
* - Capacity. At most `maxJobs` jobs run at once. A job over the limit is not
|
|
27
|
+
* recorded, so a later poll starts it.
|
|
28
|
+
*
|
|
29
|
+
* Host mode only: each job runs in a fresh worktree on this host as this
|
|
30
|
+
* user, with the clean environment `ciRun` gives it. A pull request from a
|
|
31
|
+
* fork is never planned, and with `authors` only those people's pull requests
|
|
32
|
+
* are. Container isolation is #4015.
|
|
33
|
+
*
|
|
34
|
+
* A webhook is not here yet. {@link ciServeSchedule} takes triggers, and
|
|
35
|
+
* {@link ciServeObserve} is the poll that makes them; a webhook handler would
|
|
36
|
+
* turn a checked payload into the same triggers and schedule them.
|
|
37
|
+
*/
|
|
38
|
+
import { type OpenPullRequest } from "../pr-forge.js";
|
|
39
|
+
import type { CommandContext } from "../cli/registry.js";
|
|
40
|
+
import { type CiJobName, type CiRunRequest, type CiRunResult } from "./ci-run.js";
|
|
41
|
+
/** The forges `ci serve` polls. GitLab is later. */
|
|
42
|
+
export type CiServeForgeKind = "github" | "forgejo";
|
|
43
|
+
/** What `ci serve` reads from the forge: the two calls GitHub's and Forgejo's clients have (../pr-forge.ts). */
|
|
44
|
+
export interface CiServeForge {
|
|
45
|
+
openPullRequests(base: string): Promise<OpenPullRequest[]>;
|
|
46
|
+
branchHead(branch: string): Promise<string | undefined>;
|
|
47
|
+
/** The merged pull request that produced a commit, as pr-apply finds it (`pullRequestFor`). Without it an apply gets no `--pr`. */
|
|
48
|
+
pullRequestFor?(sha: string): Promise<number | null>;
|
|
49
|
+
}
|
|
50
|
+
/** A job the forge's state calls for: the plan of a pull request's head, or the apply of a target-branch commit. */
|
|
51
|
+
export type CiServeTrigger = {
|
|
52
|
+
job: "plan";
|
|
53
|
+
commit: string;
|
|
54
|
+
base: string;
|
|
55
|
+
pr: number;
|
|
56
|
+
rerun?: boolean;
|
|
57
|
+
} | {
|
|
58
|
+
job: "apply";
|
|
59
|
+
commit: string;
|
|
60
|
+
base: string;
|
|
61
|
+
rerun?: boolean;
|
|
62
|
+
};
|
|
63
|
+
/** One job in the state file. */
|
|
64
|
+
export interface CiServeJobState {
|
|
65
|
+
job: CiJobName;
|
|
66
|
+
commit: string;
|
|
67
|
+
base: string;
|
|
68
|
+
pr?: number;
|
|
69
|
+
/** `running` while it runs; a `running` entry no live process holds is taken as failed. */
|
|
70
|
+
status: "running" | "ok" | "fail";
|
|
71
|
+
runId: string;
|
|
72
|
+
attempts: number;
|
|
73
|
+
startedAt: string;
|
|
74
|
+
settledAt?: string;
|
|
75
|
+
/** Why it failed, in a line. */
|
|
76
|
+
failure?: string;
|
|
77
|
+
/** Where its report was copied. */
|
|
78
|
+
report?: string;
|
|
79
|
+
}
|
|
80
|
+
/** The state file, `<state>/<prApplyGroup>.json`. */
|
|
81
|
+
export interface CiServeState {
|
|
82
|
+
schema: 1;
|
|
83
|
+
forge: CiServeForgeKind;
|
|
84
|
+
repo: string;
|
|
85
|
+
env: string;
|
|
86
|
+
branch: string;
|
|
87
|
+
member?: string;
|
|
88
|
+
/** The target branch's head the last apply was measured to, or the head the first poll found. */
|
|
89
|
+
target?: string;
|
|
90
|
+
jobs: Record<string, CiServeJobState>;
|
|
91
|
+
}
|
|
92
|
+
/** What a pass did, in order, for the log. */
|
|
93
|
+
export type CiServeEvent = {
|
|
94
|
+
type: "baseline";
|
|
95
|
+
commit: string;
|
|
96
|
+
} | {
|
|
97
|
+
type: "no-branch";
|
|
98
|
+
branch: string;
|
|
99
|
+
} | {
|
|
100
|
+
type: "skipped";
|
|
101
|
+
pr: number;
|
|
102
|
+
reason: "fork" | "author";
|
|
103
|
+
author?: string;
|
|
104
|
+
} | {
|
|
105
|
+
type: "held";
|
|
106
|
+
job: CiJobName;
|
|
107
|
+
commit: string;
|
|
108
|
+
pr?: number;
|
|
109
|
+
reason: "capacity" | "lease";
|
|
110
|
+
heldBy?: string;
|
|
111
|
+
} | {
|
|
112
|
+
type: "started";
|
|
113
|
+
job: CiJobName;
|
|
114
|
+
commit: string;
|
|
115
|
+
pr?: number;
|
|
116
|
+
base: string;
|
|
117
|
+
runId: string;
|
|
118
|
+
attempt: number;
|
|
119
|
+
resume?: string;
|
|
120
|
+
} | {
|
|
121
|
+
type: "settled";
|
|
122
|
+
job: CiJobName;
|
|
123
|
+
commit: string;
|
|
124
|
+
pr?: number;
|
|
125
|
+
status: "ok" | "fail";
|
|
126
|
+
failure?: string;
|
|
127
|
+
report?: string;
|
|
128
|
+
} | {
|
|
129
|
+
type: "error";
|
|
130
|
+
message: string;
|
|
131
|
+
};
|
|
132
|
+
/** The `ciRun` request fields `ci serve` passes through to every job: the generator's options and the runner's. */
|
|
133
|
+
export type CiServeJobOptions = Omit<CiRunRequest, "cwd" | "job" | "env" | "forge" | "base" | "pr" | "commit" | "output" | "resumeRecord" | "runId">;
|
|
134
|
+
export interface CiServeOptions {
|
|
135
|
+
/** The host's clone, or a workspace member's directory in it. */
|
|
136
|
+
cwd: string;
|
|
137
|
+
forge: CiServeForgeKind;
|
|
138
|
+
/** `owner/name`. */
|
|
139
|
+
repo: string;
|
|
140
|
+
env: string;
|
|
141
|
+
client: CiServeForge;
|
|
142
|
+
/** Default `<git common dir>/chant/ci-serve`. */
|
|
143
|
+
stateDir?: string;
|
|
144
|
+
/** Default 1. */
|
|
145
|
+
maxJobs?: number;
|
|
146
|
+
/** Plan only pull requests these logins opened, without case. Default anyone with a branch in the repository. */
|
|
147
|
+
authors?: readonly string[];
|
|
148
|
+
/** Run again the failed apply at the target's head, and the failed plans of open heads. */
|
|
149
|
+
rerunFailed?: boolean;
|
|
150
|
+
/** Passed to each job. `job.hostEnv` gets `GITHUB_REPOSITORY` set to `repo`. */
|
|
151
|
+
job?: CiServeJobOptions;
|
|
152
|
+
/** This process's lease identity. Default `currentHolderId()`. */
|
|
153
|
+
holder?: string;
|
|
154
|
+
leaseTtlMs?: number;
|
|
155
|
+
log?: (event: CiServeEvent) => void;
|
|
156
|
+
now?: () => Date;
|
|
157
|
+
/** Runs a job. Default {@link ciRun}. */
|
|
158
|
+
run?: (req: CiRunRequest) => Promise<CiRunResult>;
|
|
159
|
+
}
|
|
160
|
+
/** The jobs this process runs now, by state key, shared by every pass of one loop. */
|
|
161
|
+
export interface CiServeRuntime {
|
|
162
|
+
inflight: Map<string, Promise<CiServeJobState>>;
|
|
163
|
+
}
|
|
164
|
+
export declare const newCiServeRuntime: () => CiServeRuntime;
|
|
165
|
+
/** The state key of a job. */
|
|
166
|
+
export declare function ciServeKey(t: {
|
|
167
|
+
job: CiJobName;
|
|
168
|
+
commit: string;
|
|
169
|
+
pr?: number;
|
|
170
|
+
}): string;
|
|
171
|
+
/** Where a serve keeps its state when `--state` names nowhere: beside the run events, in the repository's common git directory. */
|
|
172
|
+
export declare function defaultCiServeStateDir(cwd: string): string;
|
|
173
|
+
/** The state file, or a new one. */
|
|
174
|
+
export declare function readCiServeState(file: string, fresh: Omit<CiServeState, "schema" | "jobs">): CiServeState;
|
|
175
|
+
/**
|
|
176
|
+
* One poll of the forge, as triggers: an apply when the target's head moved
|
|
177
|
+
* since the last apply (none on the first poll, which only notes the head),
|
|
178
|
+
* then a plan for each open pull request head not yet planned, oldest pull
|
|
179
|
+
* request first. A job already in the state file is left out unless it
|
|
180
|
+
* failed and `rerunFailed` is set. The first poll's head is written to the
|
|
181
|
+
* state file.
|
|
182
|
+
*/
|
|
183
|
+
export declare function ciServeObserve(opts: CiServeOptions, rt?: CiServeRuntime): Promise<{
|
|
184
|
+
triggers: CiServeTrigger[];
|
|
185
|
+
events: CiServeEvent[];
|
|
186
|
+
}>;
|
|
187
|
+
/** What {@link ciServeSchedule} did with the triggers. */
|
|
188
|
+
export interface CiServeScheduled {
|
|
189
|
+
/** Each job started, settling to its state entry. */
|
|
190
|
+
started: Promise<CiServeJobState>[];
|
|
191
|
+
events: CiServeEvent[];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Start the triggers' jobs, at most `maxJobs` at once with the jobs this
|
|
195
|
+
* process already runs. An apply first takes its group's lease. A trigger
|
|
196
|
+
* that can't start (over capacity, lease held, or already running here) is
|
|
197
|
+
* reported and not recorded, so the next poll finds it again.
|
|
198
|
+
*/
|
|
199
|
+
export declare function ciServeSchedule(opts: CiServeOptions, triggers: readonly CiServeTrigger[], rt?: CiServeRuntime): Promise<CiServeScheduled>;
|
|
200
|
+
/** One pass: observe, schedule, and with `wait` wait for the jobs it started. */
|
|
201
|
+
export declare function ciServePass(opts: CiServeOptions, rt?: CiServeRuntime, wait?: boolean): Promise<{
|
|
202
|
+
events: CiServeEvent[];
|
|
203
|
+
jobs: CiServeJobState[];
|
|
204
|
+
}>;
|
|
205
|
+
/**
|
|
206
|
+
* The loop: a pass every `intervalMs` until `signal` aborts, jobs running
|
|
207
|
+
* across passes up to `maxJobs`. A pass the forge fails is logged and the
|
|
208
|
+
* loop goes on. On abort it waits for the jobs that run.
|
|
209
|
+
*/
|
|
210
|
+
export declare function ciServeLoop(opts: CiServeOptions & {
|
|
211
|
+
intervalMs: number;
|
|
212
|
+
signal?: AbortSignal;
|
|
213
|
+
}): Promise<void>;
|
|
214
|
+
/** One line for an event, as `ci serve` prints it. */
|
|
215
|
+
export declare function formatCiServeEvent(e: CiServeEvent): string;
|
|
216
|
+
/**
|
|
217
|
+
* `chant ci serve|run --setup-key [--trust [--principal <name>]] [--state <dir>] [--branch <name>]` (#4099):
|
|
218
|
+
* make the host's runner key when there is none, print its public half on
|
|
219
|
+
* stdout, and say whether the target's head lists it. With --trust, commit
|
|
220
|
+
* the runner entry on a branch of its own and push it for review.
|
|
221
|
+
*/
|
|
222
|
+
export declare function runnerKeySetupCommand(ctx: CommandContext): number;
|
|
223
|
+
/** `--interval`: seconds, or a duration such as `30s` or `2m`. Default 30 seconds. */
|
|
224
|
+
export declare function ciServeInterval(value: string | undefined): number;
|
|
225
|
+
/** `chant ci serve` (#4095). */
|
|
226
|
+
export declare function runCiServe(ctx: CommandContext): Promise<number>;
|
|
227
|
+
//# sourceMappingURL=ci-serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-serve.d.ts","sourceRoot":"","sources":["../../src/workspace/ci-serve.ts"],"names":[],"mappings":"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"}
|