hatchkit 0.1.2 → 0.1.4
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/completion.d.ts +2 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +207 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +33 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +439 -127
- package/dist/config.js.map +1 -1
- package/dist/deploy/coolify-mongo.d.ts +12 -0
- package/dist/deploy/coolify-mongo.d.ts.map +1 -0
- package/dist/deploy/coolify-mongo.js +109 -0
- package/dist/deploy/coolify-mongo.js.map +1 -0
- package/dist/deploy/gpu.d.ts +9 -2
- package/dist/deploy/gpu.d.ts.map +1 -1
- package/dist/deploy/gpu.js +63 -39
- package/dist/deploy/gpu.js.map +1 -1
- package/dist/deploy/keys.d.ts +6 -2
- package/dist/deploy/keys.d.ts.map +1 -1
- package/dist/deploy/keys.js +16 -2
- package/dist/deploy/keys.js.map +1 -1
- package/dist/deploy/pages.d.ts +2 -0
- package/dist/deploy/pages.d.ts.map +1 -0
- package/dist/deploy/pages.js +537 -0
- package/dist/deploy/pages.js.map +1 -0
- package/dist/deploy/rename-domain.d.ts +55 -0
- package/dist/deploy/rename-domain.d.ts.map +1 -0
- package/dist/deploy/rename-domain.js +290 -0
- package/dist/deploy/rename-domain.js.map +1 -0
- package/dist/deploy/terraform.d.ts.map +1 -1
- package/dist/deploy/terraform.js +90 -0
- package/dist/deploy/terraform.js.map +1 -1
- package/dist/dns.d.ts +7 -0
- package/dist/dns.d.ts.map +1 -0
- package/dist/dns.js +124 -0
- package/dist/dns.js.map +1 -0
- package/dist/doctor.d.ts +13 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +368 -0
- package/dist/doctor.js.map +1 -0
- package/dist/explain.d.ts +4 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +173 -0
- package/dist/explain.js.map +1 -0
- package/dist/index.js +521 -61
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts +15 -2
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +52 -7
- package/dist/prompts.js.map +1 -1
- package/dist/provision/glitchtip.d.ts +3 -0
- package/dist/provision/glitchtip.d.ts.map +1 -1
- package/dist/provision/glitchtip.js +18 -0
- package/dist/provision/glitchtip.js.map +1 -1
- package/dist/provision/index.d.ts +26 -0
- package/dist/provision/index.d.ts.map +1 -1
- package/dist/provision/index.js +435 -60
- package/dist/provision/index.js.map +1 -1
- package/dist/provision/openpanel.d.ts +7 -0
- package/dist/provision/openpanel.d.ts.map +1 -1
- package/dist/provision/openpanel.js +113 -48
- package/dist/provision/openpanel.js.map +1 -1
- package/dist/provision/resend.d.ts +23 -1
- package/dist/provision/resend.d.ts.map +1 -1
- package/dist/provision/resend.js +62 -1
- package/dist/provision/resend.js.map +1 -1
- package/dist/provision/write-env.d.ts +31 -0
- package/dist/provision/write-env.d.ts.map +1 -0
- package/dist/provision/write-env.js +94 -0
- package/dist/provision/write-env.js.map +1 -0
- package/dist/scaffold/app.js +8 -0
- package/dist/scaffold/app.js.map +1 -1
- package/dist/scaffold/dotenvx.d.ts.map +1 -1
- package/dist/scaffold/dotenvx.js +8 -1
- package/dist/scaffold/dotenvx.js.map +1 -1
- package/dist/scaffold/infra.d.ts.map +1 -1
- package/dist/scaffold/infra.js +18 -1
- package/dist/scaffold/infra.js.map +1 -1
- package/dist/scaffold/manifest.d.ts +4 -2
- package/dist/scaffold/manifest.d.ts.map +1 -1
- package/dist/scaffold/manifest.js +1 -1
- package/dist/scaffold/manifest.js.map +1 -1
- package/dist/scaffold/ml-client.d.ts +9 -2
- package/dist/scaffold/ml-client.d.ts.map +1 -1
- package/dist/scaffold/ml-client.js +11 -1
- package/dist/scaffold/ml-client.js.map +1 -1
- package/dist/status.d.ts +30 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +169 -0
- package/dist/status.js.map +1 -0
- package/dist/templates/addons/analytics/sentry.ts.hbs +6 -0
- package/dist/templates/base/env.example.hbs +10 -0
- package/dist/templates/base/src/config.ts.hbs +24 -4
- package/dist/utils/cloudflare-api.d.ts +30 -0
- package/dist/utils/cloudflare-api.d.ts.map +1 -0
- package/dist/utils/cloudflare-api.js +85 -0
- package/dist/utils/cloudflare-api.js.map +1 -0
- package/dist/utils/coolify-api.d.ts +47 -1
- package/dist/utils/coolify-api.d.ts.map +1 -1
- package/dist/utils/coolify-api.js +75 -4
- package/dist/utils/coolify-api.js.map +1 -1
- package/dist/utils/flags.d.ts.map +1 -1
- package/dist/utils/flags.js +4 -0
- package/dist/utils/flags.js.map +1 -1
- package/dist/utils/inwx-api.d.ts +36 -0
- package/dist/utils/inwx-api.d.ts.map +1 -0
- package/dist/utils/inwx-api.js +105 -0
- package/dist/utils/inwx-api.js.map +1 -0
- package/dist/utils/secrets.d.ts +8 -1
- package/dist/utils/secrets.d.ts.map +1 -1
- package/dist/utils/secrets.js +8 -1
- package/dist/utils/secrets.js.map +1 -1
- package/package.json +5 -4
- package/scripts/release-prep.mjs +130 -0
|
@@ -14,7 +14,9 @@ export declare class CoolifyApi {
|
|
|
14
14
|
private token;
|
|
15
15
|
constructor(options: CoolifyApiOptions);
|
|
16
16
|
private request;
|
|
17
|
-
/** Test connection and get Coolify version.
|
|
17
|
+
/** Test connection and get Coolify version. The endpoint returns a
|
|
18
|
+
* plain-text version string on modern Coolify, but older builds
|
|
19
|
+
* wrap it as `{ version: "..." }` — accept either. */
|
|
18
20
|
getVersion(): Promise<string>;
|
|
19
21
|
/** List all servers. */
|
|
20
22
|
listServers(): Promise<CoolifyServer[]>;
|
|
@@ -39,6 +41,50 @@ export declare class CoolifyApi {
|
|
|
39
41
|
setAppEnv(appUuid: string, envs: Record<string, string>, options?: {
|
|
40
42
|
isPreview?: boolean;
|
|
41
43
|
}): Promise<void>;
|
|
44
|
+
/** Create a MongoDB database. Coolify will auto-generate root creds
|
|
45
|
+
* if they're not supplied; the returned `internal_db_url` is the
|
|
46
|
+
* full connection string usable from inside Coolify's Docker network
|
|
47
|
+
* (which is where the app container runs). */
|
|
48
|
+
createMongodbDatabase(params: {
|
|
49
|
+
serverUuid: string;
|
|
50
|
+
projectUuid: string;
|
|
51
|
+
environmentName?: string;
|
|
52
|
+
environmentUuid?: string;
|
|
53
|
+
/** Defaults to `default` (the standard Coolify env). */
|
|
54
|
+
name: string;
|
|
55
|
+
initdbDatabase?: string;
|
|
56
|
+
initdbRootUsername?: string;
|
|
57
|
+
/** Coolify auto-generates one if omitted. */
|
|
58
|
+
initdbRootPassword?: string;
|
|
59
|
+
/** Start the container immediately on creation. */
|
|
60
|
+
instantDeploy?: boolean;
|
|
61
|
+
}): Promise<{
|
|
62
|
+
uuid: string;
|
|
63
|
+
internal_db_url: string;
|
|
64
|
+
}>;
|
|
65
|
+
/** Get a database (any engine) by uuid. We use this to read the
|
|
66
|
+
* `internal_db_url` post-creation when the create response didn't
|
|
67
|
+
* include it (older Coolify builds). */
|
|
68
|
+
getDatabase(uuid: string): Promise<{
|
|
69
|
+
uuid: string;
|
|
70
|
+
internal_db_url?: string;
|
|
71
|
+
}>;
|
|
72
|
+
/** Find a project by exact name. Returns null if none matches. */
|
|
73
|
+
findProjectByName(name: string): Promise<{
|
|
74
|
+
uuid: string;
|
|
75
|
+
name: string;
|
|
76
|
+
} | null>;
|
|
77
|
+
/** Find a server by exact name OR exact IP — the script-driven
|
|
78
|
+
* Coolify setup typically targets the first server, but Hetzner
|
|
79
|
+
* deploys are keyed by IP. Returns null if nothing matches. */
|
|
80
|
+
findServer(query: {
|
|
81
|
+
name?: string;
|
|
82
|
+
ip?: string;
|
|
83
|
+
}): Promise<{
|
|
84
|
+
uuid: string;
|
|
85
|
+
name: string;
|
|
86
|
+
ip: string;
|
|
87
|
+
} | null>;
|
|
42
88
|
}
|
|
43
89
|
/** Verify Coolify connection. Returns version string or throws. */
|
|
44
90
|
export declare function verifyCoolify(url: string, token: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coolify-api.d.ts","sourceRoot":"","sources":["../../src/utils/coolify-api.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+BAA+B;AAC/B,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,iBAAiB;YAKxB,OAAO;
|
|
1
|
+
{"version":3,"file":"coolify-api.d.ts","sourceRoot":"","sources":["../../src/utils/coolify-api.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+BAA+B;AAC/B,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE,iBAAiB;YAKxB,OAAO;IAiCrB;;2DAEuD;IACjD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BnC,wBAAwB;IAClB,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAkB7C,yBAAyB;IACnB,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAIlE,4BAA4B;IACtB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAIxE,wEAAwE;IAClE,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAI9F;mEAC+D;IACzD,SAAS,CACb,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GACpC,OAAO,CAAC,IAAI,CAAC;IAahB;;;mDAG+C;IACzC,qBAAqB,CAAC,MAAM,EAAE;QAClC,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,wDAAwD;QACxD,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,6CAA6C;QAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mDAAmD;QACnD,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAetD;;6CAEyC;IACnC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIpF,kEAAkE;IAC5D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAWrF;;oEAEgE;IAC1D,UAAU,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAY/D;AAED,mEAAmE;AACnE,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/E"}
|
|
@@ -25,16 +25,41 @@ export class CoolifyApi {
|
|
|
25
25
|
return JSON.parse(text);
|
|
26
26
|
}
|
|
27
27
|
catch {
|
|
28
|
+
const ct = res.headers.get("content-type") ?? "unknown";
|
|
29
|
+
const snippet = text.slice(0, 200).replace(/\s+/g, " ").trim();
|
|
28
30
|
const hint = text.trimStart().startsWith("<")
|
|
29
31
|
? " (got HTML — token may be invalid or URL points to a login page)"
|
|
30
32
|
: "";
|
|
31
|
-
throw new Error(`Coolify API ${method} ${path}: response is not JSON${hint}`);
|
|
33
|
+
throw new Error(`Coolify API ${method} ${path}: response is not JSON${hint}\n content-type: ${ct}\n body: ${snippet || "(empty)"}`);
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
|
-
/** Test connection and get Coolify version.
|
|
36
|
+
/** Test connection and get Coolify version. The endpoint returns a
|
|
37
|
+
* plain-text version string on modern Coolify, but older builds
|
|
38
|
+
* wrap it as `{ version: "..." }` — accept either. */
|
|
35
39
|
async getVersion() {
|
|
36
|
-
const
|
|
37
|
-
|
|
40
|
+
const res = await fetch(`${this.url}/api/v1/version`, {
|
|
41
|
+
headers: {
|
|
42
|
+
Authorization: `Bearer ${this.token}`,
|
|
43
|
+
Accept: "application/json, text/plain;q=0.9",
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
const text = await res.text().catch(() => "");
|
|
48
|
+
throw new Error(`Coolify API GET /version failed: ${res.status} ${res.statusText}${text ? ` — ${text}` : ""}`);
|
|
49
|
+
}
|
|
50
|
+
const text = (await res.text()).trim();
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(text);
|
|
53
|
+
if (typeof parsed === "string")
|
|
54
|
+
return parsed;
|
|
55
|
+
if (parsed && typeof parsed === "object" && typeof parsed.version === "string") {
|
|
56
|
+
return parsed.version;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Fall through: plain-text version string (e.g. "4.0.0-beta.432")
|
|
61
|
+
}
|
|
62
|
+
return text;
|
|
38
63
|
}
|
|
39
64
|
/** List all servers. */
|
|
40
65
|
async listServers() {
|
|
@@ -72,6 +97,52 @@ export class CoolifyApi {
|
|
|
72
97
|
};
|
|
73
98
|
await this.request("PATCH", `/applications/${appUuid}/envs/bulk`, body);
|
|
74
99
|
}
|
|
100
|
+
/** Create a MongoDB database. Coolify will auto-generate root creds
|
|
101
|
+
* if they're not supplied; the returned `internal_db_url` is the
|
|
102
|
+
* full connection string usable from inside Coolify's Docker network
|
|
103
|
+
* (which is where the app container runs). */
|
|
104
|
+
async createMongodbDatabase(params) {
|
|
105
|
+
const body = {
|
|
106
|
+
server_uuid: params.serverUuid,
|
|
107
|
+
project_uuid: params.projectUuid,
|
|
108
|
+
environment_name: params.environmentName ?? "production",
|
|
109
|
+
name: params.name,
|
|
110
|
+
instant_deploy: params.instantDeploy ?? true,
|
|
111
|
+
};
|
|
112
|
+
if (params.environmentUuid)
|
|
113
|
+
body.environment_uuid = params.environmentUuid;
|
|
114
|
+
if (params.initdbDatabase)
|
|
115
|
+
body.mongo_initdb_database = params.initdbDatabase;
|
|
116
|
+
if (params.initdbRootUsername)
|
|
117
|
+
body.mongo_initdb_root_username = params.initdbRootUsername;
|
|
118
|
+
if (params.initdbRootPassword)
|
|
119
|
+
body.mongo_initdb_root_password = params.initdbRootPassword;
|
|
120
|
+
return this.request("POST", "/databases/mongodb", body);
|
|
121
|
+
}
|
|
122
|
+
/** Get a database (any engine) by uuid. We use this to read the
|
|
123
|
+
* `internal_db_url` post-creation when the create response didn't
|
|
124
|
+
* include it (older Coolify builds). */
|
|
125
|
+
async getDatabase(uuid) {
|
|
126
|
+
return this.request("GET", `/databases/${uuid}`);
|
|
127
|
+
}
|
|
128
|
+
/** Find a project by exact name. Returns null if none matches. */
|
|
129
|
+
async findProjectByName(name) {
|
|
130
|
+
const projects = (await this.request("GET", "/projects"));
|
|
131
|
+
const match = projects.find((p) => p.name === name);
|
|
132
|
+
if (!match || !match.uuid)
|
|
133
|
+
return null;
|
|
134
|
+
return { uuid: match.uuid, name: match.name };
|
|
135
|
+
}
|
|
136
|
+
/** Find a server by exact name OR exact IP — the script-driven
|
|
137
|
+
* Coolify setup typically targets the first server, but Hetzner
|
|
138
|
+
* deploys are keyed by IP. Returns null if nothing matches. */
|
|
139
|
+
async findServer(query) {
|
|
140
|
+
const servers = (await this.request("GET", "/servers"));
|
|
141
|
+
const match = servers.find((s) => (query.name && s.name === query.name) || (query.ip && s.ip === query.ip));
|
|
142
|
+
if (!match?.uuid)
|
|
143
|
+
return null;
|
|
144
|
+
return { uuid: match.uuid, name: match.name, ip: match.ip };
|
|
145
|
+
}
|
|
75
146
|
}
|
|
76
147
|
/** Verify Coolify connection. Returns version string or throws. */
|
|
77
148
|
export async function verifyCoolify(url, token) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coolify-api.js","sourceRoot":"","sources":["../../src/utils/coolify-api.ts"],"names":[],"mappings":"AAYA,+BAA+B;AAC/B,MAAM,OAAO,UAAU;IACb,GAAG,CAAS;IACZ,KAAK,CAAS;IAEtB,YAAY,OAA0B;QACpC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACnE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,UAAU,IAAI,EAAE,EAAE;YACnD,MAAM;YACN,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;gBACrC,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;aAC3B;YACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,IAAI,IAAI,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACnG,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAC3C,CAAC,CAAC,kEAAkE;gBACpE,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"coolify-api.js","sourceRoot":"","sources":["../../src/utils/coolify-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/utils/flags.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC;uDACmD;IACnD,GAAG,EAAE,OAAO,CAAC;IACb;2DACuD;IACvD,MAAM,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC;+CAC2C;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/utils/flags.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,eAAe,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC;uDACmD;IACnD,GAAG,EAAE,OAAO,CAAC;IACb;2DACuD;IACvD,MAAM,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC;+CAC2C;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB;AAsBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CA6FlE"}
|
package/dist/utils/flags.js
CHANGED
package/dist/utils/flags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/utils/flags.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/utils/flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface InwxApiOptions {
|
|
2
|
+
username: string;
|
|
3
|
+
password: string;
|
|
4
|
+
/** Use the OTE sandbox instead of production. Set via INWX_SANDBOX=1. */
|
|
5
|
+
sandbox?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** INWX JSON-RPC API client. */
|
|
8
|
+
export declare class InwxApi {
|
|
9
|
+
private url;
|
|
10
|
+
private username;
|
|
11
|
+
private password;
|
|
12
|
+
private cookie;
|
|
13
|
+
constructor(options: InwxApiOptions);
|
|
14
|
+
private request;
|
|
15
|
+
/** Log in and capture the session cookie. Must be called before any
|
|
16
|
+
* other method. Idempotent — safe to call twice. */
|
|
17
|
+
login(): Promise<void>;
|
|
18
|
+
/** Log out and drop the session cookie. */
|
|
19
|
+
logout(): Promise<void>;
|
|
20
|
+
/** Look up a single domain. Returns the record including current
|
|
21
|
+
* nameservers. Throws if the domain isn't registered on this account. */
|
|
22
|
+
getDomainInfo(domain: string): Promise<{
|
|
23
|
+
domain: string;
|
|
24
|
+
ns: string[];
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Update the nameservers delegated at the registrar for `domain`.
|
|
28
|
+
* Replaces the full list — pass all the NS you want, not a diff.
|
|
29
|
+
*
|
|
30
|
+
* INWX's `domain.update` also accepts many other fields (contacts,
|
|
31
|
+
* transferLock, authinfo, ...). We only touch `ns` here so we never
|
|
32
|
+
* accidentally clobber contact info set via the web UI.
|
|
33
|
+
*/
|
|
34
|
+
setDomainNameservers(domain: string, nameservers: string[]): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=inwx-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inwx-api.d.ts","sourceRoot":"","sources":["../../src/utils/inwx-api.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD,gCAAgC;AAChC,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,OAAO,EAAE,cAAc;YAMrB,OAAO;IAsCrB;yDACqD;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,2CAA2C;IACrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B;8EAC0E;IACpE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAK9E;;;;;;;OAOG;IACG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAQjF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// INWX JSON-RPC API client.
|
|
2
|
+
//
|
|
3
|
+
// The INWX Terraform provider can create DNS records inside a zone, but it
|
|
4
|
+
// can't change the nameservers that the TLD delegates a domain to. That's
|
|
5
|
+
// a "domain object" operation (domain.update), not a "nameserver object"
|
|
6
|
+
// operation — different part of the INWX API. This client handles the
|
|
7
|
+
// domain-level call so hatchkit can automatically point an INWX-registered
|
|
8
|
+
// domain at Cloudflare's nameservers after the CF zone is ready.
|
|
9
|
+
//
|
|
10
|
+
// API docs: https://www.inwx.com/en/help/apidoc
|
|
11
|
+
// Endpoints: https://api.domrobot.com/jsonrpc/ (OTE sandbox on api.ote)
|
|
12
|
+
//
|
|
13
|
+
// The API is JSON-RPC 2.0 over HTTPS, session-cookie authenticated. Call
|
|
14
|
+
// `account.login` once, capture the PHPSESSID cookie, include it on every
|
|
15
|
+
// follow-up request.
|
|
16
|
+
const PROD_URL = "https://api.domrobot.com/jsonrpc/";
|
|
17
|
+
const OTE_URL = "https://api.ote.domrobot.com/jsonrpc/";
|
|
18
|
+
/** INWX JSON-RPC API client. */
|
|
19
|
+
export class InwxApi {
|
|
20
|
+
url;
|
|
21
|
+
username;
|
|
22
|
+
password;
|
|
23
|
+
cookie = null;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.url = options.sandbox ? OTE_URL : PROD_URL;
|
|
26
|
+
this.username = options.username;
|
|
27
|
+
this.password = options.password;
|
|
28
|
+
}
|
|
29
|
+
async request(method, params) {
|
|
30
|
+
const headers = {
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
Accept: "application/json",
|
|
33
|
+
};
|
|
34
|
+
if (this.cookie)
|
|
35
|
+
headers.Cookie = this.cookie;
|
|
36
|
+
const res = await fetch(this.url, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers,
|
|
39
|
+
body: JSON.stringify({ method, params }),
|
|
40
|
+
});
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
throw new Error(`INWX API ${method} failed: HTTP ${res.status} ${res.statusText}`);
|
|
43
|
+
}
|
|
44
|
+
// Capture the session cookie from the response on login. INWX sets
|
|
45
|
+
// PHPSESSID; we pass it back on every subsequent call.
|
|
46
|
+
const setCookie = res.headers.get("set-cookie");
|
|
47
|
+
if (setCookie) {
|
|
48
|
+
const match = setCookie.match(/(PHPSESSID=[^;]+)/);
|
|
49
|
+
if (match)
|
|
50
|
+
this.cookie = match[1];
|
|
51
|
+
}
|
|
52
|
+
const json = (await res.json());
|
|
53
|
+
// INWX returns HTTP 200 with an error code in the body. 1000 = success,
|
|
54
|
+
// anything else is a failure. The `msg` field is the human-readable
|
|
55
|
+
// error — surface it verbatim so callers can see what went wrong
|
|
56
|
+
// (e.g. "Authentication error" vs "Object does not exist").
|
|
57
|
+
if (json.code !== 1000) {
|
|
58
|
+
throw new Error(`INWX ${method} failed: ${json.code} ${json.msg}`);
|
|
59
|
+
}
|
|
60
|
+
return json.resData;
|
|
61
|
+
}
|
|
62
|
+
/** Log in and capture the session cookie. Must be called before any
|
|
63
|
+
* other method. Idempotent — safe to call twice. */
|
|
64
|
+
async login() {
|
|
65
|
+
await this.request("account.login", {
|
|
66
|
+
user: this.username,
|
|
67
|
+
pass: this.password,
|
|
68
|
+
});
|
|
69
|
+
if (!this.cookie) {
|
|
70
|
+
throw new Error("INWX login succeeded but no session cookie was set");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Log out and drop the session cookie. */
|
|
74
|
+
async logout() {
|
|
75
|
+
try {
|
|
76
|
+
await this.request("account.logout", {});
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
this.cookie = null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Look up a single domain. Returns the record including current
|
|
83
|
+
* nameservers. Throws if the domain isn't registered on this account. */
|
|
84
|
+
async getDomainInfo(domain) {
|
|
85
|
+
const data = await this.request("domain.info", { domain });
|
|
86
|
+
return data;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update the nameservers delegated at the registrar for `domain`.
|
|
90
|
+
* Replaces the full list — pass all the NS you want, not a diff.
|
|
91
|
+
*
|
|
92
|
+
* INWX's `domain.update` also accepts many other fields (contacts,
|
|
93
|
+
* transferLock, authinfo, ...). We only touch `ns` here so we never
|
|
94
|
+
* accidentally clobber contact info set via the web UI.
|
|
95
|
+
*/
|
|
96
|
+
async setDomainNameservers(domain, nameservers) {
|
|
97
|
+
if (nameservers.length < 2) {
|
|
98
|
+
// Most registries require ≥2 NS records. Fail loud rather than
|
|
99
|
+
// letting the TLD registry reject it with a less obvious error.
|
|
100
|
+
throw new Error(`At least 2 nameservers required, got ${nameservers.length}`);
|
|
101
|
+
}
|
|
102
|
+
await this.request("domain.update", { domain, ns: nameservers });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=inwx-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inwx-api.js","sourceRoot":"","sources":["../../src/utils/inwx-api.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/secrets.d.ts
CHANGED
|
@@ -5,11 +5,18 @@ export declare const SECRET_KEYS: {
|
|
|
5
5
|
readonly hetznerToken: "hetzner:token";
|
|
6
6
|
readonly dnsInwxPassword: "dns:inwx:password";
|
|
7
7
|
readonly dnsCloudflareToken: "dns:cloudflare:token";
|
|
8
|
+
/** Registrar password when DNS is on Cloudflare but the domain is
|
|
9
|
+
* registered at INWX. Used by the post-apply NS flip in deploy/terraform
|
|
10
|
+
* and by `hatchkit dns link-to-cloudflare`. */
|
|
11
|
+
readonly dnsInwxRegistrarPassword: "dns:inwx-registrar:password";
|
|
8
12
|
readonly s3AccessKey: (provider: string) => string;
|
|
9
13
|
readonly s3SecretKey: (provider: string) => string;
|
|
10
14
|
readonly gpuApiKey: (platform: string) => string;
|
|
11
15
|
readonly glitchtipToken: "glitchtip:auth-token";
|
|
12
|
-
|
|
16
|
+
/** Root-mode OpenPanel client used by the Management API to auto-create
|
|
17
|
+
* per-project clients. Created once in the OpenPanel dashboard. */
|
|
18
|
+
readonly openpanelRootClientId: "openpanel:root-client-id";
|
|
19
|
+
readonly openpanelRootClientSecret: "openpanel:root-client-secret";
|
|
13
20
|
readonly openpanelClientSecret: (name: string) => string;
|
|
14
21
|
readonly resendApiKey: "resend:api-key";
|
|
15
22
|
/** Per-scaffolded-project dotenvx private key for .env.production.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/utils/secrets.ts"],"names":[],"mappings":"AAoBA;mEACmE;AACnE,eAAO,MAAM,WAAW;;;;;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/utils/secrets.ts"],"names":[],"mappings":"AAoBA;mEACmE;AACnE,eAAO,MAAM,WAAW;;;;;IAKtB;;oDAEgD;;qCAExB,MAAM;qCACN,MAAM;mCACR,MAAM;;IAE5B;wEACoE;;;2CAGtC,MAAM;;IAEpC;;+DAE2D;8CAC1B,MAAM;CAC/B,CAAC;AAEX,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEnE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhE;AAED,iEAAiE;AACjE,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD"}
|
package/dist/utils/secrets.js
CHANGED
|
@@ -22,11 +22,18 @@ export const SECRET_KEYS = {
|
|
|
22
22
|
hetznerToken: "hetzner:token",
|
|
23
23
|
dnsInwxPassword: "dns:inwx:password",
|
|
24
24
|
dnsCloudflareToken: "dns:cloudflare:token",
|
|
25
|
+
/** Registrar password when DNS is on Cloudflare but the domain is
|
|
26
|
+
* registered at INWX. Used by the post-apply NS flip in deploy/terraform
|
|
27
|
+
* and by `hatchkit dns link-to-cloudflare`. */
|
|
28
|
+
dnsInwxRegistrarPassword: "dns:inwx-registrar:password",
|
|
25
29
|
s3AccessKey: (provider) => `s3:${provider}:access-key`,
|
|
26
30
|
s3SecretKey: (provider) => `s3:${provider}:secret-key`,
|
|
27
31
|
gpuApiKey: (platform) => `gpu:${platform}:api-key`,
|
|
28
32
|
glitchtipToken: "glitchtip:auth-token",
|
|
29
|
-
|
|
33
|
+
/** Root-mode OpenPanel client used by the Management API to auto-create
|
|
34
|
+
* per-project clients. Created once in the OpenPanel dashboard. */
|
|
35
|
+
openpanelRootClientId: "openpanel:root-client-id",
|
|
36
|
+
openpanelRootClientSecret: "openpanel:root-client-secret",
|
|
30
37
|
openpanelClientSecret: (name) => `openpanel:${name}:client-secret`,
|
|
31
38
|
resendApiKey: "resend:api-key",
|
|
32
39
|
/** Per-scaffolded-project dotenvx private key for .env.production.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/utils/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,iEAAiE;AACjE,uEAAuE;AACvE,sEAAsE;AACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,UAAU,CAAC;AAElE;mEACmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;IAC7B,eAAe,EAAE,mBAAmB;IACpC,kBAAkB,EAAE,sBAAsB;IAC1C,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,MAAM,QAAQ,aAAa;IAC9D,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,MAAM,QAAQ,aAAa;IAC9D,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,OAAO,QAAQ,UAAU;IAC1D,cAAc,EAAE,sBAAsB;IACtC,
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/utils/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,iEAAiE;AACjE,uEAAuE;AACvE,sEAAsE;AACtE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,UAAU,CAAC;AAElE;mEACmE;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY,EAAE,eAAe;IAC7B,YAAY,EAAE,eAAe;IAC7B,eAAe,EAAE,mBAAmB;IACpC,kBAAkB,EAAE,sBAAsB;IAC1C;;oDAEgD;IAChD,wBAAwB,EAAE,6BAA6B;IACvD,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,MAAM,QAAQ,aAAa;IAC9D,WAAW,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,MAAM,QAAQ,aAAa;IAC9D,SAAS,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,OAAO,QAAQ,UAAU;IAC1D,cAAc,EAAE,sBAAsB;IACtC;wEACoE;IACpE,qBAAqB,EAAE,0BAA0B;IACjD,yBAAyB,EAAE,8BAA8B;IACzD,qBAAqB,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,aAAa,IAAI,gBAAgB;IAC1E,YAAY,EAAE,gBAAgB;IAC9B;;+DAE2D;IAC3D,iBAAiB,EAAE,CAAC,WAAmB,EAAE,EAAE,CAAC,WAAW,WAAW,yBAAyB;CACnF,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;IACxD,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hatchkit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"packageManager": "pnpm@10.33.2",
|
|
4
5
|
"description": "Interactive CLI for scaffolding full-stack projects and provisioning observability/email clients",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"bin": {
|
|
@@ -23,9 +24,9 @@
|
|
|
23
24
|
"check": "pnpm run typecheck && pnpm run lint && pnpm run test",
|
|
24
25
|
"install-local": "pnpm run build && npm install -g .",
|
|
25
26
|
"release": "pnpm run release:patch",
|
|
26
|
-
"release:patch": "npm version patch -m \"chore: release v%s\" && pnpm run _release:finish",
|
|
27
|
-
"release:minor": "npm version minor -m \"chore: release v%s\" && pnpm run _release:finish",
|
|
28
|
-
"release:major": "npm version major -m \"chore: release v%s\" && pnpm run _release:finish",
|
|
27
|
+
"release:patch": "node scripts/release-prep.mjs && npm version patch -m \"chore: release v%s\" && pnpm run _release:finish",
|
|
28
|
+
"release:minor": "node scripts/release-prep.mjs && npm version minor -m \"chore: release v%s\" && pnpm run _release:finish",
|
|
29
|
+
"release:major": "node scripts/release-prep.mjs && npm version major -m \"chore: release v%s\" && pnpm run _release:finish",
|
|
29
30
|
"_release:finish": "pnpm run build && pnpm run typecheck && npm publish --access public && git push --follow-tags && npm install -g .",
|
|
30
31
|
"prepublishOnly": "pnpm run build"
|
|
31
32
|
},
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* release-prep — run before `npm version` so any dangling working-tree
|
|
4
|
+
* changes get committed and shipped with the release instead of hanging
|
|
5
|
+
* around on main afterwards.
|
|
6
|
+
*
|
|
7
|
+
* Runs from cli/ (where the release scripts live). Finds the repo root
|
|
8
|
+
* via `git rev-parse --show-toplevel` and operates on the whole repo,
|
|
9
|
+
* not just cli/ — if you've left changes under infra/ or docs/ they get
|
|
10
|
+
* picked up too.
|
|
11
|
+
*
|
|
12
|
+
* Safety rails:
|
|
13
|
+
* - Refuses to run if any staged/untracked path looks like a secret
|
|
14
|
+
* (.env*, *.pem, *.key, *credentials*, *secret*).
|
|
15
|
+
* - Submodule pointer changes (git shows as ` M infra` vs `M infra`)
|
|
16
|
+
* are fine, but untracked content INSIDE a submodule is NOT auto-
|
|
17
|
+
* committed from the parent repo — you'd want to commit that inside
|
|
18
|
+
* the submodule yourself first. We warn + bail in that case.
|
|
19
|
+
* - Interactive: prompts for a commit message (default:
|
|
20
|
+
* "chore: pre-release changes").
|
|
21
|
+
* - Non-interactive (no TTY): uses the default message and proceeds.
|
|
22
|
+
* Skip the whole thing with RELEASE_SKIP_PREP=1.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { execSync, spawnSync } from "node:child_process";
|
|
26
|
+
import { createInterface } from "node:readline";
|
|
27
|
+
import { stdin as input, stdout as output } from "node:process";
|
|
28
|
+
|
|
29
|
+
if (process.env.RELEASE_SKIP_PREP === "1") {
|
|
30
|
+
console.log(" release-prep: RELEASE_SKIP_PREP=1 — skipping.");
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function sh(cmd, opts = {}) {
|
|
35
|
+
return execSync(cmd, { encoding: "utf8", ...opts }).trim();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Find the repo root so git commands work no matter where the script was
|
|
39
|
+
// launched from (pnpm invokes scripts with cwd=cli/).
|
|
40
|
+
let repoRoot;
|
|
41
|
+
try {
|
|
42
|
+
repoRoot = sh("git rev-parse --show-toplevel");
|
|
43
|
+
} catch (err) {
|
|
44
|
+
console.error(" release-prep: not inside a git repo. Aborting.");
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const porcelain = sh("git status --porcelain", { cwd: repoRoot });
|
|
49
|
+
if (!porcelain) {
|
|
50
|
+
console.log(" release-prep: working tree clean. Nothing to commit.");
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const entries = porcelain.split("\n").map((l) => {
|
|
55
|
+
// Porcelain format: "XY path". X = index, Y = worktree. Submodules
|
|
56
|
+
// show up with `m`/`M` in position Y + 1 for content changes.
|
|
57
|
+
const code = l.slice(0, 2);
|
|
58
|
+
const path = l.slice(3);
|
|
59
|
+
return { code, path };
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
console.log("\n release-prep: working tree isn't clean.\n");
|
|
63
|
+
console.log(sh("git status --short", { cwd: repoRoot }));
|
|
64
|
+
|
|
65
|
+
// Refuse secret-looking paths. Keep the pattern conservative — better a
|
|
66
|
+
// false positive that requires manual commit than a leaked token.
|
|
67
|
+
const SECRET_RE = /(^|\/)(\.env(\.|$)|[^/]*credentials[^/]*|[^/]*secret[^/]*|[^/]*\.(pem|key|pfx|p12)$)/i;
|
|
68
|
+
const secretsFound = entries.filter((e) => SECRET_RE.test(e.path));
|
|
69
|
+
if (secretsFound.length > 0) {
|
|
70
|
+
console.error("\n release-prep: refusing — these paths look like secrets:\n");
|
|
71
|
+
for (const e of secretsFound) console.error(` ${e.path}`);
|
|
72
|
+
console.error(
|
|
73
|
+
"\n Resolve manually: gitignore, delete, or commit yourself and re-run the release.",
|
|
74
|
+
);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Untracked content inside a submodule shows as e.g. ' m infra' with
|
|
79
|
+
// only the second column set to lowercase 'm'. Parent-repo `git add`
|
|
80
|
+
// can't reach inside; bail so the user commits in the submodule first.
|
|
81
|
+
const untrackedInSubmodule = entries.filter((e) => e.code === " m" || e.code === "?m");
|
|
82
|
+
if (untrackedInSubmodule.length > 0) {
|
|
83
|
+
console.error(
|
|
84
|
+
"\n release-prep: submodule has untracked changes inside it:\n",
|
|
85
|
+
);
|
|
86
|
+
for (const e of untrackedInSubmodule) {
|
|
87
|
+
console.error(` ${e.path} — commit inside the submodule first`);
|
|
88
|
+
}
|
|
89
|
+
console.error(
|
|
90
|
+
"\n cd into each submodule, commit, then `git add <submodule>` + re-run the release.",
|
|
91
|
+
);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Prompt for a commit message unless we're non-interactive.
|
|
96
|
+
const DEFAULT_MSG = "chore: pre-release changes";
|
|
97
|
+
let message = DEFAULT_MSG;
|
|
98
|
+
if (input.isTTY && output.isTTY) {
|
|
99
|
+
const rl = createInterface({ input, output });
|
|
100
|
+
message = await new Promise((resolve) => {
|
|
101
|
+
rl.question(` Commit message [${DEFAULT_MSG}]: `, (answer) => {
|
|
102
|
+
rl.close();
|
|
103
|
+
resolve(answer.trim() || DEFAULT_MSG);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
} else {
|
|
107
|
+
console.log(` release-prep: non-interactive — using default message "${DEFAULT_MSG}".`);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Stage + commit at the repo root. Using `git add -A` here is intentional
|
|
111
|
+
// (the whole point of this helper is to sweep everything into the release
|
|
112
|
+
// commit); the secret-path guard above is what keeps it safe.
|
|
113
|
+
const add = spawnSync("git", ["add", "-A"], { cwd: repoRoot, stdio: "inherit" });
|
|
114
|
+
if (add.status !== 0) {
|
|
115
|
+
console.error(" release-prep: `git add -A` failed.");
|
|
116
|
+
process.exit(add.status ?? 1);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const commit = spawnSync("git", ["commit", "-m", message], {
|
|
120
|
+
cwd: repoRoot,
|
|
121
|
+
stdio: "inherit",
|
|
122
|
+
});
|
|
123
|
+
if (commit.status !== 0) {
|
|
124
|
+
console.error(
|
|
125
|
+
" release-prep: `git commit` failed (pre-commit hook? empty diff after filters?).",
|
|
126
|
+
);
|
|
127
|
+
process.exit(commit.status ?? 1);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
console.log("\n release-prep: committed. Continuing release.\n");
|