looply-cli 0.5.8 → 0.5.9

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 (84) hide show
  1. package/dist/.src-hash +1 -1
  2. package/dist/bin.d.ts.map +1 -1
  3. package/dist/bin.js +9 -1
  4. package/dist/bin.js.map +1 -1
  5. package/dist/branch-delivery-wiring.d.ts +41 -0
  6. package/dist/branch-delivery-wiring.d.ts.map +1 -0
  7. package/dist/branch-delivery-wiring.js +85 -0
  8. package/dist/branch-delivery-wiring.js.map +1 -0
  9. package/dist/branch-delivery.d.ts +275 -0
  10. package/dist/branch-delivery.d.ts.map +1 -0
  11. package/dist/branch-delivery.js +659 -0
  12. package/dist/branch-delivery.js.map +1 -0
  13. package/dist/config.d.ts +20 -1
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +24 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/coordinator-state.d.ts.map +1 -1
  18. package/dist/coordinator-state.js +28 -18
  19. package/dist/coordinator-state.js.map +1 -1
  20. package/dist/daemon-cmd.d.ts.map +1 -1
  21. package/dist/daemon-cmd.js +64 -5
  22. package/dist/daemon-cmd.js.map +1 -1
  23. package/dist/daemon-lock.d.ts +65 -2
  24. package/dist/daemon-lock.d.ts.map +1 -1
  25. package/dist/daemon-lock.js +149 -5
  26. package/dist/daemon-lock.js.map +1 -1
  27. package/dist/daemon.d.ts +12 -1
  28. package/dist/daemon.d.ts.map +1 -1
  29. package/dist/daemon.js +23 -3
  30. package/dist/daemon.js.map +1 -1
  31. package/dist/deliver-cmd.d.ts +41 -0
  32. package/dist/deliver-cmd.d.ts.map +1 -0
  33. package/dist/deliver-cmd.js +189 -0
  34. package/dist/deliver-cmd.js.map +1 -0
  35. package/dist/delivery-rules.d.ts +71 -0
  36. package/dist/delivery-rules.d.ts.map +1 -0
  37. package/dist/delivery-rules.js +186 -0
  38. package/dist/delivery-rules.js.map +1 -0
  39. package/dist/delivery-settings-cache.d.ts +35 -0
  40. package/dist/delivery-settings-cache.d.ts.map +1 -0
  41. package/dist/delivery-settings-cache.js +119 -0
  42. package/dist/delivery-settings-cache.js.map +1 -0
  43. package/dist/github-api.d.ts +99 -0
  44. package/dist/github-api.d.ts.map +1 -0
  45. package/dist/github-api.js +226 -0
  46. package/dist/github-api.js.map +1 -0
  47. package/dist/goal-runs.d.ts +2 -2
  48. package/dist/goal-runs.d.ts.map +1 -1
  49. package/dist/goal-runs.js +13 -11
  50. package/dist/goal-runs.js.map +1 -1
  51. package/dist/machine-settings.d.ts +188 -0
  52. package/dist/machine-settings.d.ts.map +1 -0
  53. package/dist/machine-settings.js +658 -0
  54. package/dist/machine-settings.js.map +1 -0
  55. package/dist/project-terminal.d.ts +6 -0
  56. package/dist/project-terminal.d.ts.map +1 -1
  57. package/dist/project-terminal.js +3 -0
  58. package/dist/project-terminal.js.map +1 -1
  59. package/dist/run-ending-locator.d.ts.map +1 -1
  60. package/dist/run-ending-locator.js +5 -3
  61. package/dist/run-ending-locator.js.map +1 -1
  62. package/dist/serve-cmd.d.ts +8 -0
  63. package/dist/serve-cmd.d.ts.map +1 -1
  64. package/dist/serve-cmd.js +12 -0
  65. package/dist/serve-cmd.js.map +1 -1
  66. package/dist/server-client.d.ts +29 -2
  67. package/dist/server-client.d.ts.map +1 -1
  68. package/dist/server-client.js +39 -2
  69. package/dist/server-client.js.map +1 -1
  70. package/dist/stale-run-sweep.js +11 -10
  71. package/dist/stale-run-sweep.js.map +1 -1
  72. package/dist/untrusted-exec.d.ts +11 -0
  73. package/dist/untrusted-exec.d.ts.map +1 -1
  74. package/dist/untrusted-exec.js +1 -0
  75. package/dist/untrusted-exec.js.map +1 -1
  76. package/dist/workspace-provisioner.d.ts +8 -0
  77. package/dist/workspace-provisioner.d.ts.map +1 -1
  78. package/dist/workspace-provisioner.js +18 -0
  79. package/dist/workspace-provisioner.js.map +1 -1
  80. package/dist/workspace.d.ts +33 -13
  81. package/dist/workspace.d.ts.map +1 -1
  82. package/dist/workspace.js +89 -92
  83. package/dist/workspace.js.map +1 -1
  84. package/package.json +2 -2
@@ -0,0 +1,275 @@
1
+ import type { BranchDeliveryReport, BranchDeliveryState, DeliverMode, DeployConfig, DeployKind } from '@looply/core';
2
+ import { type GitExec } from './git-driver';
3
+ import type { CheckResult, GitHubApi, PullInfo } from './github-api';
4
+ import type { LaneClaimRecord } from './lane-claims';
5
+ /**
6
+ * A FINISHED GOAL BECOMES A BRANCH ON ORIGIN AND A PULL REQUEST A PERSON CAN OPEN.
7
+ *
8
+ * ─────────────────────────────────────────────────────────────────────────────
9
+ * Before this, a satisfied goal left only commit SHAs on a ticket, on a branch
10
+ * that existed on one PC. Now, when a goal ends satisfied:
11
+ *
12
+ * 1. its own `looply/run-*` branch is found (the lane-claims record of the
13
+ * delivery, else the run id, else the branch whose tip is the delivered sha);
14
+ * 2. it is pushed to `origin` — under `delivery-rules.ts`, whose refusals no
15
+ * setting can loosen: origin only, never a base/main/master/protected
16
+ * branch, never forced;
17
+ * 3. a pull request is opened into the project's base branch — or, when the
18
+ * branch is built on ANOTHER goal's branch that is not merged yet, against
19
+ * that branch when it is on origin, or into the base with a sentence saying
20
+ * what it depends on when it is not;
21
+ * 4. the result — the pull request's address, or plainly why there is none —
22
+ * is recorded on the goal on the server, where AutoRyn's "Done — please
23
+ * review" comment reads it.
24
+ *
25
+ * Opt-in beyond that, per project (`deliver: merge | deploy`): a later pass
26
+ * (`advanceDeliveries`) merges the pull request once its required CI checks are
27
+ * green — never on red, never on none — and under `deploy` then runs the release
28
+ * step the project's OWN config.yaml declares, and nothing else.
29
+ *
30
+ * Nothing here decides whether the goal was met. It is called after that was
31
+ * decided, and a failure here never un-settles anything: the goal is still done,
32
+ * and the ticket says the branch could not be delivered, and why.
33
+ */
34
+ /** The slice of git this needs. Every verb but `push` is a read. */
35
+ export interface DeliveryGit {
36
+ remoteUrl(): Promise<string | null>;
37
+ /** Local `looply/run-*` branches and their tips. */
38
+ runBranches(): Promise<Array<{
39
+ name: string;
40
+ sha: string;
41
+ }>>;
42
+ isAncestor(ancestor: string, of: string): Promise<boolean>;
43
+ /** The project's base branch as a ref (`main` or `origin/main`), or null. */
44
+ baseRef(): Promise<string | null>;
45
+ /** Is `sha` already in origin's copy of the base branch (or the local one)? */
46
+ inBase(sha: string, base: string): Promise<boolean>;
47
+ /** Origin's `refs/heads/<branch>`, or null when origin does not have it. */
48
+ remoteSha(branch: string): Promise<string | null>;
49
+ /** The `looply/run-*` branches origin has. */
50
+ remoteRunBranches(): Promise<Set<string>>;
51
+ /** Run exactly this argv (already checked). */
52
+ push(argv: readonly string[]): Promise<{
53
+ ok: true;
54
+ } | {
55
+ ok: false;
56
+ because: string;
57
+ }>;
58
+ }
59
+ export declare function nodeDeliveryGit(cwd: string, configuredBase?: string, rawExec?: GitExec): DeliveryGit;
60
+ /**
61
+ * THE `push` DEPLOY: the merged commit to the configured remote's branch.
62
+ *
63
+ * Fetches origin's base branch first so the merge commit is here, and refuses
64
+ * unless that commit IS on origin's base — only merged work is ever deployed.
65
+ * The argv is checked against the configured remote and branch just before git
66
+ * runs (`unsafeDeployPushArgv`): never forced, never another remote, never a delete.
67
+ */
68
+ export declare function makeDeployPush(cwd: string, rawExec?: GitExec): (remote: string, branch: string, sha: string, base: string) => Promise<{
69
+ ok: true;
70
+ } | {
71
+ ok: false;
72
+ because: string;
73
+ }>;
74
+ export declare const BRANCH_DELIVERIES_FILE = "branch-deliveries.json";
75
+ export interface DeliveryEntry {
76
+ goalId: string;
77
+ goalText: string;
78
+ branch: string;
79
+ sha: string;
80
+ owner: string | null;
81
+ repo: string | null;
82
+ pullNumber: number | null;
83
+ pullRequestUrl: string | null;
84
+ /** What the pull request targets. */
85
+ base: string | null;
86
+ /** The project's base branch, which a stacked pull request is moved to once its dependency merges. */
87
+ projectBase: string | null;
88
+ mode: DeliverMode;
89
+ state: BranchDeliveryState;
90
+ note: string | null;
91
+ dependsOn: string | null;
92
+ openedAt: string;
93
+ updatedAt: string;
94
+ /** Nothing left for Looply to do on it. */
95
+ done?: boolean;
96
+ /** When a person approved shipping it ("Approve and ship"). */
97
+ approvedAt?: string | null;
98
+ /** The commit the merge made on the base branch. */
99
+ mergeSha?: string | null;
100
+ /** The deploy step's outcome. */
101
+ deploy?: {
102
+ kind: DeployKind;
103
+ ok: boolean;
104
+ detail: string;
105
+ } | null;
106
+ }
107
+ export interface DeliveryStore {
108
+ get(goalId: string): DeliveryEntry | null;
109
+ all(): DeliveryEntry[];
110
+ put(entry: DeliveryEntry): void;
111
+ }
112
+ export declare function fileDeliveryStore(stateDir: string): DeliveryStore;
113
+ export declare function memoryDeliveryStore(): DeliveryStore;
114
+ /**
115
+ * The goal's own run branch that holds `sha`, or null.
116
+ *
117
+ * In order: the lane-claims DELIVERY record for this goal at this sha (the run
118
+ * that delivered wrote it on the branch it cut); the branch named for the run id
119
+ * (`looply/run-<stamp>-<last 8 of the id>`); the newest run branch whose tip IS
120
+ * the sha. Whatever is chosen must exist and contain the sha.
121
+ */
122
+ export declare function findGoalBranch(git: Pick<DeliveryGit, 'isAncestor'>, input: {
123
+ goalId: string;
124
+ sha: string;
125
+ runId: string | null;
126
+ claims: readonly LaneClaimRecord[];
127
+ }, branches: ReadonlyArray<{
128
+ name: string;
129
+ sha: string;
130
+ }>): Promise<{
131
+ name: string;
132
+ sha: string;
133
+ } | null>;
134
+ export interface StackedOn {
135
+ readonly branch: string;
136
+ /** Origin has it, so a pull request can target it. */
137
+ readonly onOrigin: boolean;
138
+ readonly goalId: string | undefined;
139
+ }
140
+ /**
141
+ * THE OTHER, UNMERGED GOAL'S BRANCH THIS ONE IS BUILT ON — or null.
142
+ *
143
+ * A candidate is another `looply/run-*` branch whose tip this branch contains and
144
+ * the base does not, and which is ANOTHER goal's work: the lane claims name a
145
+ * different goal, or it is on origin (only a delivered goal's branch is pushed).
146
+ * A branch of this goal's own earlier runs is not a dependency — it is this
147
+ * goal's own history. The nearest candidate wins: the one no other contains.
148
+ */
149
+ export declare function stackedOn(git: Pick<DeliveryGit, 'isAncestor' | 'inBase'>, input: {
150
+ branch: string;
151
+ tip: string;
152
+ goalId: string;
153
+ base: string | null;
154
+ claims: readonly LaneClaimRecord[];
155
+ branches: ReadonlyArray<{
156
+ name: string;
157
+ sha: string;
158
+ }>;
159
+ onOrigin: ReadonlySet<string>;
160
+ }): Promise<StackedOn | null>;
161
+ export interface DeliverInput {
162
+ readonly goalId: string;
163
+ readonly goalText: string;
164
+ /** The delivering run, when key 2 named it. */
165
+ readonly runId: string | null;
166
+ /** The commit key 2 confirmed. */
167
+ readonly sha: string;
168
+ /** The gate outcomes key 2 recorded, for the pull request's description. */
169
+ readonly checks?: Readonly<Record<string, string>>;
170
+ readonly mode: DeliverMode;
171
+ readonly claims: readonly LaneClaimRecord[];
172
+ /** config.yaml `deliver.protected`: more names never pushed. */
173
+ readonly protectedBranches?: readonly string[];
174
+ /** A named run branch (the backfill command): delivered as is, no discovery. */
175
+ readonly branch?: string;
176
+ /** The goals this goal depends on (the mirror's `dependsOn`): a fix-up names the goal whose pull request it repairs. */
177
+ readonly dependsOn?: readonly string[];
178
+ }
179
+ export interface DeliverDeps {
180
+ readonly git: DeliveryGit;
181
+ /** A client for owner/repo, or the plain reason there is none (no credentials). */
182
+ github(owner: string, repo: string): Promise<{
183
+ api: GitHubApi;
184
+ } | {
185
+ api: null;
186
+ because: string;
187
+ }>;
188
+ /** Tell the server (and so AutoRyn). A failure is logged, never thrown. */
189
+ record(goalId: string, report: BranchDeliveryReport): Promise<void>;
190
+ readonly store: DeliveryStore;
191
+ now(): number;
192
+ log(line: string): void;
193
+ }
194
+ export declare function pullTitle(goalText: string): string;
195
+ export declare function pullBody(input: {
196
+ goalId: string;
197
+ goalText: string;
198
+ branch: string;
199
+ sha: string;
200
+ checks?: Readonly<Record<string, string>>;
201
+ mode: DeliverMode;
202
+ stacked: StackedOn | null;
203
+ stackedPull?: PullInfo | null;
204
+ }): string;
205
+ /**
206
+ * Push a satisfied goal's branch and open its pull request. Idempotent: a goal
207
+ * already delivered at this sha is re-recorded, not pushed again; an existing
208
+ * pull request for the branch is found, not duplicated. Never throws.
209
+ */
210
+ export declare function deliverBranch(deps: DeliverDeps, input: DeliverInput): Promise<BranchDeliveryReport | null>;
211
+ /** How long `merge` waits for checks before handing the pull request to a person. */
212
+ export declare const CHECKS_PATIENCE_MS: number;
213
+ /** How long a pull request with NO checks at all is given for CI to show up. */
214
+ export declare const NO_CHECKS_GRACE_MS: number;
215
+ export type ChecksVerdict = {
216
+ kind: 'green';
217
+ } | {
218
+ kind: 'pending';
219
+ waiting: string[];
220
+ } | {
221
+ kind: 'red';
222
+ failed: string[];
223
+ } | {
224
+ kind: 'none';
225
+ };
226
+ /**
227
+ * ARE THE REQUIRED CHECKS GREEN?
228
+ *
229
+ * When the base branch's protection names required checks, each must report
230
+ * success. When it names none, or cannot be read, EVERY check on the head must be
231
+ * green — and there must be at least one: a pull request with no CI at all is
232
+ * never merged automatically, because "nothing failed" is not "it passed".
233
+ */
234
+ export declare function decideChecks(required: readonly string[] | null, checks: readonly CheckResult[]): ChecksVerdict;
235
+ export interface ReleaseOutcome {
236
+ readonly code: number;
237
+ /** The last lines of its output, for the log and the note. */
238
+ readonly tail: string;
239
+ }
240
+ export interface AdvanceDeps extends Omit<DeliverDeps, 'git'> {
241
+ /** The mode in force NOW — a person who switched back to `pr` stops a pending automatic merge. */
242
+ mode(): DeliverMode;
243
+ /** The project's deploy step as configured (remote setting or config.yaml); null when none is set. */
244
+ deploy(): DeployConfig | null;
245
+ /** config.yaml `deliver.release`: the one command a `run` deploy may run; null when none is declared. */
246
+ release(): string | null;
247
+ runRelease(command: string, env: Record<string, string>): Promise<ReleaseOutcome>;
248
+ /** Push the merged commit to the deploy remote — the `push` deploy, under its own hard rules. */
249
+ deployPush(remote: string, branch: string, sha: string, base: string): Promise<{
250
+ ok: true;
251
+ } | {
252
+ ok: false;
253
+ because: string;
254
+ }>;
255
+ /** When a person approved shipping this goal ("Approve and ship"), from the goal mirror; null when not. */
256
+ shipRequested(goalId: string): string | null;
257
+ }
258
+ /**
259
+ * One pass over every delivered pull request still waiting on Looply:
260
+ *
261
+ * - a person's "Approve and ship" turns an open pull request into one Looply merges;
262
+ * - a pull request Looply merges (`merge`/`deploy`, or approved) is merged at the head it
263
+ * checked, only on green required checks — an approved one also when there is no CI at all,
264
+ * a red one never;
265
+ * - a merged one is deployed by the project's configured deploy step (`deploy`, or approved).
266
+ *
267
+ * Each step is recorded on the goal, which is what puts an audit line on the ticket. Never throws.
268
+ */
269
+ export declare function advanceDeliveries(deps: AdvanceDeps): Promise<void>;
270
+ /**
271
+ * Run the project's declared release step in the project folder, hidden, bounded
272
+ * to 30 minutes, its output appended to `.looply/state/run-logs/release.log`.
273
+ */
274
+ export declare function makeReleaseRunner(projectDir: string, stateDir: string): AdvanceDeps['runRelease'];
275
+ //# sourceMappingURL=branch-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-delivery.d.ts","sourceRoot":"","sources":["../src/branch-delivery.ts"],"names":[],"mappings":"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"}