@heychunky/core 0.9.0 → 0.11.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/admin/chunks.d.ts +16 -2
- package/dist/admin/chunks.d.ts.map +1 -1
- package/dist/admin/chunks.js +56 -12
- package/dist/admin/chunks.js.map +1 -1
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/migrations.d.ts +98 -0
- package/dist/admin/migrations.d.ts.map +1 -0
- package/dist/admin/migrations.js +93 -0
- package/dist/admin/migrations.js.map +1 -0
- package/dist/admin/promote.d.ts +51 -0
- package/dist/admin/promote.d.ts.map +1 -0
- package/dist/admin/promote.js +142 -0
- package/dist/admin/promote.js.map +1 -0
- package/dist/admin/services/github.d.ts +20 -2
- package/dist/admin/services/github.d.ts.map +1 -1
- package/dist/admin/services/github.js +57 -5
- package/dist/admin/services/github.js.map +1 -1
- package/package.json +1 -1
package/dist/admin/chunks.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type RunContext } from "./run.ts";
|
|
2
|
+
import { type Ledger } from "./migrations.ts";
|
|
2
3
|
/**
|
|
3
4
|
* Where the chunks live. Folders in one repository, one per chunk.
|
|
4
5
|
*
|
|
@@ -92,6 +93,12 @@ export interface AddResult {
|
|
|
92
93
|
files: string[];
|
|
93
94
|
/** The commit, or undefined when nothing needed doing. */
|
|
94
95
|
commit?: string;
|
|
96
|
+
/** The branch the chunk was written to. Never `main`. */
|
|
97
|
+
branch?: string;
|
|
98
|
+
/** Where it can be looked at before it goes anywhere. */
|
|
99
|
+
preview?: string;
|
|
100
|
+
/** The pull request it is waiting in. */
|
|
101
|
+
pullRequest?: string;
|
|
95
102
|
/** True when the chunk was already there and nothing changed. */
|
|
96
103
|
already: boolean;
|
|
97
104
|
}
|
|
@@ -154,8 +161,15 @@ export declare function addChunk(opts: {
|
|
|
154
161
|
chunk: string;
|
|
155
162
|
repo: string;
|
|
156
163
|
app: string;
|
|
157
|
-
/**
|
|
158
|
-
|
|
164
|
+
/**
|
|
165
|
+
* The `dev` database — the one every preview deployment reads.
|
|
166
|
+
*
|
|
167
|
+
* A handle rather than a callback, because the statements are recorded as
|
|
168
|
+
* well as run and the ledger lives in this same database. The other
|
|
169
|
+
* environments are not touched here: they learn what they owe when
|
|
170
|
+
* somebody promotes the change to them.
|
|
171
|
+
*/
|
|
172
|
+
database: Ledger;
|
|
159
173
|
/** The names of variables the app already has set. */
|
|
160
174
|
envKeys: () => Promise<string[]>;
|
|
161
175
|
}, ctx: RunContext, watch?: AddWatcher): Promise<AddResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/admin/chunks.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/admin/chunks.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/chunks.js
CHANGED
|
@@ -21,6 +21,7 @@ import { vercel } from "./services/vercel.js";
|
|
|
21
21
|
import { KEY_FOR } from "./run.js";
|
|
22
22
|
import { entryPoints } from "./entrypoints.js";
|
|
23
23
|
import { DEFAULT_BRANCH } from "../config/environments.js";
|
|
24
|
+
import { applied, apply, migrationName, pending } from "./migrations.js";
|
|
24
25
|
/**
|
|
25
26
|
* Where the chunks live. Folders in one repository, one per chunk.
|
|
26
27
|
*
|
|
@@ -231,21 +232,46 @@ export async function addChunk(opts, ctx, watch) {
|
|
|
231
232
|
watch?.done?.("check app", `${all.length - unchanged.length} to write`);
|
|
232
233
|
// Before the code that needs them, so a deployment never lands on a schema
|
|
233
234
|
// that has not caught up. Failing here stops the run with nothing written.
|
|
234
|
-
|
|
235
|
+
//
|
|
236
|
+
// Written down as well as run. A chunk that only executed its SQL left every
|
|
237
|
+
// other environment behind: these files ride the branch, so staging and
|
|
238
|
+
// production find out what they owe when the change arrives on them.
|
|
239
|
+
//
|
|
235
240
|
// In dependency order: a chunk's tables may reference a table its dependency
|
|
236
241
|
// creates, and resolveChunk already put them in that order.
|
|
242
|
+
let migrated = 0;
|
|
237
243
|
const statements = resolved.flatMap((c) => c.manifest.sql ?? []);
|
|
238
244
|
if (statements.length) {
|
|
245
|
+
const at = new Date();
|
|
246
|
+
// Named from this run's clock, so re-installing a chunk whose files were
|
|
247
|
+
// edited writes a second set running the same statements. They are written
|
|
248
|
+
// to be safe twice, so that costs a row in the ledger and nothing else —
|
|
249
|
+
// and a chunk simply already there never reaches here, because the check
|
|
250
|
+
// above returned.
|
|
251
|
+
const files = statements.map((sql, i) => ({ id: migrationName(at, opts.chunk, i), sql }));
|
|
252
|
+
for (const m of files)
|
|
253
|
+
all.push({ path: m.id, content: `${m.sql}\n` });
|
|
239
254
|
watch?.start?.("database");
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
255
|
+
migrated = await apply(opts.database, pending(files, await applied(opts.database)));
|
|
256
|
+
watch?.done?.("database", `${migrated} statement${migrated === 1 ? "" : "s"} against dev`);
|
|
257
|
+
}
|
|
258
|
+
// A branch of its own, never `main`. Every operator adding a change works
|
|
259
|
+
// this way — a developer, chunky, an agent chunky spun off — so that nothing
|
|
260
|
+
// reaches production without passing the two gates a person holds. Reused
|
|
261
|
+
// when it is already there, so a run that died after pushing can be repeated.
|
|
262
|
+
const branch = `chunk/${opts.chunk}`;
|
|
263
|
+
watch?.start?.("branch");
|
|
264
|
+
const existing = await gh.branches(opts.repo);
|
|
265
|
+
if (!existing.includes(branch)) {
|
|
266
|
+
await gh.createBranch(opts.repo, branch, DEFAULT_BRANCH);
|
|
267
|
+
watch?.done?.("branch", `${branch} · from ${DEFAULT_BRANCH}`);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
watch?.done?.("branch", `${branch} · already there`);
|
|
245
271
|
}
|
|
246
272
|
watch?.start?.("write files");
|
|
247
273
|
const commit = await gh.commitFiles(opts.repo, {
|
|
248
|
-
branch
|
|
274
|
+
branch,
|
|
249
275
|
message: `Add the ${manifest.name} chunk\n\n${manifest.summary}\n\nWritten by chunky, on behalf of the app's owner. The files are yours now —\nedit them freely, nothing here updates them later.`,
|
|
250
276
|
files: all,
|
|
251
277
|
});
|
|
@@ -264,17 +290,35 @@ export async function addChunk(opts, ctx, watch) {
|
|
|
264
290
|
? `${missing.length} still needed: ${missing.map((m) => m.key).join(", ")}`
|
|
265
291
|
: "everything it needs is set");
|
|
266
292
|
}
|
|
267
|
-
|
|
293
|
+
// A preview, not production. This is the whole point of the branch: the
|
|
294
|
+
// person who asked for the chunk gets a link they can click and look at,
|
|
295
|
+
// and the change reaches production only by being promoted through main and
|
|
296
|
+
// staging — never by having been installed.
|
|
297
|
+
watch?.start?.("preview");
|
|
268
298
|
const built = await vc.deploy(opts.app, {
|
|
269
299
|
repo: opts.repo,
|
|
270
|
-
ref:
|
|
271
|
-
target: "production",
|
|
300
|
+
ref: branch,
|
|
272
301
|
teamId: await vc.teamId(),
|
|
273
302
|
});
|
|
274
|
-
|
|
303
|
+
const preview = `https://${built.url}`;
|
|
304
|
+
watch?.done?.("preview", `${preview} · building`);
|
|
305
|
+
watch?.start?.("pull request");
|
|
306
|
+
const pr = await gh.createPullRequest(opts.repo, {
|
|
307
|
+
title: `Add the ${manifest.name} chunk`,
|
|
308
|
+
body: `${manifest.summary}\n\nWritten by chunky. ${all.length} file${all.length === 1 ? "" : "s"}` +
|
|
309
|
+
`${migrated ? `, ${migrated} migration${migrated === 1 ? "" : "s"} already run against dev` : ""}.\n\n` +
|
|
310
|
+
`Preview: ${preview}\n\n` +
|
|
311
|
+
(missing.length
|
|
312
|
+
? `Still needs setting before it will work: ${missing.map((m) => m.key).join(", ")}.\n`
|
|
313
|
+
: ""),
|
|
314
|
+
head: branch,
|
|
315
|
+
base: DEFAULT_BRANCH,
|
|
316
|
+
});
|
|
317
|
+
watch?.done?.("pull request", `#${pr.number}`);
|
|
275
318
|
return {
|
|
276
319
|
chunk: opts.chunk, app: opts.app,
|
|
277
|
-
files: all.map((f) => f.path), commit,
|
|
320
|
+
files: all.map((f) => f.path), commit, branch, preview,
|
|
321
|
+
pullRequest: pr.html_url, migrated, missing, already: false,
|
|
278
322
|
};
|
|
279
323
|
}
|
|
280
324
|
//# sourceMappingURL=chunks.js.map
|
package/dist/admin/chunks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks.js","sourceRoot":"","sources":["../../src/admin/chunks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chunks.js","sourceRoot":"","sources":["../../src/admin/chunks.ts"],"names":[],"mappings":"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"}
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export * from "./users.ts";
|
|
|
12
12
|
export * from "./run.ts";
|
|
13
13
|
export * from "./provision.ts";
|
|
14
14
|
export * from "./decommission.ts";
|
|
15
|
+
export * from "./migrations.ts";
|
|
16
|
+
export * from "./promote.ts";
|
|
15
17
|
export * from "./entrypoints.ts";
|
|
16
18
|
export * from "./chunks.ts";
|
|
17
19
|
export * from "./services/github.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAG5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAG5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
package/dist/admin/index.js
CHANGED
|
@@ -12,6 +12,8 @@ export * from "./users.js";
|
|
|
12
12
|
export * from "./run.js";
|
|
13
13
|
export * from "./provision.js";
|
|
14
14
|
export * from "./decommission.js";
|
|
15
|
+
export * from "./migrations.js";
|
|
16
|
+
export * from "./promote.js";
|
|
15
17
|
export * from "./entrypoints.js";
|
|
16
18
|
export * from "./chunks.js";
|
|
17
19
|
// One file per service, matching the registry.
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrations, and which database has had them.
|
|
3
|
+
*
|
|
4
|
+
* A chunk that ships SQL used to run it against one database and forget. That
|
|
5
|
+
* worked while installing was the whole journey and the install went straight
|
|
6
|
+
* to production. Now a change climbs a ladder — a branch, then `main`, then
|
|
7
|
+
* `staging`, then `production` — and every rung has a database of its own that
|
|
8
|
+
* has to catch up before the code arrives on it.
|
|
9
|
+
*
|
|
10
|
+
* So the statements are written down rather than only run:
|
|
11
|
+
*
|
|
12
|
+
* the repository `migrations/<when>-<what>.sql`, one statement per file
|
|
13
|
+
* each database `_heychunky_migrations`, the filenames it has applied
|
|
14
|
+
*
|
|
15
|
+
* The files travel with the branch, which is what makes this work: `staging`
|
|
16
|
+
* has a migration file only once the merge that carried it has happened, so
|
|
17
|
+
* "what does staging still owe" is answerable from the two lists and nothing
|
|
18
|
+
* else. No central record, nothing to keep in step with the repository.
|
|
19
|
+
*
|
|
20
|
+
* One statement per file, which is not how people usually write migrations.
|
|
21
|
+
* The database client sends one statement per request and refuses a string
|
|
22
|
+
* holding several — it was written that way after a `delete` followed by a
|
|
23
|
+
* `delete` reported success having run one of them. Splitting SQL to work
|
|
24
|
+
* around that would put the same bug back behind a regular expression. The
|
|
25
|
+
* cost is more files; the gain is that the ledger is per statement, so a run
|
|
26
|
+
* that fails halfway has recorded exactly what it did.
|
|
27
|
+
*/
|
|
28
|
+
import type { Rows } from "../services/db.ts";
|
|
29
|
+
/** The directory in an app's repository where migrations live. */
|
|
30
|
+
export declare const MIGRATIONS_DIR = "migrations";
|
|
31
|
+
/** The table an app's database keeps to say what it has applied. */
|
|
32
|
+
export declare const LEDGER = "_heychunky_migrations";
|
|
33
|
+
/** One statement, and the name that identifies it in every database. */
|
|
34
|
+
export interface Migration {
|
|
35
|
+
/** The file's path in the repository, which is also its ledger id. */
|
|
36
|
+
id: string;
|
|
37
|
+
sql: string;
|
|
38
|
+
}
|
|
39
|
+
/** Just enough of the database client to apply and record. */
|
|
40
|
+
export interface Ledger {
|
|
41
|
+
write(sql: string, params?: unknown[]): Promise<Rows>;
|
|
42
|
+
query(sql: string, params?: unknown[]): Promise<Rows>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A filename for a statement, ordered by when it was written.
|
|
46
|
+
*
|
|
47
|
+
* Sorted lexically everywhere, so the timestamp leads and pads. An index
|
|
48
|
+
* separates the statements of one change, because a chunk that creates a table
|
|
49
|
+
* and then indexes it must apply them in that order and both are one install.
|
|
50
|
+
*/
|
|
51
|
+
export declare function migrationName(at: Date, slug: string, index: number): string;
|
|
52
|
+
/**
|
|
53
|
+
* Statements that alter or discard what is already there.
|
|
54
|
+
*
|
|
55
|
+
* The ladder gates on where a change is going; this gates on what it does,
|
|
56
|
+
* because a dropped column outlives every redeploy made afterwards. Matched on
|
|
57
|
+
* the leading verb rather than anywhere in the text, so a `create table` whose
|
|
58
|
+
* body mentions the word `drop` is not mistaken for one.
|
|
59
|
+
*
|
|
60
|
+
* Deliberately blunt. A false positive asks somebody a question they can
|
|
61
|
+
* answer; a false negative drops a column nobody was asked about.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isDestructive(sql: string): boolean;
|
|
64
|
+
/** Make sure the ledger table is there. Safe to call every time. */
|
|
65
|
+
export declare function ensureLedger(db: Ledger): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* What this database has already applied.
|
|
68
|
+
*
|
|
69
|
+
* Asks without creating. A database that has never had a migration has no
|
|
70
|
+
* ledger table, and that is the honest answer "none" rather than a failure —
|
|
71
|
+
* but it must not be answered by making the table, because this is the call an
|
|
72
|
+
* unconfirmed plan makes and a plan that wrote to the database would not be a
|
|
73
|
+
* plan. Any other error is real and is left alone.
|
|
74
|
+
*/
|
|
75
|
+
export declare function applied(db: Ledger): Promise<Set<string>>;
|
|
76
|
+
/**
|
|
77
|
+
* The migrations in the repository that this database has not had, in order.
|
|
78
|
+
*
|
|
79
|
+
* The repository is the whole truth about what exists and the database is the
|
|
80
|
+
* whole truth about what ran, so a file removed from the repository is not
|
|
81
|
+
* un-applied — it is simply no longer offered. Nothing here rolls anything
|
|
82
|
+
* back, on purpose: a promotion that could undo a migration is a promotion
|
|
83
|
+
* that can lose data.
|
|
84
|
+
*/
|
|
85
|
+
export declare function pending(all: Migration[], have: Set<string>): Migration[];
|
|
86
|
+
/**
|
|
87
|
+
* Apply them, recording each before moving on.
|
|
88
|
+
*
|
|
89
|
+
* Recorded after the statement rather than before, so a failure leaves the
|
|
90
|
+
* statement unrecorded and the run repeatable. That is the safe direction for
|
|
91
|
+
* SQL written to be run twice, which is what a chunk's is; the other direction
|
|
92
|
+
* loses a statement silently.
|
|
93
|
+
*
|
|
94
|
+
* Stops at the first failure. Later statements may depend on the one that
|
|
95
|
+
* failed, and running them anyway turns one clear error into several.
|
|
96
|
+
*/
|
|
97
|
+
export declare function apply(db: Ledger, migrations: Migration[], watch?: (m: Migration) => void): Promise<number>;
|
|
98
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/admin/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,kEAAkE;AAClE,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,oEAAoE;AACpE,eAAO,MAAM,MAAM,0BAA0B,CAAC;AAE9C,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,8DAA8D;AAC9D,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIlD;AAED,oEAAoE;AACpE,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAS9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,CAExE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,EAAE,EACvB,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,GAC7B,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/** The directory in an app's repository where migrations live. */
|
|
2
|
+
export const MIGRATIONS_DIR = "migrations";
|
|
3
|
+
/** The table an app's database keeps to say what it has applied. */
|
|
4
|
+
export const LEDGER = "_heychunky_migrations";
|
|
5
|
+
/**
|
|
6
|
+
* A filename for a statement, ordered by when it was written.
|
|
7
|
+
*
|
|
8
|
+
* Sorted lexically everywhere, so the timestamp leads and pads. An index
|
|
9
|
+
* separates the statements of one change, because a chunk that creates a table
|
|
10
|
+
* and then indexes it must apply them in that order and both are one install.
|
|
11
|
+
*/
|
|
12
|
+
export function migrationName(at, slug, index) {
|
|
13
|
+
const stamp = at.toISOString().replace(/[-:T]/g, "").slice(0, 14);
|
|
14
|
+
const clean = slug.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
15
|
+
return `${MIGRATIONS_DIR}/${stamp}-${String(index + 1).padStart(2, "0")}-${clean}.sql`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Statements that alter or discard what is already there.
|
|
19
|
+
*
|
|
20
|
+
* The ladder gates on where a change is going; this gates on what it does,
|
|
21
|
+
* because a dropped column outlives every redeploy made afterwards. Matched on
|
|
22
|
+
* the leading verb rather than anywhere in the text, so a `create table` whose
|
|
23
|
+
* body mentions the word `drop` is not mistaken for one.
|
|
24
|
+
*
|
|
25
|
+
* Deliberately blunt. A false positive asks somebody a question they can
|
|
26
|
+
* answer; a false negative drops a column nobody was asked about.
|
|
27
|
+
*/
|
|
28
|
+
export function isDestructive(sql) {
|
|
29
|
+
const head = sql.replace(/^\s*(--[^\n]*\n|\/\*[\s\S]*?\*\/)*\s*/, "").toLowerCase();
|
|
30
|
+
return /^\s*(drop|truncate)\b/.test(head) ||
|
|
31
|
+
/^\s*alter\s+table\b[\s\S]*\b(drop|alter\s+column\b[\s\S]*\btype)\b/.test(head);
|
|
32
|
+
}
|
|
33
|
+
/** Make sure the ledger table is there. Safe to call every time. */
|
|
34
|
+
export async function ensureLedger(db) {
|
|
35
|
+
await db.write(`create table if not exists ${LEDGER} (` +
|
|
36
|
+
`id text primary key, applied_at timestamptz not null default now())`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* What this database has already applied.
|
|
40
|
+
*
|
|
41
|
+
* Asks without creating. A database that has never had a migration has no
|
|
42
|
+
* ledger table, and that is the honest answer "none" rather than a failure —
|
|
43
|
+
* but it must not be answered by making the table, because this is the call an
|
|
44
|
+
* unconfirmed plan makes and a plan that wrote to the database would not be a
|
|
45
|
+
* plan. Any other error is real and is left alone.
|
|
46
|
+
*/
|
|
47
|
+
export async function applied(db) {
|
|
48
|
+
try {
|
|
49
|
+
const { rows } = await db.query(`select id from ${LEDGER}`);
|
|
50
|
+
return new Set(rows.map((r) => String(r.id)));
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
54
|
+
if (/does not exist|undefined table|42P01/i.test(message))
|
|
55
|
+
return new Set();
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The migrations in the repository that this database has not had, in order.
|
|
61
|
+
*
|
|
62
|
+
* The repository is the whole truth about what exists and the database is the
|
|
63
|
+
* whole truth about what ran, so a file removed from the repository is not
|
|
64
|
+
* un-applied — it is simply no longer offered. Nothing here rolls anything
|
|
65
|
+
* back, on purpose: a promotion that could undo a migration is a promotion
|
|
66
|
+
* that can lose data.
|
|
67
|
+
*/
|
|
68
|
+
export function pending(all, have) {
|
|
69
|
+
return [...all].sort((a, b) => a.id.localeCompare(b.id)).filter((m) => !have.has(m.id));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Apply them, recording each before moving on.
|
|
73
|
+
*
|
|
74
|
+
* Recorded after the statement rather than before, so a failure leaves the
|
|
75
|
+
* statement unrecorded and the run repeatable. That is the safe direction for
|
|
76
|
+
* SQL written to be run twice, which is what a chunk's is; the other direction
|
|
77
|
+
* loses a statement silently.
|
|
78
|
+
*
|
|
79
|
+
* Stops at the first failure. Later statements may depend on the one that
|
|
80
|
+
* failed, and running them anyway turns one clear error into several.
|
|
81
|
+
*/
|
|
82
|
+
export async function apply(db, migrations, watch) {
|
|
83
|
+
await ensureLedger(db);
|
|
84
|
+
let ran = 0;
|
|
85
|
+
for (const m of migrations) {
|
|
86
|
+
watch?.(m);
|
|
87
|
+
await db.write(m.sql);
|
|
88
|
+
await db.write(`insert into ${LEDGER} (id) values ($1) on conflict (id) do nothing`, [m.id]);
|
|
89
|
+
ran += 1;
|
|
90
|
+
}
|
|
91
|
+
return ran;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/admin/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type RunContext } from "./run.ts";
|
|
2
|
+
import { type Environment } from "../config/environments.ts";
|
|
3
|
+
import type { StepResult } from "./provision.ts";
|
|
4
|
+
export interface PromoteSpec {
|
|
5
|
+
app: string;
|
|
6
|
+
repo: string;
|
|
7
|
+
/** The rung being promoted to. */
|
|
8
|
+
to: Environment;
|
|
9
|
+
/**
|
|
10
|
+
* Accept the statements that alter or discard what is already there.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately separate from `confirmed`. Shipping code and dropping a
|
|
13
|
+
* column are different risks, and one yes covering both hides the one that
|
|
14
|
+
* cannot be undone by redeploying. A promotion carrying a destructive
|
|
15
|
+
* migration refuses without this, and names the statements it means.
|
|
16
|
+
*/
|
|
17
|
+
acceptDestructive?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface Promotion {
|
|
20
|
+
app: string;
|
|
21
|
+
to: Environment;
|
|
22
|
+
from: Environment;
|
|
23
|
+
/** True when nothing was done, because nothing was confirmed. */
|
|
24
|
+
planned: boolean;
|
|
25
|
+
/** What would go live, newest first. Empty when the branches are level. */
|
|
26
|
+
shipping: {
|
|
27
|
+
sha: string;
|
|
28
|
+
message: string;
|
|
29
|
+
}[];
|
|
30
|
+
/** Migrations the target database did not have. */
|
|
31
|
+
migrations: string[];
|
|
32
|
+
/** Those of them that alter or discard what is there. */
|
|
33
|
+
destructive: string[];
|
|
34
|
+
steps: StepResult[];
|
|
35
|
+
ok: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface PromoteWatcher {
|
|
38
|
+
start?(step: string): void;
|
|
39
|
+
done?(result: StepResult): void;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Promote, or — without `confirmed` — say what promoting would do.
|
|
43
|
+
*
|
|
44
|
+
* The plan is the run with nothing applied, rather than a separate path, so it
|
|
45
|
+
* cannot disagree with what actually happens. It is also the thing a person
|
|
46
|
+
* reads before saying yes, which is why it names every commit rather than the
|
|
47
|
+
* last one: somebody confirming production is entitled to see work a colleague
|
|
48
|
+
* merged while they were away.
|
|
49
|
+
*/
|
|
50
|
+
export declare function promote(spec: PromoteSpec, ctx: RunContext, watch?: PromoteWatcher): Promise<Promotion>;
|
|
51
|
+
//# sourceMappingURL=promote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../src/admin/promote.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAcjD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,EAAE,EAAE,WAAW,CAAC;IAChB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,iEAAiE;IACjE,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,mDAAmD;IACnD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;CACjC;AAyBD;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,UAAU,EACf,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,SAAS,CAAC,CAqFpB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Moving a change one rung up the ladder.
|
|
3
|
+
*
|
|
4
|
+
* Everything left of `main` happens without anybody: a branch, a pull request,
|
|
5
|
+
* a review, a merge. Nothing right of it moves unless a person asks — and this
|
|
6
|
+
* is what they are asking for. It is a command somebody gives, never a question
|
|
7
|
+
* put to them, which is the distinction the whole model rests on. A prompt
|
|
8
|
+
* offering to promote would manufacture the appearance of oversight; a person
|
|
9
|
+
* saying "go to staging" wanted staging.
|
|
10
|
+
*
|
|
11
|
+
* So there is no scheduler here and no trigger, and nothing in this file should
|
|
12
|
+
* ever acquire one. Two callers say it out loud — the CLI today, the superagent
|
|
13
|
+
* later — and neither may say it on its own behalf.
|
|
14
|
+
*
|
|
15
|
+
* The order is not negotiable:
|
|
16
|
+
*
|
|
17
|
+
* 1. work out what would ship, and say so
|
|
18
|
+
* 2. migrate the environment being promoted to
|
|
19
|
+
* 3. merge, which is what makes the deployment happen
|
|
20
|
+
*
|
|
21
|
+
* Migrations first because the merge *is* the deploy — Vercel builds the branch
|
|
22
|
+
* the moment it moves. A column the arriving code needs and cannot find is an
|
|
23
|
+
* outage; a column added early is invisible to the deployment still running.
|
|
24
|
+
*/
|
|
25
|
+
import { github } from "./services/github.js";
|
|
26
|
+
import { db } from "../services/db.js";
|
|
27
|
+
import { KEY_FOR } from "./run.js";
|
|
28
|
+
import { folderFor } from "./syncenv.js";
|
|
29
|
+
import { GIT_BRANCH } from "../config/environments.js";
|
|
30
|
+
import { applied, apply, isDestructive, pending, MIGRATIONS_DIR } from "./migrations.js";
|
|
31
|
+
/**
|
|
32
|
+
* Where a promotion comes from.
|
|
33
|
+
*
|
|
34
|
+
* `staging` takes what `main` has, `production` takes what `staging` has —
|
|
35
|
+
* never what `main` has. Skipping the middle rung would put work live that
|
|
36
|
+
* nobody has looked at on the address built for looking at it.
|
|
37
|
+
*/
|
|
38
|
+
const FROM = {
|
|
39
|
+
staging: "dev",
|
|
40
|
+
production: "staging",
|
|
41
|
+
};
|
|
42
|
+
const branchFor = (env) => {
|
|
43
|
+
const b = GIT_BRANCH[env];
|
|
44
|
+
if (!b)
|
|
45
|
+
throw new Error(`${env} is not an environment anything is built from`);
|
|
46
|
+
return b;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Read the statements sitting on a branch.
|
|
50
|
+
*
|
|
51
|
+
* From the branch being promoted *from*, because that is what the target is
|
|
52
|
+
* about to receive. An app that has never needed a migration has no directory
|
|
53
|
+
* and GitHub answers 404, which is "none" rather than a failure.
|
|
54
|
+
*/
|
|
55
|
+
async function migrationsOn(gh, repo, ref) {
|
|
56
|
+
const paths = await gh.listFiles(repo, MIGRATIONS_DIR, ref).catch(() => []);
|
|
57
|
+
const files = paths.filter((p) => p.endsWith(".sql")).sort((a, b) => a.localeCompare(b));
|
|
58
|
+
return await Promise.all(files.map(async (id) => ({ id, sql: (await gh.readFile(repo, id, ref)).trim() })));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Promote, or — without `confirmed` — say what promoting would do.
|
|
62
|
+
*
|
|
63
|
+
* The plan is the run with nothing applied, rather than a separate path, so it
|
|
64
|
+
* cannot disagree with what actually happens. It is also the thing a person
|
|
65
|
+
* reads before saying yes, which is why it names every commit rather than the
|
|
66
|
+
* last one: somebody confirming production is entitled to see work a colleague
|
|
67
|
+
* merged while they were away.
|
|
68
|
+
*/
|
|
69
|
+
export async function promote(spec, ctx, watch) {
|
|
70
|
+
const from = FROM[spec.to];
|
|
71
|
+
if (!from)
|
|
72
|
+
throw new Error(`Nothing promotes to ${spec.to}`);
|
|
73
|
+
const source = branchFor(from);
|
|
74
|
+
const target = branchFor(spec.to);
|
|
75
|
+
const steps = [];
|
|
76
|
+
const settle = (step, state, detail) => {
|
|
77
|
+
const result = { step, state, detail };
|
|
78
|
+
steps.push(result);
|
|
79
|
+
watch?.done?.(result);
|
|
80
|
+
return result;
|
|
81
|
+
};
|
|
82
|
+
const gh = github(await ctx.secrets.get(ctx.reference(KEY_FOR["github"])));
|
|
83
|
+
// What would ship. Read before anything is touched, because it is the thing
|
|
84
|
+
// somebody is being asked about.
|
|
85
|
+
watch?.start?.("what ships");
|
|
86
|
+
const shipping = await gh.commitsAhead(spec.repo, target, source);
|
|
87
|
+
settle("what ships", "exists", shipping.length
|
|
88
|
+
? `${shipping.length} commit${shipping.length === 1 ? "" : "s"} · ${shipping.at(-1).message}`
|
|
89
|
+
: `${target} is already level with ${source}`);
|
|
90
|
+
// What the target database still owes. The files come from the source branch
|
|
91
|
+
// and the ledger from the target's own database, so neither can be stale.
|
|
92
|
+
watch?.start?.("migrations");
|
|
93
|
+
const url = await ctx.secrets.get(`${folderFor(spec.app, spec.to)}DATABASE_URL`);
|
|
94
|
+
const target_db = db(url);
|
|
95
|
+
const owed = pending(await migrationsOn(gh, spec.repo, source), await applied(target_db));
|
|
96
|
+
const destructive = owed.filter((m) => isDestructive(m.sql)).map((m) => m.id);
|
|
97
|
+
settle("migrations", "exists", owed.length
|
|
98
|
+
? `${owed.length} to run${destructive.length ? ` · ${destructive.length} destructive` : ""}`
|
|
99
|
+
: "nothing to run");
|
|
100
|
+
const plan = () => ({
|
|
101
|
+
app: spec.app, to: spec.to, from, planned: true, shipping,
|
|
102
|
+
migrations: owed.map((m) => m.id), destructive, steps,
|
|
103
|
+
ok: steps.every((s) => s.state !== "failed"),
|
|
104
|
+
});
|
|
105
|
+
if (!ctx.confirmed) {
|
|
106
|
+
settle("promote", "would-create", `${source} → ${target}`);
|
|
107
|
+
return plan();
|
|
108
|
+
}
|
|
109
|
+
// Confirmed covers the promotion. It does not cover data: a redeploy undoes
|
|
110
|
+
// a bad release and undoes nothing about a dropped column.
|
|
111
|
+
if (destructive.length && !spec.acceptDestructive) {
|
|
112
|
+
settle("promote", "failed", `${destructive.length} migration${destructive.length === 1 ? "" : "s"} would alter or ` +
|
|
113
|
+
`discard what ${spec.to} already has: ${destructive.join(", ")}. ` +
|
|
114
|
+
`That needs saying separately from promoting.`);
|
|
115
|
+
return { ...plan(), planned: false, ok: false };
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
// Before the merge, because the merge is what deploys. An empty list still
|
|
119
|
+
// ensures the ledger table, which is what makes the first promotion the
|
|
120
|
+
// same shape as every one after it.
|
|
121
|
+
if (owed.length) {
|
|
122
|
+
watch?.start?.("migrate");
|
|
123
|
+
const ran = await apply(target_db, owed);
|
|
124
|
+
settle("migrate", "created", `${ran} statement${ran === 1 ? "" : "s"} against ${spec.to}`);
|
|
125
|
+
}
|
|
126
|
+
watch?.start?.("merge");
|
|
127
|
+
const merged = await gh.mergeBranch(spec.repo, target, source, `Promote ${source} to ${target}\n\nAsked for, not offered. ${shipping.length} commit` +
|
|
128
|
+
`${shipping.length === 1 ? "" : "s"}.`);
|
|
129
|
+
settle("merge", merged ? "created" : "exists", merged
|
|
130
|
+
? `${source} → ${target} · ${merged.sha.slice(0, 7)} · deploying`
|
|
131
|
+
: `${target} was already level with ${source}`);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
settle("promote", "failed", err instanceof Error ? err.message : String(err));
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
...plan(),
|
|
138
|
+
planned: false,
|
|
139
|
+
ok: steps.every((s) => s.state !== "failed"),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=promote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote.js","sourceRoot":"","sources":["../../src/admin/promote.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { type ServiceAccess, type ServiceStatus } from "../../services/types.ts";
|
|
2
|
+
/** One commit, as much of one as a promotion needs to name it. */
|
|
3
|
+
export interface Commit {
|
|
4
|
+
sha: string;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
/** A pull request, as much of one as anything here needs. */
|
|
8
|
+
export interface PullRequest {
|
|
9
|
+
number: number;
|
|
10
|
+
html_url: string;
|
|
11
|
+
}
|
|
2
12
|
export interface Repo {
|
|
3
13
|
name: string;
|
|
4
14
|
full_name: string;
|
|
@@ -8,9 +18,9 @@ export interface Repo {
|
|
|
8
18
|
}
|
|
9
19
|
export declare function github(token: string): {
|
|
10
20
|
login: () => Promise<string>;
|
|
11
|
-
readFile: (fullName: string, path: string) => Promise<string>;
|
|
21
|
+
readFile: (fullName: string, path: string, ref?: string) => Promise<string>;
|
|
12
22
|
readBinaryFile: (fullName: string, path: string) => Promise<string>;
|
|
13
|
-
listFiles: (fullName: string, dir: string) => Promise<string[]>;
|
|
23
|
+
listFiles: (fullName: string, dir: string, ref?: string) => Promise<string[]>;
|
|
14
24
|
commitFiles: (fullName: string, o: {
|
|
15
25
|
branch: string;
|
|
16
26
|
message: string;
|
|
@@ -34,6 +44,14 @@ export declare function github(token: string): {
|
|
|
34
44
|
}) => Promise<void>;
|
|
35
45
|
branches: (fullName: string) => Promise<string[]>;
|
|
36
46
|
createBranch: (fullName: string, branch: string, from: string) => Promise<void>;
|
|
47
|
+
createPullRequest: (fullName: string, o: {
|
|
48
|
+
title: string;
|
|
49
|
+
body: string;
|
|
50
|
+
head: string;
|
|
51
|
+
base: string;
|
|
52
|
+
}) => Promise<PullRequest>;
|
|
53
|
+
commitsAhead: (fullName: string, base: string, head: string) => Promise<Commit[]>;
|
|
54
|
+
mergeBranch: (fullName: string, base: string, head: string, message: string) => Promise<Commit | undefined>;
|
|
37
55
|
status(): Promise<ServiceStatus>;
|
|
38
56
|
access(): Promise<ServiceAccess>;
|
|
39
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"AAYA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKrG,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM;;
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"AAYA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKrG,kEAAkE;AAClE,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAaD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM;;yBAwMA,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;+BAT9C,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;0BA2B3C,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;4BAuB5E,MAAM,KACb;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;SAAE,EAAE,CAAA;KAAE,KACtG,OAAO,CAAC,MAAM,CAAC;yCA/OmD,OAAO,CAAC,IAAI,EAAE,CAAC;2BAYlD,OAAO,CAAC,IAAI,EAAE,CAAC;yBAaf,MAAM,KAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;uBAqBpC,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;uBA0BxE,MAAM,MACT;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAC3D,OAAO,CAAC,IAAI,CAAC;2BA6BoB,MAAM,KAAK;QAAE,SAAS,EAAE,IAAI,CAAA;KAAE,KAAG,OAAO,CAAC,IAAI,CAAC;yBAWhD,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;6BAItB,MAAM,UAAU,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kCAiD9E,MAAM,KACb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAC7D,OAAO,CAAC,WAAW,CAAC;6BApCe,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAC;4BAiBhF,MAAM,QAAQ,MAAM,QAAQ,MAAM,WAAW,MAAM,KAC5D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;cA4IZ,OAAO,CAAC,aAAa,CAAC;cAStB,OAAO,CAAC,aAAa,CAAC;EAgCzC"}
|
|
@@ -143,6 +143,46 @@ export function github(token) {
|
|
|
143
143
|
body: { ref: `refs/heads/${branch}`, sha: ref.object.sha },
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* The commits on `head` that `base` does not have.
|
|
148
|
+
*
|
|
149
|
+
* What a promotion is about to ship, which is never only the last thing
|
|
150
|
+
* built: a person confirming production is entitled to see everything that
|
|
151
|
+
* would go live, including work somebody else merged while they were away.
|
|
152
|
+
*/
|
|
153
|
+
async function commitsAhead(fullName, base, head) {
|
|
154
|
+
const r = await request(`${GH}/repos/${fullName}/compare/${encodeURIComponent(base)}...${encodeURIComponent(head)}`, opts);
|
|
155
|
+
return r.commits.map((c) => ({ sha: c.sha, message: c.commit.message.split("\n")[0] }));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Merge one branch into another.
|
|
159
|
+
*
|
|
160
|
+
* GitHub answers 204 with no body when there is nothing to merge, which is
|
|
161
|
+
* success and not failure — promoting a branch that is already level is a
|
|
162
|
+
* no-op somebody may reasonably ask for twice. A conflict comes back 409 and
|
|
163
|
+
* is left to a person: a promotion is not the place to resolve one.
|
|
164
|
+
*/
|
|
165
|
+
async function mergeBranch(fullName, base, head, message) {
|
|
166
|
+
const merged = await request(`${GH}/repos/${fullName}/merges`, { ...opts, method: "POST", body: { base, head, commit_message: message } });
|
|
167
|
+
return merged?.sha ? { sha: merged.sha, message } : undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Open a pull request, or hand back the one already open for this branch.
|
|
171
|
+
*
|
|
172
|
+
* Idempotent like everything else here: a run that died after pushing the
|
|
173
|
+
* branch has to be safe to repeat, and GitHub answers a second identical
|
|
174
|
+
* request with a 422 rather than with the pull request that already exists.
|
|
175
|
+
*/
|
|
176
|
+
async function createPullRequest(fullName, o) {
|
|
177
|
+
const [owner] = fullName.split("/");
|
|
178
|
+
const query = new URLSearchParams({ head: `${owner}:${o.head}`, base: o.base, state: "open" });
|
|
179
|
+
const [open] = await request(`${GH}/repos/${fullName}/pulls?${query}`, opts);
|
|
180
|
+
if (open)
|
|
181
|
+
return open;
|
|
182
|
+
return await request(`${GH}/repos/${fullName}/pulls`, {
|
|
183
|
+
...opts, method: "POST", body: o,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
146
186
|
/** One file's contents, decoded. Throws when it is not there. */
|
|
147
187
|
/**
|
|
148
188
|
* A file's bytes, base64 as GitHub stores them.
|
|
@@ -157,21 +197,30 @@ export function github(token) {
|
|
|
157
197
|
throw new Error(`${fullName}:${path} is not a file`);
|
|
158
198
|
return res.content.replace(/\n/g, "");
|
|
159
199
|
}
|
|
160
|
-
async function readFile(fullName, path) {
|
|
161
|
-
const
|
|
200
|
+
async function readFile(fullName, path, ref) {
|
|
201
|
+
const at = ref ? `?ref=${encodeURIComponent(ref)}` : "";
|
|
202
|
+
const res = await request(`${GH}/repos/${fullName}/contents/${path.split("/").map(encodeURIComponent).join("/")}${at}`, opts);
|
|
162
203
|
if (!res.content)
|
|
163
204
|
throw new Error(`${fullName}:${path} is not a file`);
|
|
164
205
|
return Buffer.from(res.content, res.encoding ?? "base64").toString("utf8");
|
|
165
206
|
}
|
|
166
207
|
/** Every file under a directory, recursively, as repository paths. */
|
|
167
|
-
|
|
168
|
-
|
|
208
|
+
/**
|
|
209
|
+
* Every file under a directory.
|
|
210
|
+
*
|
|
211
|
+
* `ref` names a branch. Without it GitHub answers from the default one,
|
|
212
|
+
* which is the wrong answer for a promotion: what `staging` is about to owe
|
|
213
|
+
* is what sits on `main`, not what sits on `main`'s eventual successor.
|
|
214
|
+
*/
|
|
215
|
+
async function listFiles(fullName, dir, ref) {
|
|
216
|
+
const at = ref ? `?ref=${encodeURIComponent(ref)}` : "";
|
|
217
|
+
const entries = await request(`${GH}/repos/${fullName}/contents/${dir.split("/").map(encodeURIComponent).join("/")}${at}`, opts);
|
|
169
218
|
const out = [];
|
|
170
219
|
for (const e of entries) {
|
|
171
220
|
if (e.type === "file")
|
|
172
221
|
out.push(e.path);
|
|
173
222
|
else if (e.type === "dir")
|
|
174
|
-
out.push(...(await listFiles(fullName, e.path)));
|
|
223
|
+
out.push(...(await listFiles(fullName, e.path, ref)));
|
|
175
224
|
}
|
|
176
225
|
return out;
|
|
177
226
|
}
|
|
@@ -225,6 +274,9 @@ export function github(token) {
|
|
|
225
274
|
deleteRepo,
|
|
226
275
|
branches,
|
|
227
276
|
createBranch,
|
|
277
|
+
createPullRequest,
|
|
278
|
+
commitsAhead,
|
|
279
|
+
mergeBranch,
|
|
228
280
|
async status() {
|
|
229
281
|
return probe("github", async () => {
|
|
230
282
|
const me = await request(`${GH}/user`, opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/admin/services/github.ts"],"names":[],"mappings":"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"}
|