looply-cli 0.5.7 → 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.
- package/dist/.src-hash +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +9 -1
- package/dist/bin.js.map +1 -1
- package/dist/branch-delivery-wiring.d.ts +41 -0
- package/dist/branch-delivery-wiring.d.ts.map +1 -0
- package/dist/branch-delivery-wiring.js +85 -0
- package/dist/branch-delivery-wiring.js.map +1 -0
- package/dist/branch-delivery.d.ts +275 -0
- package/dist/branch-delivery.d.ts.map +1 -0
- package/dist/branch-delivery.js +659 -0
- package/dist/branch-delivery.js.map +1 -0
- package/dist/config.d.ts +20 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -1
- package/dist/coordinator-state.d.ts.map +1 -1
- package/dist/coordinator-state.js +28 -18
- package/dist/coordinator-state.js.map +1 -1
- package/dist/daemon-cmd.d.ts.map +1 -1
- package/dist/daemon-cmd.js +64 -5
- package/dist/daemon-cmd.js.map +1 -1
- package/dist/daemon-lock.d.ts +65 -2
- package/dist/daemon-lock.d.ts.map +1 -1
- package/dist/daemon-lock.js +149 -5
- package/dist/daemon-lock.js.map +1 -1
- package/dist/daemon.d.ts +12 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +23 -3
- package/dist/daemon.js.map +1 -1
- package/dist/deliver-cmd.d.ts +41 -0
- package/dist/deliver-cmd.d.ts.map +1 -0
- package/dist/deliver-cmd.js +189 -0
- package/dist/deliver-cmd.js.map +1 -0
- package/dist/delivery-rules.d.ts +71 -0
- package/dist/delivery-rules.d.ts.map +1 -0
- package/dist/delivery-rules.js +186 -0
- package/dist/delivery-rules.js.map +1 -0
- package/dist/delivery-settings-cache.d.ts +35 -0
- package/dist/delivery-settings-cache.d.ts.map +1 -0
- package/dist/delivery-settings-cache.js +119 -0
- package/dist/delivery-settings-cache.js.map +1 -0
- package/dist/github-api.d.ts +99 -0
- package/dist/github-api.d.ts.map +1 -0
- package/dist/github-api.js +226 -0
- package/dist/github-api.js.map +1 -0
- package/dist/goal-runs.d.ts +2 -2
- package/dist/goal-runs.d.ts.map +1 -1
- package/dist/goal-runs.js +13 -11
- package/dist/goal-runs.js.map +1 -1
- package/dist/machine-settings.d.ts +188 -0
- package/dist/machine-settings.d.ts.map +1 -0
- package/dist/machine-settings.js +658 -0
- package/dist/machine-settings.js.map +1 -0
- package/dist/project-terminal.d.ts +6 -0
- package/dist/project-terminal.d.ts.map +1 -1
- package/dist/project-terminal.js +3 -0
- package/dist/project-terminal.js.map +1 -1
- package/dist/run-ending-locator.d.ts.map +1 -1
- package/dist/run-ending-locator.js +5 -3
- package/dist/run-ending-locator.js.map +1 -1
- package/dist/serve-cmd.d.ts +8 -0
- package/dist/serve-cmd.d.ts.map +1 -1
- package/dist/serve-cmd.js +12 -0
- package/dist/serve-cmd.js.map +1 -1
- package/dist/server-client.d.ts +29 -2
- package/dist/server-client.d.ts.map +1 -1
- package/dist/server-client.js +39 -2
- package/dist/server-client.js.map +1 -1
- package/dist/stale-run-sweep.js +11 -10
- package/dist/stale-run-sweep.js.map +1 -1
- package/dist/untrusted-exec.d.ts +11 -0
- package/dist/untrusted-exec.d.ts.map +1 -1
- package/dist/untrusted-exec.js +1 -0
- package/dist/untrusted-exec.js.map +1 -1
- package/dist/workspace-provisioner.d.ts +8 -0
- package/dist/workspace-provisioner.d.ts.map +1 -1
- package/dist/workspace-provisioner.js +18 -0
- package/dist/workspace-provisioner.js.map +1 -1
- package/dist/workspace.d.ts +47 -13
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +121 -94
- package/dist/workspace.js.map +1 -1
- package/package.json +2 -2
package/dist/daemon.js
CHANGED
|
@@ -264,9 +264,19 @@ class Daemon {
|
|
|
264
264
|
// A readiness check that throws must never cost the machine its presence.
|
|
265
265
|
provider = undefined;
|
|
266
266
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
267
|
+
let workspaces;
|
|
268
|
+
try {
|
|
269
|
+
workspaces = this.deps.workspaces?.();
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// Nor may a disk reading.
|
|
273
|
+
workspaces = undefined;
|
|
274
|
+
}
|
|
275
|
+
const reply = workspaces !== undefined
|
|
276
|
+
? await this.deps.client.heartbeat(this.deps.machineId, this.deps.cliVersion, provider, workspaces)
|
|
277
|
+
: provider === undefined
|
|
278
|
+
? await this.deps.client.heartbeat(this.deps.machineId, this.deps.cliVersion)
|
|
279
|
+
: await this.deps.client.heartbeat(this.deps.machineId, this.deps.cliVersion, provider);
|
|
270
280
|
// ⚠️ GUARDED, NOT DESTRUCTURED. Several test doubles predate the corrected
|
|
271
281
|
// type and answer `true` or `{ ok: true }`; a daemon that threw on an
|
|
272
282
|
// unexpected heartbeat reply would turn a cosmetic mismatch into an
|
|
@@ -539,6 +549,7 @@ class Daemon {
|
|
|
539
549
|
let lastAutonomy = 0;
|
|
540
550
|
let lastCoordinator = 0;
|
|
541
551
|
let lastSettings = 0;
|
|
552
|
+
let lastMachineSettings = 0;
|
|
542
553
|
// What a previous process already got through, so replay does not re-send
|
|
543
554
|
// a night's ledger every time the daemon starts.
|
|
544
555
|
const known = this.deps.cursors?.all();
|
|
@@ -578,6 +589,15 @@ class Daemon {
|
|
|
578
589
|
this.deps.log(`models : settings refresh failed (${e.message})`);
|
|
579
590
|
}
|
|
580
591
|
}
|
|
592
|
+
if (this.deps.pullMachineSettings && now - lastMachineSettings >= settingsMs) {
|
|
593
|
+
lastMachineSettings = now;
|
|
594
|
+
try {
|
|
595
|
+
await this.deps.pullMachineSettings();
|
|
596
|
+
}
|
|
597
|
+
catch (e) {
|
|
598
|
+
this.deps.log(`disk : machine settings refresh failed (${e.message})`);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
581
601
|
if (this.deps.recoverStaleRun && now - lastStale >= staleMs) {
|
|
582
602
|
lastStale = now;
|
|
583
603
|
await this.sweepStaleRun();
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { BranchDeliveryReport } from '@looply/core';
|
|
2
|
+
import { type DeliverDeps, type DeliveryGit, type DeliveryStore } from './branch-delivery';
|
|
3
|
+
import { type LaneClaimRecord } from './lane-claims';
|
|
4
|
+
/**
|
|
5
|
+
* `looply deliver <branch>... [--goal <branch>=<goalId>] [--yes]`
|
|
6
|
+
*
|
|
7
|
+
* THE BACKFILL: push already-finished `looply/run-*` branches to origin and open
|
|
8
|
+
* their pull requests — the same code a satisfied goal now runs at its settle,
|
|
9
|
+
* under the same hard rules (origin only, never main/master/base/protected,
|
|
10
|
+
* never forced). Always `pr`: a backfill never merges or deploys.
|
|
11
|
+
*
|
|
12
|
+
* WITHOUT `--yes` IT ONLY SAYS WHAT IT WOULD DO (reads, including one
|
|
13
|
+
* `ls-remote`; nothing is pushed or opened). Branches are delivered in stacking
|
|
14
|
+
* order — one this branch is built on goes first — so a stacked pull request can
|
|
15
|
+
* target its dependency instead of repeating its commits. Each one's result is
|
|
16
|
+
* recorded on its goal on the server when this machine can say which goal it is
|
|
17
|
+
* (the lane claims, or `--goal`), so the AutoRyn ticket shows the link.
|
|
18
|
+
*/
|
|
19
|
+
export interface DeliverCmdDeps {
|
|
20
|
+
cwd: string;
|
|
21
|
+
git: DeliveryGit;
|
|
22
|
+
github: DeliverDeps['github'];
|
|
23
|
+
claims: readonly LaneClaimRecord[];
|
|
24
|
+
store: DeliveryStore;
|
|
25
|
+
goalText(goalId: string): string;
|
|
26
|
+
/** null when this machine cannot speak for the project (not paired / not registered). */
|
|
27
|
+
record: ((goalId: string, report: BranchDeliveryReport) => Promise<void>) | null;
|
|
28
|
+
protectedBranches: readonly string[];
|
|
29
|
+
out(line: string): void;
|
|
30
|
+
now(): number;
|
|
31
|
+
}
|
|
32
|
+
export declare function parseDeliverArgs(argv: readonly string[]): {
|
|
33
|
+
branches: string[];
|
|
34
|
+
goals: Map<string, string>;
|
|
35
|
+
yes: boolean;
|
|
36
|
+
} | {
|
|
37
|
+
error: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function deliverCommand(argv: readonly string[], deps: DeliverCmdDeps): Promise<number>;
|
|
40
|
+
export declare function nodeDeliverDeps(cwd: string, out: (line: string) => void): DeliverCmdDeps;
|
|
41
|
+
//# sourceMappingURL=deliver-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliver-cmd.d.ts","sourceRoot":"","sources":["../src/deliver-cmd.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAIrE;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,yFAAyF;IACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjF,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,IAAI,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAiB9I;AAOD,wBAAsB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAwGnG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,cAAc,CAoCxF"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDeliverArgs = parseDeliverArgs;
|
|
4
|
+
exports.deliverCommand = deliverCommand;
|
|
5
|
+
exports.nodeDeliverDeps = nodeDeliverDeps;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const branch_delivery_1 = require("./branch-delivery");
|
|
10
|
+
const branch_delivery_wiring_1 = require("./branch-delivery-wiring");
|
|
11
|
+
const config_1 = require("./config");
|
|
12
|
+
const delivery_rules_1 = require("./delivery-rules");
|
|
13
|
+
const git_driver_1 = require("./git-driver");
|
|
14
|
+
const github_api_1 = require("./github-api");
|
|
15
|
+
const integrator_1 = require("./integrator");
|
|
16
|
+
const lane_claims_1 = require("./lane-claims");
|
|
17
|
+
const machine_store_1 = require("./machine-store");
|
|
18
|
+
const server_client_1 = require("./server-client");
|
|
19
|
+
function parseDeliverArgs(argv) {
|
|
20
|
+
const branches = [];
|
|
21
|
+
const goals = new Map();
|
|
22
|
+
let yes = false;
|
|
23
|
+
for (let i = 0; i < argv.length; i++) {
|
|
24
|
+
const a = argv[i];
|
|
25
|
+
if (a === '--yes')
|
|
26
|
+
yes = true;
|
|
27
|
+
else if (a === '--goal') {
|
|
28
|
+
const v = argv[++i];
|
|
29
|
+
const m = v === undefined ? null : /^([^=]+)=(gol_[A-Za-z0-9]+)$/.exec(v);
|
|
30
|
+
if (m === null)
|
|
31
|
+
return { error: '--goal takes <branch>=<goalId>, e.g. looply/run-…=gol_…' };
|
|
32
|
+
goals.set(m[1], m[2]);
|
|
33
|
+
}
|
|
34
|
+
else if (a.startsWith('-'))
|
|
35
|
+
return { error: `unknown option ${a}` };
|
|
36
|
+
else
|
|
37
|
+
branches.push(a);
|
|
38
|
+
}
|
|
39
|
+
if (branches.length === 0)
|
|
40
|
+
return { error: 'name at least one looply/run-* branch' };
|
|
41
|
+
return { branches, goals, yes };
|
|
42
|
+
}
|
|
43
|
+
function goalOf(claims, branch) {
|
|
44
|
+
for (let i = claims.length - 1; i >= 0; i--)
|
|
45
|
+
if (claims[i].branch === branch)
|
|
46
|
+
return claims[i].goalId;
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
async function deliverCommand(argv, deps) {
|
|
50
|
+
const args = parseDeliverArgs(argv);
|
|
51
|
+
if ('error' in args) {
|
|
52
|
+
deps.out(`looply deliver: ${args.error}`);
|
|
53
|
+
deps.out('usage: looply deliver <looply/run-…>... [--goal <branch>=<goalId>] [--yes]');
|
|
54
|
+
return 64;
|
|
55
|
+
}
|
|
56
|
+
const local = await deps.git.runBranches();
|
|
57
|
+
const tipOf = new Map(local.map((b) => [b.name, b.sha]));
|
|
58
|
+
for (const b of args.branches) {
|
|
59
|
+
if (!b.startsWith(integrator_1.RUN_BRANCH_PREFIX)) {
|
|
60
|
+
deps.out(`looply deliver: ${b} is not a ${integrator_1.RUN_BRANCH_PREFIX}* branch; only a goal's own branch is delivered`);
|
|
61
|
+
return 64;
|
|
62
|
+
}
|
|
63
|
+
if (!tipOf.has(b)) {
|
|
64
|
+
deps.out(`looply deliver: there is no local branch ${b}`);
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Stacking order: a branch whose tip another named branch contains goes first.
|
|
69
|
+
const ordered = [];
|
|
70
|
+
const pending = [...args.branches];
|
|
71
|
+
while (pending.length > 0) {
|
|
72
|
+
let pick = 0;
|
|
73
|
+
for (let i = 0; i < pending.length; i++) {
|
|
74
|
+
let inner = true;
|
|
75
|
+
for (const other of pending) {
|
|
76
|
+
if (other === pending[i])
|
|
77
|
+
continue;
|
|
78
|
+
if (await deps.git.isAncestor(tipOf.get(other), tipOf.get(pending[i])))
|
|
79
|
+
inner = false;
|
|
80
|
+
}
|
|
81
|
+
if (inner) {
|
|
82
|
+
pick = i;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
ordered.push(pending.splice(pick, 1)[0]);
|
|
87
|
+
}
|
|
88
|
+
const remoteUrl = await deps.git.remoteUrl();
|
|
89
|
+
const base = await deps.git.baseRef();
|
|
90
|
+
const onOrigin = await deps.git.remoteRunBranches().catch(() => new Set());
|
|
91
|
+
deps.out(`origin : ${remoteUrl === null ? '(none)' : (0, delivery_rules_1.redactUrl)(remoteUrl)}${(0, delivery_rules_1.githubRepoOf)(remoteUrl ?? '') === null ? ' — not github.com: push only, no pull request' : ''}`);
|
|
92
|
+
deps.out(`base : ${base ?? '(not found — set run.base_branch)'}`);
|
|
93
|
+
let failures = 0;
|
|
94
|
+
for (const branch of ordered) {
|
|
95
|
+
const tip = tipOf.get(branch);
|
|
96
|
+
const goalId = args.goals.get(branch) ?? goalOf(deps.claims, branch);
|
|
97
|
+
const refused = (0, delivery_rules_1.pushRefusal)({ remote: delivery_rules_1.DELIVERY_REMOTE, remoteUrl, branch, base, protectedBranches: deps.protectedBranches });
|
|
98
|
+
const stack = await (0, branch_delivery_1.stackedOn)(deps.git, {
|
|
99
|
+
branch,
|
|
100
|
+
tip,
|
|
101
|
+
goalId: goalId ?? `branch:${branch}`,
|
|
102
|
+
base,
|
|
103
|
+
claims: deps.claims,
|
|
104
|
+
branches: local,
|
|
105
|
+
onOrigin: new Set([...onOrigin, ...(args.yes ? ordered.slice(0, ordered.indexOf(branch)) : ordered)]),
|
|
106
|
+
});
|
|
107
|
+
deps.out('');
|
|
108
|
+
deps.out(`${branch} ${tip.slice(0, 12)} goal ${goalId ?? '(unknown — pass --goal to record it on the server)'}`);
|
|
109
|
+
if (stack !== null) {
|
|
110
|
+
deps.out(` builds on ${stack.branch}${stack.goalId ? ` (goal ${stack.goalId})` : ''} — ${stack.onOrigin ? 'its pull request is targeted' : 'not on origin: this pull request will contain its commits, and say so'}`);
|
|
111
|
+
}
|
|
112
|
+
if (refused !== null) {
|
|
113
|
+
deps.out(` REFUSED: ${refused}`);
|
|
114
|
+
failures++;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (!args.yes) {
|
|
118
|
+
deps.out(` would push ${tip.slice(0, 12)} to ${delivery_rules_1.DELIVERY_REMOTE} refs/heads/${branch} (never forced) and open a pull request`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const report = await (0, branch_delivery_1.deliverBranch)({
|
|
122
|
+
git: deps.git,
|
|
123
|
+
github: deps.github,
|
|
124
|
+
store: deps.store,
|
|
125
|
+
record: async (g, r) => {
|
|
126
|
+
if (deps.record !== null && g.startsWith('gol_'))
|
|
127
|
+
await deps.record(g, r);
|
|
128
|
+
},
|
|
129
|
+
now: deps.now,
|
|
130
|
+
log: (line) => deps.out(` ${line}`),
|
|
131
|
+
}, {
|
|
132
|
+
goalId: goalId ?? `branch:${branch}`,
|
|
133
|
+
goalText: goalId === null ? branch : deps.goalText(goalId),
|
|
134
|
+
runId: null,
|
|
135
|
+
sha: tip,
|
|
136
|
+
mode: 'pr',
|
|
137
|
+
claims: deps.claims,
|
|
138
|
+
protectedBranches: deps.protectedBranches,
|
|
139
|
+
branch,
|
|
140
|
+
});
|
|
141
|
+
if (report === null || report.state === 'not-pushed')
|
|
142
|
+
failures++;
|
|
143
|
+
deps.out(` → ${report?.state ?? 'failed'}${report?.pullRequestUrl ? ` ${report.pullRequestUrl}` : ''}${report?.note ? ` (${report.note})` : ''}`);
|
|
144
|
+
if (goalId !== null && deps.record === null)
|
|
145
|
+
deps.out(' (not recorded on the server: this machine is not paired with this project)');
|
|
146
|
+
}
|
|
147
|
+
if (!args.yes) {
|
|
148
|
+
deps.out('');
|
|
149
|
+
deps.out('Nothing was pushed. Run again with --yes to push these branches and open their pull requests.');
|
|
150
|
+
}
|
|
151
|
+
return failures === 0 ? 0 : 1;
|
|
152
|
+
}
|
|
153
|
+
function nodeDeliverDeps(cwd, out) {
|
|
154
|
+
const stateDir = (0, git_driver_1.projectStateDir)(cwd);
|
|
155
|
+
let config = null;
|
|
156
|
+
try {
|
|
157
|
+
config = (0, config_1.parseConfig)((0, node_fs_1.readFileSync)((0, node_path_1.join)(cwd, '.looply', 'config.yaml'), 'utf8'));
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
config = null;
|
|
161
|
+
}
|
|
162
|
+
let record = null;
|
|
163
|
+
const identity = new machine_store_1.MachineStore((0, machine_store_1.machineFilePath)()).load();
|
|
164
|
+
const projectId = new machine_store_1.MachineStore((0, machine_store_1.machineFilePath)()).projectFor((0, machine_store_1.repoPathHash)(cwd, (t) => (0, node_crypto_1.createHash)('sha256').update(t, 'utf8').digest('hex')));
|
|
165
|
+
if (identity !== null && projectId !== null) {
|
|
166
|
+
const client = new server_client_1.ServerClient({ baseUrl: identity.serverUrl }).withToken(identity.token);
|
|
167
|
+
record = async (goalId, report) => {
|
|
168
|
+
await client.recordBranchDelivery(projectId, goalId, report);
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
cwd,
|
|
173
|
+
git: (0, branch_delivery_1.nodeDeliveryGit)(cwd, config?.run.baseBranch),
|
|
174
|
+
github: async (owner, repo) => {
|
|
175
|
+
const t = await (0, github_api_1.githubToken)();
|
|
176
|
+
return t === null
|
|
177
|
+
? { api: null, because: 'this machine has no GitHub credentials Looply can use (gh is not signed in, and git\'s credential helper gave none for github.com)' }
|
|
178
|
+
: { api: (0, github_api_1.makeGitHubApi)({ owner, repo, token: t.token }) };
|
|
179
|
+
},
|
|
180
|
+
claims: (0, lane_claims_1.readLaneClaims)(cwd),
|
|
181
|
+
store: (0, branch_delivery_1.fileDeliveryStore)(stateDir),
|
|
182
|
+
goalText: (goalId) => (0, branch_delivery_wiring_1.goalTextFrom)(stateDir, goalId),
|
|
183
|
+
record,
|
|
184
|
+
protectedBranches: config?.deliver?.protected ?? [],
|
|
185
|
+
out,
|
|
186
|
+
now: () => Date.now(),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=deliver-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deliver-cmd.js","sourceRoot":"","sources":["../src/deliver-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* THE HARD RULES FOR EVERY PUSH LOOPLY MAKES OF A FINISHED BRANCH.
|
|
3
|
+
*
|
|
4
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
* Not settings. Nothing in config.yaml, nothing from the server and nothing a
|
|
6
|
+
* goal says can loosen any of them:
|
|
7
|
+
*
|
|
8
|
+
* 1. ONLY `origin`. Several of the owner's repositories have remotes that
|
|
9
|
+
* DEPLOY ON PUSH (`heroku`, `heroku-qa`); a push to one of them is a
|
|
10
|
+
* release, not a review. And an `origin` that itself points at Heroku is
|
|
11
|
+
* refused for the same reason.
|
|
12
|
+
* 2. ONLY a `looply/run-*` branch — the goal's own work. Never the base
|
|
13
|
+
* branch, never `main`/`master`, never a branch the project or GitHub
|
|
14
|
+
* marks protected.
|
|
15
|
+
* 3. NEVER FORCED. The argv is built here and checked here again just before
|
|
16
|
+
* it runs: no `--force` in any spelling, no `+` refspec, no deletes, no
|
|
17
|
+
* `--mirror`/`--all`/`--tags`. A branch origin already has at a commit
|
|
18
|
+
* this one does not contain is reported, not overwritten.
|
|
19
|
+
*
|
|
20
|
+
* Merging into the base branch (`deliver: merge`) is a GitHub merge of a pull
|
|
21
|
+
* request whose checks are green — never a push — and lives in
|
|
22
|
+
* `branch-delivery.ts`.
|
|
23
|
+
*/
|
|
24
|
+
/** The one remote Looply pushes to. */
|
|
25
|
+
export declare const DELIVERY_REMOTE = "origin";
|
|
26
|
+
/** Branches never pushed whatever else is configured. */
|
|
27
|
+
export declare const ALWAYS_PROTECTED: readonly ["main", "master"];
|
|
28
|
+
/** A remote URL whose push deploys an app: a push there is a release. */
|
|
29
|
+
export declare function isDeployRemoteUrl(url: string): boolean;
|
|
30
|
+
/** `owner/repo` for a github.com remote, else null (another host gets a push but no pull request). */
|
|
31
|
+
export declare function githubRepoOf(url: string): {
|
|
32
|
+
owner: string;
|
|
33
|
+
repo: string;
|
|
34
|
+
} | null;
|
|
35
|
+
/** A remote URL with any embedded credentials removed, for a sentence a person reads. */
|
|
36
|
+
export declare function redactUrl(url: string): string;
|
|
37
|
+
/** The branch name without a leading `origin/` or `refs/heads/`. */
|
|
38
|
+
export declare function shortBranch(ref: string): string;
|
|
39
|
+
export interface PushCheckInput {
|
|
40
|
+
readonly remote: string;
|
|
41
|
+
/** `git remote get-url origin`, or null when there is none. */
|
|
42
|
+
readonly remoteUrl: string | null;
|
|
43
|
+
readonly branch: string;
|
|
44
|
+
/** The project's base branch, local or `origin/…`; null when none could be found. */
|
|
45
|
+
readonly base: string | null;
|
|
46
|
+
/** Extra names from config.yaml `deliver.protected`, and whatever GitHub said is protected. */
|
|
47
|
+
readonly protectedBranches: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
/** Why this push may not happen, or null when every rule allows it. */
|
|
50
|
+
export declare function pushRefusal(input: PushCheckInput): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* THE ONE EXCEPTION TO "ORIGIN ONLY": a `push` deploy step, which the project
|
|
53
|
+
* configured explicitly (remote + branch). Exactly `push --porcelain <remote>
|
|
54
|
+
* <merged sha>:refs/heads/<branch>` — the configured remote and branch and
|
|
55
|
+
* nothing else, never forced, never a delete.
|
|
56
|
+
*/
|
|
57
|
+
export declare function deployPushArgv(remote: string, branch: string, sha: string): string[];
|
|
58
|
+
export declare function unsafeDeployPushArgv(argv: readonly string[], allowed: {
|
|
59
|
+
remote: string;
|
|
60
|
+
branch: string;
|
|
61
|
+
}): string | null;
|
|
62
|
+
/** The exact argv of a delivery push: `<sha>:refs/heads/<branch>` to origin, nothing else. */
|
|
63
|
+
export declare function deliveryPushArgv(branch: string, sha: string): string[];
|
|
64
|
+
/**
|
|
65
|
+
* THE LAST LOOK BEFORE GIT RUNS. Refuses any argv that is not exactly a
|
|
66
|
+
* non-forced push of one sha to one `refs/heads/looply/run-*` on origin — so a
|
|
67
|
+
* future caller that builds its own argv cannot reach a force, a delete, a
|
|
68
|
+
* second remote or a protected branch through this module.
|
|
69
|
+
*/
|
|
70
|
+
export declare function unsafePushArgv(argv: readonly string[]): string | null;
|
|
71
|
+
//# sourceMappingURL=delivery-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-rules.d.ts","sourceRoot":"","sources":["../src/delivery-rules.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,uCAAuC;AACvC,eAAO,MAAM,eAAe,WAAW,CAAC;AAExC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,6BAA8B,CAAC;AAE5D,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAStD;AASD,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYhF;AAED,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+FAA+F;IAC/F,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CA0BhE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAcxH;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtE;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAmBrE"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ALWAYS_PROTECTED = exports.DELIVERY_REMOTE = void 0;
|
|
4
|
+
exports.isDeployRemoteUrl = isDeployRemoteUrl;
|
|
5
|
+
exports.githubRepoOf = githubRepoOf;
|
|
6
|
+
exports.redactUrl = redactUrl;
|
|
7
|
+
exports.shortBranch = shortBranch;
|
|
8
|
+
exports.pushRefusal = pushRefusal;
|
|
9
|
+
exports.deployPushArgv = deployPushArgv;
|
|
10
|
+
exports.unsafeDeployPushArgv = unsafeDeployPushArgv;
|
|
11
|
+
exports.deliveryPushArgv = deliveryPushArgv;
|
|
12
|
+
exports.unsafePushArgv = unsafePushArgv;
|
|
13
|
+
const integrator_1 = require("./integrator");
|
|
14
|
+
/**
|
|
15
|
+
* THE HARD RULES FOR EVERY PUSH LOOPLY MAKES OF A FINISHED BRANCH.
|
|
16
|
+
*
|
|
17
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
18
|
+
* Not settings. Nothing in config.yaml, nothing from the server and nothing a
|
|
19
|
+
* goal says can loosen any of them:
|
|
20
|
+
*
|
|
21
|
+
* 1. ONLY `origin`. Several of the owner's repositories have remotes that
|
|
22
|
+
* DEPLOY ON PUSH (`heroku`, `heroku-qa`); a push to one of them is a
|
|
23
|
+
* release, not a review. And an `origin` that itself points at Heroku is
|
|
24
|
+
* refused for the same reason.
|
|
25
|
+
* 2. ONLY a `looply/run-*` branch — the goal's own work. Never the base
|
|
26
|
+
* branch, never `main`/`master`, never a branch the project or GitHub
|
|
27
|
+
* marks protected.
|
|
28
|
+
* 3. NEVER FORCED. The argv is built here and checked here again just before
|
|
29
|
+
* it runs: no `--force` in any spelling, no `+` refspec, no deletes, no
|
|
30
|
+
* `--mirror`/`--all`/`--tags`. A branch origin already has at a commit
|
|
31
|
+
* this one does not contain is reported, not overwritten.
|
|
32
|
+
*
|
|
33
|
+
* Merging into the base branch (`deliver: merge`) is a GitHub merge of a pull
|
|
34
|
+
* request whose checks are green — never a push — and lives in
|
|
35
|
+
* `branch-delivery.ts`.
|
|
36
|
+
*/
|
|
37
|
+
/** The one remote Looply pushes to. */
|
|
38
|
+
exports.DELIVERY_REMOTE = 'origin';
|
|
39
|
+
/** Branches never pushed whatever else is configured. */
|
|
40
|
+
exports.ALWAYS_PROTECTED = ['main', 'master'];
|
|
41
|
+
/** A remote URL whose push deploys an app: a push there is a release. */
|
|
42
|
+
function isDeployRemoteUrl(url) {
|
|
43
|
+
let host;
|
|
44
|
+
try {
|
|
45
|
+
host = new URL(asUrl(url.trim())).hostname.toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Unreadable: refuse anything that even mentions heroku rather than guess.
|
|
49
|
+
return /heroku/i.test(url);
|
|
50
|
+
}
|
|
51
|
+
return host === 'heroku.com' || host.endsWith('.heroku.com') || host.endsWith('.herokuapp.com');
|
|
52
|
+
}
|
|
53
|
+
function asUrl(url) {
|
|
54
|
+
// scp-like `git@host:owner/repo.git` → ssh://git@host/owner/repo.git, so URL can read the host.
|
|
55
|
+
const scp = /^([^@/]+@)?([^:/]+):(.+)$/.exec(url);
|
|
56
|
+
if (scp && !/^[a-z]+:\/\//i.test(url))
|
|
57
|
+
return `ssh://${scp[1] ?? ''}${scp[2]}/${scp[3]}`;
|
|
58
|
+
return url;
|
|
59
|
+
}
|
|
60
|
+
/** `owner/repo` for a github.com remote, else null (another host gets a push but no pull request). */
|
|
61
|
+
function githubRepoOf(url) {
|
|
62
|
+
let u;
|
|
63
|
+
try {
|
|
64
|
+
u = new URL(asUrl(url.trim()));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
if (u.hostname.toLowerCase() !== 'github.com')
|
|
70
|
+
return null;
|
|
71
|
+
const parts = u.pathname.replace(/^\/+/, '').replace(/\.git$/i, '').replace(/\/+$/, '').split('/');
|
|
72
|
+
if (parts.length !== 2 || !parts[0] || !parts[1])
|
|
73
|
+
return null;
|
|
74
|
+
if (!/^[A-Za-z0-9_.-]+$/.test(parts[0]) || !/^[A-Za-z0-9_.-]+$/.test(parts[1]))
|
|
75
|
+
return null;
|
|
76
|
+
return { owner: parts[0], repo: parts[1] };
|
|
77
|
+
}
|
|
78
|
+
/** A remote URL with any embedded credentials removed, for a sentence a person reads. */
|
|
79
|
+
function redactUrl(url) {
|
|
80
|
+
return url.replace(/(\b[a-z][a-z0-9+.-]*:\/\/)[^@/\s]+@/gi, '$1');
|
|
81
|
+
}
|
|
82
|
+
/** The branch name without a leading `origin/` or `refs/heads/`. */
|
|
83
|
+
function shortBranch(ref) {
|
|
84
|
+
return ref.replace(/^refs\/heads\//, '').replace(/^refs\/remotes\/[^/]+\//, '').replace(/^origin\//, '');
|
|
85
|
+
}
|
|
86
|
+
/** Why this push may not happen, or null when every rule allows it. */
|
|
87
|
+
function pushRefusal(input) {
|
|
88
|
+
if (input.remote !== exports.DELIVERY_REMOTE) {
|
|
89
|
+
return `Looply pushes only to ${exports.DELIVERY_REMOTE}, never to "${input.remote}" (a remote like heroku deploys on push)`;
|
|
90
|
+
}
|
|
91
|
+
if (input.remoteUrl === null || input.remoteUrl.trim() === '') {
|
|
92
|
+
return `this repository has no ${exports.DELIVERY_REMOTE} remote to push to`;
|
|
93
|
+
}
|
|
94
|
+
if (isDeployRemoteUrl(input.remoteUrl)) {
|
|
95
|
+
return `${exports.DELIVERY_REMOTE} points at ${redactUrl(input.remoteUrl)}, where a push deploys; Looply does not push there`;
|
|
96
|
+
}
|
|
97
|
+
const b = input.branch;
|
|
98
|
+
if (!b.startsWith(integrator_1.RUN_BRANCH_PREFIX) || b.length <= integrator_1.RUN_BRANCH_PREFIX.length) {
|
|
99
|
+
return `only a goal's own ${integrator_1.RUN_BRANCH_PREFIX}* branch is pushed, and "${b}" is not one`;
|
|
100
|
+
}
|
|
101
|
+
if (!/^[A-Za-z0-9._/-]+$/.test(b) || b.includes('..') || b.endsWith('/') || b.endsWith('.lock') || b.includes('//')) {
|
|
102
|
+
return `"${b}" is not a branch name Looply will push`;
|
|
103
|
+
}
|
|
104
|
+
const lower = b.toLowerCase();
|
|
105
|
+
if (exports.ALWAYS_PROTECTED.includes(lower))
|
|
106
|
+
return `"${b}" is protected; Looply never pushes it`;
|
|
107
|
+
if (input.base !== null && lower === shortBranch(input.base).toLowerCase()) {
|
|
108
|
+
return `"${b}" is the project's base branch; Looply never pushes it`;
|
|
109
|
+
}
|
|
110
|
+
if (input.protectedBranches.some((p) => shortBranch(p).toLowerCase() === lower)) {
|
|
111
|
+
return `"${b}" is a protected branch; Looply never pushes it`;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* THE ONE EXCEPTION TO "ORIGIN ONLY": a `push` deploy step, which the project
|
|
117
|
+
* configured explicitly (remote + branch). Exactly `push --porcelain <remote>
|
|
118
|
+
* <merged sha>:refs/heads/<branch>` — the configured remote and branch and
|
|
119
|
+
* nothing else, never forced, never a delete.
|
|
120
|
+
*/
|
|
121
|
+
function deployPushArgv(remote, branch, sha) {
|
|
122
|
+
return ['push', '--porcelain', remote, `${sha}:refs/heads/${branch}`];
|
|
123
|
+
}
|
|
124
|
+
function unsafeDeployPushArgv(argv, allowed) {
|
|
125
|
+
if (argv[0] !== 'push')
|
|
126
|
+
return 'not a push';
|
|
127
|
+
const rest = argv.slice(1);
|
|
128
|
+
const flags = rest.filter((a) => a.startsWith('-'));
|
|
129
|
+
if (flags.some((f) => f !== '--porcelain'))
|
|
130
|
+
return `only --porcelain is allowed, not ${flags.join(' ')}`;
|
|
131
|
+
const positional = rest.filter((a) => !a.startsWith('-'));
|
|
132
|
+
if (positional.length !== 2)
|
|
133
|
+
return 'a deploy push names exactly one remote and one refspec';
|
|
134
|
+
const [remote, spec] = positional;
|
|
135
|
+
if (remote !== allowed.remote)
|
|
136
|
+
return `the deploy remote is ${allowed.remote}, not "${remote}"`;
|
|
137
|
+
if (spec.startsWith('+'))
|
|
138
|
+
return 'a forced refspec (+) is never used';
|
|
139
|
+
const m = /^([0-9a-f]{40}):refs\/heads\/(.+)$/.exec(spec);
|
|
140
|
+
if (m === null)
|
|
141
|
+
return 'the refspec must be <full sha>:refs/heads/<branch>';
|
|
142
|
+
if (m[2] !== allowed.branch)
|
|
143
|
+
return `the deploy branch is ${allowed.branch}, not "${m[2]}"`;
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
/** The exact argv of a delivery push: `<sha>:refs/heads/<branch>` to origin, nothing else. */
|
|
147
|
+
function deliveryPushArgv(branch, sha) {
|
|
148
|
+
return ['push', '--porcelain', exports.DELIVERY_REMOTE, `${sha}:refs/heads/${branch}`];
|
|
149
|
+
}
|
|
150
|
+
const FORBIDDEN_PUSH_FLAGS = /^(-f|--force.*|--mirror|--all|--tags|--follow-tags|--delete|-d|--prune|--set-upstream|-u|--receive-pack.*|--exec.*|--repo.*|-o|--push-option.*|--no-verify)$/;
|
|
151
|
+
/**
|
|
152
|
+
* THE LAST LOOK BEFORE GIT RUNS. Refuses any argv that is not exactly a
|
|
153
|
+
* non-forced push of one sha to one `refs/heads/looply/run-*` on origin — so a
|
|
154
|
+
* future caller that builds its own argv cannot reach a force, a delete, a
|
|
155
|
+
* second remote or a protected branch through this module.
|
|
156
|
+
*/
|
|
157
|
+
function unsafePushArgv(argv) {
|
|
158
|
+
if (argv[0] !== 'push')
|
|
159
|
+
return 'not a push';
|
|
160
|
+
const rest = argv.slice(1);
|
|
161
|
+
for (const a of rest) {
|
|
162
|
+
if (FORBIDDEN_PUSH_FLAGS.test(a) || /^-[a-z]*f[a-z]*$/i.test(a) && !a.startsWith('--'))
|
|
163
|
+
return `"${a}" is not allowed in a delivery push`;
|
|
164
|
+
}
|
|
165
|
+
const positional = rest.filter((a) => !a.startsWith('-'));
|
|
166
|
+
const flags = rest.filter((a) => a.startsWith('-'));
|
|
167
|
+
if (flags.some((f) => f !== '--porcelain'))
|
|
168
|
+
return `only --porcelain is allowed, not ${flags.join(' ')}`;
|
|
169
|
+
if (positional.length !== 2)
|
|
170
|
+
return 'a delivery push names exactly one remote and one refspec';
|
|
171
|
+
const [remote, spec] = positional;
|
|
172
|
+
if (remote !== exports.DELIVERY_REMOTE)
|
|
173
|
+
return `the remote must be ${exports.DELIVERY_REMOTE}, not "${remote}"`;
|
|
174
|
+
if (spec.startsWith('+'))
|
|
175
|
+
return 'a forced refspec (+) is never used';
|
|
176
|
+
const m = /^([0-9a-f]{40}):refs\/heads\/(.+)$/.exec(spec);
|
|
177
|
+
if (m === null)
|
|
178
|
+
return 'the refspec must be <full sha>:refs/heads/<branch>';
|
|
179
|
+
const branch = m[2];
|
|
180
|
+
if (!branch.startsWith(integrator_1.RUN_BRANCH_PREFIX))
|
|
181
|
+
return `only ${integrator_1.RUN_BRANCH_PREFIX}* is pushed, not "${branch}"`;
|
|
182
|
+
if (exports.ALWAYS_PROTECTED.includes(branch.toLowerCase()))
|
|
183
|
+
return `"${branch}" is protected`;
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=delivery-rules.js.map
|