@celsoft/platform 0.7.0 → 0.9.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/adapters/cloudflare.d.ts +11 -10
- package/dist/adapters/cloudflare.js +29 -22
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/adapters/github.d.ts +2 -1
- package/dist/adapters/github.js +5 -0
- package/dist/adapters/github.js.map +1 -1
- package/dist/adapters/r2.d.ts +15 -0
- package/dist/adapters/r2.js +99 -0
- package/dist/adapters/r2.js.map +1 -0
- package/dist/adapters/registry.d.ts +14 -0
- package/dist/adapters/registry.js +42 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/cli.js +45 -8
- package/dist/cli.js.map +1 -1
- package/dist/config.js +5 -2
- package/dist/config.js.map +1 -1
- package/dist/fakes.d.ts +19 -9
- package/dist/fakes.js +51 -20
- package/dist/fakes.js.map +1 -1
- package/dist/legacy.d.ts +10 -0
- package/dist/legacy.js +13 -0
- package/dist/legacy.js.map +1 -0
- package/dist/lifecycle.d.ts +13 -2
- package/dist/lifecycle.js +227 -84
- package/dist/lifecycle.js.map +1 -1
- package/dist/ports.d.ts +25 -10
- package/dist/runtime/files.js +1 -4
- package/dist/runtime/files.js.map +1 -1
- package/dist/target.d.ts +2 -1
- package/dist/target.js +9 -7
- package/dist/target.js.map +1 -1
- package/package.json +1 -1
- package/schema.json +1 -1
- package/dist/ownership.d.ts +0 -16
- package/dist/ownership.js +0 -40
- package/dist/ownership.js.map +0 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { Cloudflare, DnsRecord, Hyperdrive, Zone, ZoneRecord } from "../ports.js";
|
|
1
|
+
import type { Cloudflare, DnsRecord, Hyperdrive, LegacyWorker, Zone, ZoneRecord } from "../ports.js";
|
|
2
|
+
import { R2S3 } from "./r2.js";
|
|
2
3
|
export declare class CloudflareApi implements Cloudflare {
|
|
3
4
|
private readonly client;
|
|
4
5
|
private account;
|
|
6
|
+
readonly s3: R2S3;
|
|
5
7
|
constructor(apiToken: string);
|
|
6
8
|
accountId(): Promise<string>;
|
|
7
9
|
findZone(hostname: string): Promise<Zone | undefined>;
|
|
@@ -11,24 +13,23 @@ export declare class CloudflareApi implements Cloudflare {
|
|
|
11
13
|
updateHyperdrive(id: string, connectionUri: string): Promise<Hyperdrive>;
|
|
12
14
|
deleteHyperdrive(id: string): Promise<void>;
|
|
13
15
|
findWorker(name: string): Promise<boolean>;
|
|
14
|
-
|
|
15
|
-
app: string | null;
|
|
16
|
-
hyperdriveIds: string[];
|
|
17
|
-
} | undefined>;
|
|
18
|
-
tagWorker(name: string, app: string, pr: number | undefined): Promise<void>;
|
|
16
|
+
legacyWorker(name: string): Promise<LegacyWorker | undefined>;
|
|
19
17
|
listWorkers(namePrefix: string): Promise<string[]>;
|
|
20
18
|
deleteWorker(name: string): Promise<void>;
|
|
21
19
|
workerSecretNames(worker: string): Promise<string[]>;
|
|
22
20
|
dnsRecords(zoneId: string, name: string): Promise<ZoneRecord[]>;
|
|
23
|
-
|
|
21
|
+
commentedDnsRecords(zoneId: string, comment: string): Promise<ZoneRecord[]>;
|
|
22
|
+
setDnsRecordComment(zoneId: string, id: string, comment: string): Promise<void>;
|
|
24
23
|
findBucket(name: string): Promise<boolean>;
|
|
25
|
-
createBucket(name: string
|
|
26
|
-
|
|
24
|
+
createBucket(name: string): Promise<void>;
|
|
25
|
+
legacyBucketApp(name: string): Promise<string | null | undefined>;
|
|
27
26
|
deleteBucket(name: string): Promise<void>;
|
|
28
27
|
bucketExpiryDays(name: string): Promise<number | undefined>;
|
|
29
28
|
setBucketExpiry(name: string, days: number): Promise<void>;
|
|
30
29
|
deleteObjects(bucket: string, prefix: string): Promise<number>;
|
|
30
|
+
listObjects(bucket: string, prefix: string): Promise<string[]>;
|
|
31
|
+
copyObject(from: string, key: string, to: string): Promise<void>;
|
|
31
32
|
deleteDnsRecord(zoneId: string, id: string): Promise<void>;
|
|
32
33
|
private listRecords;
|
|
33
|
-
createDnsRecord(zoneId: string, record: DnsRecord): Promise<void>;
|
|
34
|
+
createDnsRecord(zoneId: string, record: DnsRecord, comment: string): Promise<void>;
|
|
34
35
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import CloudflareClient from "cloudflare";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { LEGACY_BUCKET_MARKER, LEGACY_PLATFORM_TAG } from "../legacy.js";
|
|
3
|
+
import { R2S3 } from "./r2.js";
|
|
4
4
|
import { originOf } from "../target.js";
|
|
5
5
|
const EXPIRY_RULE = "platform-expiry";
|
|
6
6
|
export class CloudflareApi {
|
|
7
7
|
client;
|
|
8
8
|
account;
|
|
9
|
+
s3;
|
|
9
10
|
constructor(apiToken) {
|
|
10
11
|
this.client = new CloudflareClient({ apiToken });
|
|
12
|
+
this.s3 = new R2S3(apiToken, () => this.accountId());
|
|
11
13
|
}
|
|
12
14
|
async accountId() {
|
|
13
15
|
if (this.account)
|
|
@@ -72,20 +74,16 @@ export class CloudflareApi {
|
|
|
72
74
|
}
|
|
73
75
|
return false;
|
|
74
76
|
}
|
|
75
|
-
async
|
|
77
|
+
async legacyWorker(name) {
|
|
76
78
|
if (!(await this.findWorker(name)))
|
|
77
79
|
return undefined;
|
|
78
80
|
const account_id = await this.accountId();
|
|
79
81
|
const { tags } = await this.client.workers.scripts.settings.get(name, { account_id });
|
|
80
82
|
const { bindings = [] } = await this.client.workers.scripts.scriptAndVersionSettings.get(name, { account_id });
|
|
81
|
-
const app = tags?.includes(
|
|
83
|
+
const app = tags?.includes(LEGACY_PLATFORM_TAG) ? (tags.find((t) => t.startsWith("app:"))?.slice(4) ?? null) : null;
|
|
82
84
|
const hyperdriveIds = bindings.filter((b) => b.type === "hyperdrive" && b.id).map((b) => b.id);
|
|
83
85
|
return { app, hyperdriveIds };
|
|
84
86
|
}
|
|
85
|
-
async tagWorker(name, app, pr) {
|
|
86
|
-
const tags = [PLATFORM_TAG, appTag(app), ...(pr ? [prTag(pr)] : [])];
|
|
87
|
-
await this.client.workers.scripts.settings.edit(name, { account_id: await this.accountId(), tags });
|
|
88
|
-
}
|
|
89
87
|
async listWorkers(namePrefix) {
|
|
90
88
|
const account_id = await this.accountId();
|
|
91
89
|
const names = [];
|
|
@@ -111,22 +109,23 @@ export class CloudflareApi {
|
|
|
111
109
|
async dnsRecords(zoneId, name) {
|
|
112
110
|
return this.listRecords({ zone_id: zoneId, name: { exact: name } });
|
|
113
111
|
}
|
|
114
|
-
async
|
|
115
|
-
return this.listRecords({ zone_id: zoneId, comment: { exact:
|
|
112
|
+
async commentedDnsRecords(zoneId, comment) {
|
|
113
|
+
return this.listRecords({ zone_id: zoneId, comment: { exact: comment } });
|
|
114
|
+
}
|
|
115
|
+
async setDnsRecordComment(zoneId, id, comment) {
|
|
116
|
+
await this.client.dns.records.edit(id, { zone_id: zoneId, comment });
|
|
116
117
|
}
|
|
117
118
|
async findBucket(name) {
|
|
118
119
|
const { buckets = [] } = await this.client.r2.buckets.list({ account_id: await this.accountId(), name_contains: name });
|
|
119
120
|
return buckets.some((b) => b.name === name);
|
|
120
121
|
}
|
|
121
|
-
async createBucket(name
|
|
122
|
-
|
|
123
|
-
await this.client.r2.buckets.create({ account_id, name });
|
|
124
|
-
await this.client.r2.buckets.objects.upload(BUCKET_MARKER, app, { account_id, bucket_name: name });
|
|
122
|
+
async createBucket(name) {
|
|
123
|
+
await this.client.r2.buckets.create({ account_id: await this.accountId(), name });
|
|
125
124
|
}
|
|
126
|
-
async
|
|
125
|
+
async legacyBucketApp(name) {
|
|
127
126
|
if (!(await this.findBucket(name)))
|
|
128
127
|
return undefined;
|
|
129
|
-
const response = await this.client.r2.buckets.objects.get(
|
|
128
|
+
const response = await this.client.r2.buckets.objects.get(LEGACY_BUCKET_MARKER, { account_id: await this.accountId(), bucket_name: name }).catch(() => undefined);
|
|
130
129
|
return response?.ok ? (await response.text()).trim() : null;
|
|
131
130
|
}
|
|
132
131
|
async deleteBucket(name) {
|
|
@@ -144,15 +143,23 @@ export class CloudflareApi {
|
|
|
144
143
|
});
|
|
145
144
|
}
|
|
146
145
|
async deleteObjects(bucket, prefix) {
|
|
146
|
+
const account_id = await this.accountId();
|
|
147
|
+
const keys = await this.listObjects(bucket, prefix);
|
|
148
|
+
for (const key of keys)
|
|
149
|
+
await this.client.r2.buckets.objects.delete(key, { account_id, bucket_name: bucket });
|
|
150
|
+
return keys.length;
|
|
151
|
+
}
|
|
152
|
+
async listObjects(bucket, prefix) {
|
|
147
153
|
const account_id = await this.accountId();
|
|
148
154
|
const keys = [];
|
|
149
155
|
for await (const object of this.client.r2.buckets.objects.list(bucket, { account_id, prefix })) {
|
|
150
156
|
if (object.key)
|
|
151
157
|
keys.push(object.key);
|
|
152
158
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
159
|
+
return keys;
|
|
160
|
+
}
|
|
161
|
+
async copyObject(from, key, to) {
|
|
162
|
+
await this.s3.copy(from, key, to);
|
|
156
163
|
}
|
|
157
164
|
async deleteDnsRecord(zoneId, id) {
|
|
158
165
|
await this.client.dns.records.delete(id, { zone_id: zoneId });
|
|
@@ -161,18 +168,18 @@ export class CloudflareApi {
|
|
|
161
168
|
const records = [];
|
|
162
169
|
for await (const r of this.client.dns.records.list(params)) {
|
|
163
170
|
const priority = "priority" in r ? r.priority : undefined;
|
|
164
|
-
records.push({ id: r.id, type: r.type, name: r.name, content: String(r.content ?? ""), ...(priority !== undefined && { priority }),
|
|
171
|
+
records.push({ id: r.id, type: r.type, name: r.name, content: String(r.content ?? ""), ...(priority !== undefined && { priority }), comment: r.comment ?? undefined });
|
|
165
172
|
}
|
|
166
173
|
return records;
|
|
167
174
|
}
|
|
168
|
-
async createDnsRecord(zoneId, record) {
|
|
175
|
+
async createDnsRecord(zoneId, record, comment) {
|
|
169
176
|
await this.client.dns.records.create({
|
|
170
177
|
zone_id: zoneId,
|
|
171
178
|
type: record.type,
|
|
172
179
|
name: record.name,
|
|
173
180
|
content: record.content,
|
|
174
181
|
ttl: 1,
|
|
175
|
-
comment
|
|
182
|
+
comment,
|
|
176
183
|
...(record.priority !== undefined && { priority: record.priority }),
|
|
177
184
|
});
|
|
178
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { GitHub } from "../ports.js";
|
|
1
|
+
import type { GitHub, Repo } from "../ports.js";
|
|
2
2
|
export declare class GhCli implements GitHub {
|
|
3
3
|
private readonly repoRoot;
|
|
4
4
|
constructor(repoRoot: string);
|
|
5
5
|
setSecret(name: string, value: string): Promise<void>;
|
|
6
6
|
ensureEnvironment(name: string): Promise<void>;
|
|
7
7
|
openPullRequests(): Promise<number[]>;
|
|
8
|
+
repository(): Promise<Repo>;
|
|
8
9
|
private gh;
|
|
9
10
|
}
|
|
10
11
|
export declare function commentPreviewLink(env: NodeJS.ProcessEnv, pr: number, url: string, sha?: string): Promise<void>;
|
package/dist/adapters/github.js
CHANGED
|
@@ -15,6 +15,11 @@ export class GhCli {
|
|
|
15
15
|
const out = await this.gh(["pr", "list", "--state", "open", "--limit", "1000", "--json", "number", "--jq", ".[].number"]);
|
|
16
16
|
return out.split("\n").filter(Boolean).map(Number);
|
|
17
17
|
}
|
|
18
|
+
// `gh repo view` gives a GraphQL node id; the REST API gives the numeric one Actions also uses.
|
|
19
|
+
async repository() {
|
|
20
|
+
const name = (await this.gh(["repo", "view", "--json", "nameWithOwner", "--jq", ".nameWithOwner"])).trim();
|
|
21
|
+
return JSON.parse(await this.gh(["api", `repos/${name}`, "--jq", "{id, name: .full_name}"]));
|
|
22
|
+
}
|
|
18
23
|
gh(args, stdin) {
|
|
19
24
|
return new Promise((resolve, reject) => {
|
|
20
25
|
const child = spawn("gh", args, { cwd: this.repoRoot, stdio: ["pipe", "pipe", "inherit"] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/adapters/github.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/adapters/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class R2S3 {
|
|
2
|
+
private readonly apiToken;
|
|
3
|
+
private readonly accountId;
|
|
4
|
+
private keys;
|
|
5
|
+
constructor(apiToken: string, accountId: () => Promise<string>);
|
|
6
|
+
put(bucket: string, key: string, body: string, { ifAbsent }?: {
|
|
7
|
+
ifAbsent?: boolean | undefined;
|
|
8
|
+
}): Promise<boolean>;
|
|
9
|
+
get(bucket: string, key: string): Promise<string | undefined>;
|
|
10
|
+
delete(bucket: string, key: string): Promise<void>;
|
|
11
|
+
copy(from: string, key: string, to: string): Promise<void>;
|
|
12
|
+
list(bucket: string, prefix: string): Promise<string[]>;
|
|
13
|
+
private request;
|
|
14
|
+
private credentials;
|
|
15
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { createHash, createHmac } from "node:crypto";
|
|
2
|
+
// R2's S3 API, for what its REST API cannot do: writing only if absent (the REST API ignores
|
|
3
|
+
// If-None-Match) and copying objects with their metadata. Its keys come from the API token
|
|
4
|
+
// itself: the token's id is the access key, and the SHA-256 of its value is the secret.
|
|
5
|
+
export class R2S3 {
|
|
6
|
+
apiToken;
|
|
7
|
+
accountId;
|
|
8
|
+
keys;
|
|
9
|
+
constructor(apiToken, accountId) {
|
|
10
|
+
this.apiToken = apiToken;
|
|
11
|
+
this.accountId = accountId;
|
|
12
|
+
}
|
|
13
|
+
// False when ifAbsent is set and the key already exists.
|
|
14
|
+
async put(bucket, key, body, { ifAbsent = false } = {}) {
|
|
15
|
+
const response = await this.request("PUT", bucket, key, { body, headers: { "content-type": "application/json", ...(ifAbsent && { "if-none-match": "*" }) } });
|
|
16
|
+
if (response.status === 412)
|
|
17
|
+
return false;
|
|
18
|
+
await expectOk(response, `write ${bucket}/${key}`);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
async get(bucket, key) {
|
|
22
|
+
const response = await this.request("GET", bucket, key);
|
|
23
|
+
if (response.status === 404)
|
|
24
|
+
return undefined;
|
|
25
|
+
await expectOk(response, `read ${bucket}/${key}`);
|
|
26
|
+
return response.text();
|
|
27
|
+
}
|
|
28
|
+
async delete(bucket, key) {
|
|
29
|
+
const response = await this.request("DELETE", bucket, key);
|
|
30
|
+
if (response.status !== 404)
|
|
31
|
+
await expectOk(response, `delete ${bucket}/${key}`);
|
|
32
|
+
}
|
|
33
|
+
async copy(from, key, to) {
|
|
34
|
+
const source = `/${from}/${key.split("/").map(encodeURIComponent).join("/")}`;
|
|
35
|
+
await expectOk(await this.request("PUT", to, key, { headers: { "x-amz-copy-source": source } }), `copy ${key} from ${from} to ${to}`);
|
|
36
|
+
}
|
|
37
|
+
async list(bucket, prefix) {
|
|
38
|
+
const keys = [];
|
|
39
|
+
let token;
|
|
40
|
+
do {
|
|
41
|
+
const query = { "list-type": "2", prefix, ...(token && { "continuation-token": token }) };
|
|
42
|
+
const response = await this.request("GET", bucket, "", { query });
|
|
43
|
+
await expectOk(response, `list ${bucket}`);
|
|
44
|
+
const xml = await response.text();
|
|
45
|
+
for (const match of xml.matchAll(/<Key>([^<]*)<\/Key>/g))
|
|
46
|
+
keys.push(unescapeXml(match[1]));
|
|
47
|
+
token = /<IsTruncated>true<\/IsTruncated>/.test(xml) ? unescapeXml(/<NextContinuationToken>([^<]*)</.exec(xml)?.[1] ?? "") : undefined;
|
|
48
|
+
} while (token);
|
|
49
|
+
return keys;
|
|
50
|
+
}
|
|
51
|
+
async request(method, bucket, key, options = {}) {
|
|
52
|
+
const { accessKey, secretKey } = await (this.keys ??= this.credentials());
|
|
53
|
+
const host = `${await this.accountId()}.r2.cloudflarestorage.com`;
|
|
54
|
+
const path = `/${bucket}${key ? `/${key.split("/").map(encodeRfc3986).join("/")}` : ""}`;
|
|
55
|
+
const query = Object.entries(options.query ?? {})
|
|
56
|
+
.map(([k, v]) => `${encodeRfc3986(k)}=${encodeRfc3986(v)}`)
|
|
57
|
+
.sort()
|
|
58
|
+
.join("&");
|
|
59
|
+
const now = new Date().toISOString().replace(/[-:]|\.\d{3}/g, "");
|
|
60
|
+
const day = now.slice(0, 8);
|
|
61
|
+
const payload = sha256(options.body ?? "");
|
|
62
|
+
const headers = { host, "x-amz-content-sha256": payload, "x-amz-date": now, ...options.headers };
|
|
63
|
+
const names = Object.keys(headers).sort();
|
|
64
|
+
const canonical = [method, path, query, names.map((n) => `${n}:${headers[n].trim()}\n`).join(""), names.join(";"), payload].join("\n");
|
|
65
|
+
const scope = `${day}/auto/s3/aws4_request`;
|
|
66
|
+
const toSign = ["AWS4-HMAC-SHA256", now, scope, sha256(canonical)].join("\n");
|
|
67
|
+
let signingKey = Buffer.from(`AWS4${secretKey}`);
|
|
68
|
+
for (const part of [day, "auto", "s3", "aws4_request"])
|
|
69
|
+
signingKey = hmac(signingKey, part);
|
|
70
|
+
const signature = hmac(signingKey, toSign).toString("hex");
|
|
71
|
+
headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKey}/${scope}, SignedHeaders=${names.join(";")}, Signature=${signature}`;
|
|
72
|
+
delete headers.host;
|
|
73
|
+
return fetch(`https://${host}${path}${query ? `?${query}` : ""}`, { method, headers, ...(options.body !== undefined && { body: options.body }) });
|
|
74
|
+
}
|
|
75
|
+
async credentials() {
|
|
76
|
+
const response = await fetch("https://api.cloudflare.com/client/v4/user/tokens/verify", { headers: { authorization: `Bearer ${this.apiToken}` } });
|
|
77
|
+
const { result } = (await response.json());
|
|
78
|
+
if (!result?.id)
|
|
79
|
+
throw new Error("could not read the Cloudflare token's id, which R2's S3 API uses as its access key");
|
|
80
|
+
return { accessKey: result.id, secretKey: sha256(this.apiToken) };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function expectOk(response, what) {
|
|
84
|
+
if (!response.ok)
|
|
85
|
+
throw new Error(`R2 could not ${what}: ${response.status} ${(await response.text()).slice(0, 200)}`);
|
|
86
|
+
}
|
|
87
|
+
function sha256(value) {
|
|
88
|
+
return createHash("sha256").update(value).digest("hex");
|
|
89
|
+
}
|
|
90
|
+
function hmac(key, value) {
|
|
91
|
+
return createHmac("sha256", key).update(value).digest();
|
|
92
|
+
}
|
|
93
|
+
function encodeRfc3986(value) {
|
|
94
|
+
return encodeURIComponent(value).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
95
|
+
}
|
|
96
|
+
function unescapeXml(value) {
|
|
97
|
+
return value.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, '"').replace(/'/g, "'").replace(/&/g, "&");
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=r2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"r2.js","sourceRoot":"","sources":["../../src/adapters/r2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Cloudflare, Registry, Repo } from "../ports.js";
|
|
2
|
+
import type { R2S3 } from "./r2.js";
|
|
3
|
+
export declare const REGISTRY_BUCKET = "celsoft-platform";
|
|
4
|
+
export declare class R2Registry implements Registry {
|
|
5
|
+
private readonly s3;
|
|
6
|
+
private readonly cloudflare;
|
|
7
|
+
private ready;
|
|
8
|
+
constructor(s3: R2S3, cloudflare: Cloudflare);
|
|
9
|
+
get(app: string): Promise<Repo | undefined>;
|
|
10
|
+
claim(app: string, repo: Repo): Promise<boolean>;
|
|
11
|
+
set(app: string, repo: Repo): Promise<void>;
|
|
12
|
+
release(app: string): Promise<void>;
|
|
13
|
+
private ensureBucket;
|
|
14
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const REGISTRY_BUCKET = "celsoft-platform";
|
|
2
|
+
const key = (app) => `apps/${app}.json`;
|
|
3
|
+
// One object per app in an account-wide bucket, each naming the repo that deploys it.
|
|
4
|
+
export class R2Registry {
|
|
5
|
+
s3;
|
|
6
|
+
cloudflare;
|
|
7
|
+
ready;
|
|
8
|
+
constructor(s3, cloudflare) {
|
|
9
|
+
this.s3 = s3;
|
|
10
|
+
this.cloudflare = cloudflare;
|
|
11
|
+
}
|
|
12
|
+
async get(app) {
|
|
13
|
+
if (!(await this.cloudflare.findBucket(REGISTRY_BUCKET)))
|
|
14
|
+
return undefined;
|
|
15
|
+
const text = await this.s3.get(REGISTRY_BUCKET, key(app));
|
|
16
|
+
return text === undefined ? undefined : JSON.parse(text);
|
|
17
|
+
}
|
|
18
|
+
async claim(app, repo) {
|
|
19
|
+
await this.ensureBucket();
|
|
20
|
+
return this.s3.put(REGISTRY_BUCKET, key(app), JSON.stringify(repo), { ifAbsent: true });
|
|
21
|
+
}
|
|
22
|
+
async set(app, repo) {
|
|
23
|
+
await this.ensureBucket();
|
|
24
|
+
await this.s3.put(REGISTRY_BUCKET, key(app), JSON.stringify(repo));
|
|
25
|
+
}
|
|
26
|
+
async release(app) {
|
|
27
|
+
if (await this.cloudflare.findBucket(REGISTRY_BUCKET))
|
|
28
|
+
await this.s3.delete(REGISTRY_BUCKET, key(app));
|
|
29
|
+
}
|
|
30
|
+
ensureBucket() {
|
|
31
|
+
return (this.ready ??= (async () => {
|
|
32
|
+
if (await this.cloudflare.findBucket(REGISTRY_BUCKET))
|
|
33
|
+
return;
|
|
34
|
+
// Two first deploys may both try; the loser's create fails, and the bucket exists either way.
|
|
35
|
+
await this.cloudflare.createBucket(REGISTRY_BUCKET).catch(async (error) => {
|
|
36
|
+
if (!(await this.cloudflare.findBucket(REGISTRY_BUCKET)))
|
|
37
|
+
throw error;
|
|
38
|
+
});
|
|
39
|
+
})());
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAElD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC;AAEhD,sFAAsF;AACtF,MAAM,OAAO,UAAU;IAIF,EAAE;IACF,UAAU;IAJrB,KAAK,CAA4B;IAEzC,YACmB,EAAQ,EACR,UAAsB;kBADtB,EAAE;0BACF,UAAU;IAC1B,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAU,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,IAAU;QACjC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAU;QAC/B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACzG,CAAC;IAEO,YAAY;QAClB,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE;YACjC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC;gBAAE,OAAO;YAC9D,8FAA8F;YAC9F,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;gBACjF,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;oBAAE,MAAM,KAAK,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC,CAAC;IACR,CAAC;CACF"}
|
package/dist/cli.js
CHANGED
|
@@ -8,14 +8,14 @@ import { parseArgs } from "node:util";
|
|
|
8
8
|
import { CloudflareApi } from "./adapters/cloudflare.js";
|
|
9
9
|
import { commentPreviewLink, GhCli } from "./adapters/github.js";
|
|
10
10
|
import { NeonApi } from "./adapters/neon.js";
|
|
11
|
+
import { R2Registry } from "./adapters/registry.js";
|
|
11
12
|
import { ResendApi } from "./adapters/resend.js";
|
|
12
13
|
import { DrizzleMigrator } from "./adapters/drizzle.js";
|
|
13
14
|
import { resetOwner } from "./adapters/owner.js";
|
|
14
15
|
import { WranglerCli } from "./adapters/process.js";
|
|
15
16
|
import { CONFIG_FILE, ConfigError, configVariables, parseConfig, readConfigText, upgradeConfigText } from "./config.js";
|
|
16
17
|
import { checkWorkflow, init, tokenNames } from "./init.js";
|
|
17
|
-
import { cleanup, deploy, destroy, dev, PreflightError, sweep } from "./lifecycle.js";
|
|
18
|
-
import { UnprovenError } from "./ownership.js";
|
|
18
|
+
import { cleanup, deploy, destroy, dev, findPreviews, moveApp, PreflightError, sweep } from "./lifecycle.js";
|
|
19
19
|
import { Run } from "./run.js";
|
|
20
20
|
import { loadSecrets, loadVars } from "./secrets.js";
|
|
21
21
|
const usage = `usage: npx @celsoft/platform <command> [--dry-run] [--dir <app dir>]
|
|
@@ -28,10 +28,12 @@ commands:
|
|
|
28
28
|
deploy deploy prod
|
|
29
29
|
preview <pr> create or update the preview for a pull request
|
|
30
30
|
cleanup <pr> delete the preview for a pull request
|
|
31
|
+
previews list the previews that exist, with their pull request's state
|
|
31
32
|
sweep delete previews whose pull request is closed
|
|
32
33
|
owner reset <email> [--pr <n>]
|
|
33
34
|
make that account the owner and set its password, for an owner locked out
|
|
34
35
|
destroy [--data] delete everything the platform made for the app; --data also deletes its data
|
|
36
|
+
apps move give the app's name to this repo, when it takes the app over from another
|
|
35
37
|
ci run the command for the current GitHub Actions event`;
|
|
36
38
|
async function main(argv) {
|
|
37
39
|
const { values, positionals } = parseArgs({
|
|
@@ -96,6 +98,10 @@ async function main(argv) {
|
|
|
96
98
|
await ownerReset(ctx, app.config, command.email, values.pr === undefined ? undefined : prNumber(values.pr));
|
|
97
99
|
return;
|
|
98
100
|
}
|
|
101
|
+
if (command.name === "previews") {
|
|
102
|
+
await listPreviews(ctx, appDir);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
99
105
|
if (command.name === "sweep") {
|
|
100
106
|
await sweep(ctx, await new GhCli(repoRoot(appDir)).openPullRequests());
|
|
101
107
|
return;
|
|
@@ -104,6 +110,10 @@ async function main(argv) {
|
|
|
104
110
|
await confirmDestroy(ctx, app.config.name, values.data);
|
|
105
111
|
return;
|
|
106
112
|
}
|
|
113
|
+
if (command.name === "apps move") {
|
|
114
|
+
await moveApp(ctx);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
107
117
|
const { hostname } = await deploy(ctx, command.name === "deploy" ? { kind: "prod" } : { kind: "preview", pr: command.pr });
|
|
108
118
|
if (dryRun)
|
|
109
119
|
return;
|
|
@@ -122,7 +132,9 @@ function parseCommand([name, pr, extra]) {
|
|
|
122
132
|
}
|
|
123
133
|
if (name === "db" && pr === "generate")
|
|
124
134
|
return { name: "db generate" };
|
|
125
|
-
if (name === "
|
|
135
|
+
if (name === "apps" && pr === "move")
|
|
136
|
+
return { name: "apps move" };
|
|
137
|
+
if (name === "upgrade" || name === "sweep" || name === "previews")
|
|
126
138
|
return { name };
|
|
127
139
|
if (name === "init" || name === "dev" || name === "deploy" || name === "destroy")
|
|
128
140
|
return { name };
|
|
@@ -155,23 +167,48 @@ async function loadApp(appDir) {
|
|
|
155
167
|
return { config: parseConfig(text, join(appDir, CONFIG_FILE), variables), variables };
|
|
156
168
|
}
|
|
157
169
|
async function context(appDir, config, dryRun) {
|
|
158
|
-
|
|
170
|
+
// Every provider key is read whatever platform.jsonc turns on, so destroy can find what an
|
|
171
|
+
// earlier configuration made.
|
|
172
|
+
const secrets = await loadSecrets(appDir, [...tokenNames({ ...config, email: true }), ...(config.database ? [] : ["NEON_API_KEY"]), ...config.secrets]);
|
|
159
173
|
const cloudflareToken = requireToken(secrets, "CLOUDFLARE_API_TOKEN");
|
|
160
|
-
const neonKey = config.database ? requireToken(secrets, "NEON_API_KEY") : "";
|
|
161
|
-
const resendKey = config.email ? requireToken(secrets, "RESEND_API_KEY") : "";
|
|
174
|
+
const neonKey = config.database ? requireToken(secrets, "NEON_API_KEY") : (secrets.NEON_API_KEY ?? "");
|
|
175
|
+
const resendKey = config.email ? requireToken(secrets, "RESEND_API_KEY") : (secrets.RESEND_API_KEY ?? "");
|
|
176
|
+
const cloudflare = new CloudflareApi(cloudflareToken);
|
|
177
|
+
let repo;
|
|
162
178
|
return {
|
|
163
179
|
config,
|
|
164
180
|
secrets,
|
|
165
181
|
run: new Run(dryRun, (line) => console.log(line)),
|
|
182
|
+
repo: () => (repo ??= currentRepo(appDir)),
|
|
183
|
+
providers: { neon: Boolean(neonKey), mail: Boolean(resendKey) },
|
|
166
184
|
ports: {
|
|
167
|
-
cloudflare
|
|
185
|
+
cloudflare,
|
|
168
186
|
neon: new NeonApi(neonKey),
|
|
169
187
|
mail: new ResendApi(resendKey),
|
|
188
|
+
registry: new R2Registry(cloudflare.s3, cloudflare),
|
|
170
189
|
wrangler: new WranglerCli(appDir, { CLOUDFLARE_API_TOKEN: cloudflareToken }, config.worker),
|
|
171
190
|
migrator: new DrizzleMigrator(appDir, config),
|
|
172
191
|
},
|
|
173
192
|
};
|
|
174
193
|
}
|
|
194
|
+
// Actions names the repo it runs in; locally the GitHub CLI looks it up from the git remote.
|
|
195
|
+
async function currentRepo(appDir) {
|
|
196
|
+
const { GITHUB_REPOSITORY_ID: id, GITHUB_REPOSITORY: name } = process.env;
|
|
197
|
+
if (id && name)
|
|
198
|
+
return { id: Number(id), name };
|
|
199
|
+
return new GhCli(repoRoot(appDir)).repository();
|
|
200
|
+
}
|
|
201
|
+
// Read-only: what exists for each preview, so leftovers a cleanup missed stand out.
|
|
202
|
+
async function listPreviews(ctx, appDir) {
|
|
203
|
+
const previews = await findPreviews(ctx);
|
|
204
|
+
if (previews.length === 0)
|
|
205
|
+
return console.log("no previews");
|
|
206
|
+
const open = await new GhCli(repoRoot(appDir)).openPullRequests();
|
|
207
|
+
for (const { pr, pieces } of previews) {
|
|
208
|
+
const state = open.includes(pr) ? "open" : "closed, the next sweep removes it";
|
|
209
|
+
console.log(`PR ${String(pr).padEnd(6)} ${state}\n ${pieces.join(", ")}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
175
212
|
// Recovery for an owner who lost their password or email: whoever holds the project's tokens can
|
|
176
213
|
// already reach everything, so the new password is typed here, never passed as an argument.
|
|
177
214
|
async function ownerReset(ctx, config, email, pr) {
|
|
@@ -285,7 +322,7 @@ function maskInCi(values) {
|
|
|
285
322
|
class UsageError extends Error {
|
|
286
323
|
}
|
|
287
324
|
main(process.argv.slice(2)).catch((error) => {
|
|
288
|
-
const known = error instanceof ConfigError || error instanceof PreflightError || error instanceof
|
|
325
|
+
const known = error instanceof ConfigError || error instanceof PreflightError || error instanceof UsageError;
|
|
289
326
|
console.error(`✗ ${known ? error.message : error instanceof Error ? (error.stack ?? error.message) : String(error)}`);
|
|
290
327
|
process.exit(1);
|
|
291
328
|
});
|