@codemarc/blt 1.4.2 → 1.4.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/README.md +400 -156
- package/dist/blt +2 -0
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- package/dist/commands/deploy/functions.d.ts +6 -0
- package/dist/commands/deploy/functions.d.ts.map +1 -0
- package/dist/commands/deploy/functions.js +197 -0
- package/dist/commands/deploy/functions.js.map +1 -0
- package/dist/commands/deploy/secrets.d.ts +3 -0
- package/dist/commands/deploy/secrets.d.ts.map +1 -0
- package/dist/commands/deploy/secrets.js +111 -0
- package/dist/commands/deploy/secrets.js.map +1 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +37 -0
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init/script.d.ts +13 -0
- package/dist/commands/init/script.d.ts.map +1 -0
- package/dist/commands/init/script.js +126 -0
- package/dist/commands/init/script.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/show/repo.d.ts.map +1 -1
- package/dist/commands/show/repo.js +1 -41
- package/dist/commands/show/repo.js.map +1 -1
- package/dist/lib/repositories.d.ts +11 -0
- package/dist/lib/repositories.d.ts.map +1 -0
- package/dist/lib/repositories.js +54 -0
- package/dist/lib/repositories.js.map +1 -0
- package/package.json +1 -1
package/dist/blt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAwK5C,wBAAsB,eAAe,CACpC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACjD,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
3
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
4
|
+
const DEFAULT_FUNCTIONS_DIR = "./supabase/functions";
|
|
5
|
+
function exec(command, options = {}) {
|
|
6
|
+
try {
|
|
7
|
+
return execSync(command, {
|
|
8
|
+
encoding: "utf8",
|
|
9
|
+
stdio: options.silent ? "pipe" : "inherit",
|
|
10
|
+
cwd: options.cwd,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (options.ignoreError) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function resolveFunctionsDir(functionsDir) {
|
|
21
|
+
return resolve(process.cwd(), functionsDir ?? DEFAULT_FUNCTIONS_DIR);
|
|
22
|
+
}
|
|
23
|
+
function resolveProjectRoot(functionsDir) {
|
|
24
|
+
const parent = dirname(functionsDir);
|
|
25
|
+
if (basename(functionsDir) === "functions" && basename(parent) === "supabase") {
|
|
26
|
+
return dirname(parent);
|
|
27
|
+
}
|
|
28
|
+
return process.cwd();
|
|
29
|
+
}
|
|
30
|
+
function checkSupabaseCli(logger, cwd) {
|
|
31
|
+
logger.info("Checking Supabase CLI installation...");
|
|
32
|
+
try {
|
|
33
|
+
const version = exec("bunx supabase --version", { silent: true, cwd });
|
|
34
|
+
logger.info(`Supabase CLI found: ${version?.trim() ?? "unknown"}`);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
logger.error("Supabase CLI not found.");
|
|
39
|
+
console.log("Install with: bun install -g supabase");
|
|
40
|
+
console.log("Or use: bunx supabase <command>");
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function checkSupabaseLogin(logger, cwd) {
|
|
45
|
+
logger.info("Checking Supabase authentication...");
|
|
46
|
+
const accessToken = process.env.SUPABASE_ACCESS_TOKEN?.trim();
|
|
47
|
+
if (accessToken) {
|
|
48
|
+
logger.info("Using SUPABASE_ACCESS_TOKEN from environment");
|
|
49
|
+
if (process.env.CI) {
|
|
50
|
+
console.log(`Token length: ${accessToken.length}`);
|
|
51
|
+
console.log(`Token starts with: ${accessToken.substring(0, 10)}...`);
|
|
52
|
+
console.log(`Token ends with: ...${accessToken.substring(accessToken.length - 10)}`);
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
exec("bunx supabase projects list", { silent: true, cwd });
|
|
56
|
+
logger.info("Authenticated with Supabase (via token)");
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
logger.error("SUPABASE_ACCESS_TOKEN is invalid or expired.");
|
|
61
|
+
console.log("Get a new token from: https://supabase.com/dashboard/account/tokens");
|
|
62
|
+
console.log("Make sure the token has Functions permissions.");
|
|
63
|
+
if (process.env.CI && error instanceof Error) {
|
|
64
|
+
console.log("Debug info:");
|
|
65
|
+
console.log(`Error: ${error.message}`);
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
exec("bunx supabase projects list", { silent: true, cwd });
|
|
72
|
+
logger.info("Authenticated with Supabase (via CLI)");
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
logger.warn("Not logged in to Supabase.");
|
|
77
|
+
console.log("Options:");
|
|
78
|
+
console.log("1. Login with: bunx supabase login");
|
|
79
|
+
console.log(" Then link project: bunx supabase link --project-ref $" + "{SUPABASE_PROJECT_REF}");
|
|
80
|
+
console.log("2. Set SUPABASE_ACCESS_TOKEN in your environment");
|
|
81
|
+
console.log(" Get token from: https://supabase.com/dashboard/account/tokens");
|
|
82
|
+
console.log(" Make sure token has Functions scope/permissions");
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function getFunctions(functionsDir, logger) {
|
|
87
|
+
if (!existsSync(functionsDir)) {
|
|
88
|
+
logger.error(`Functions directory not found: ${functionsDir}`);
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
return readdirSync(functionsDir)
|
|
92
|
+
.filter((item) => {
|
|
93
|
+
const itemPath = join(functionsDir, item);
|
|
94
|
+
return statSync(itemPath).isDirectory();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function deployFunction(functionName, projectRef, projectRoot, logger) {
|
|
98
|
+
logger.info(`Deploying function: ${functionName}`);
|
|
99
|
+
try {
|
|
100
|
+
const projectFlag = projectRef ? ` --project-ref "${projectRef}"` : "";
|
|
101
|
+
if (projectRef && !process.env.SUPABASE_ACCESS_TOKEN?.trim()) {
|
|
102
|
+
try {
|
|
103
|
+
logger.info("Checking project link...");
|
|
104
|
+
exec(`bunx supabase link --project-ref "${projectRef}"`, {
|
|
105
|
+
silent: true,
|
|
106
|
+
ignoreError: true,
|
|
107
|
+
cwd: projectRoot,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// Ignore link errors (likely already linked)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exec(`bunx supabase functions deploy ${functionName}${projectFlag}`, { cwd: projectRoot });
|
|
115
|
+
logger.info(`Function '${functionName}' deployed successfully`);
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
logger.error(`Failed to deploy function '${functionName}'`);
|
|
120
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
121
|
+
if (message.includes("403") || message.includes("privileges")) {
|
|
122
|
+
console.error("Authentication/Permission Error:");
|
|
123
|
+
console.error("Your account may not have the necessary privileges.");
|
|
124
|
+
console.error("Try one of these solutions:");
|
|
125
|
+
console.error("1. Login with: bunx supabase login");
|
|
126
|
+
if (projectRef) {
|
|
127
|
+
console.error(`2. Link project: bunx supabase link --project-ref ${projectRef}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.error("2. Link project: bunx supabase link --project-ref <project_ref>");
|
|
131
|
+
}
|
|
132
|
+
console.error("3. Use an access token with Functions permissions:");
|
|
133
|
+
console.error(" Get token: https://supabase.com/dashboard/account/tokens");
|
|
134
|
+
console.error(" Set in your environment: SUPABASE_ACCESS_TOKEN=your_token_here");
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.error(message);
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export async function deployFunctions(options, logger) {
|
|
143
|
+
const functionsDir = resolveFunctionsDir(options.functionsDir);
|
|
144
|
+
const projectRoot = resolveProjectRoot(functionsDir);
|
|
145
|
+
if (!checkSupabaseCli(logger, projectRoot) || !checkSupabaseLogin(logger, projectRoot)) {
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
const functions = getFunctions(functionsDir, logger);
|
|
149
|
+
if (functions.length === 0) {
|
|
150
|
+
logger.warn("No functions found to deploy.");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const projectRef = process.env.SUPABASE_PROJECT_REF?.trim();
|
|
154
|
+
if (options.name) {
|
|
155
|
+
if (!functions.includes(options.name)) {
|
|
156
|
+
logger.error(`Function '${options.name}' not found.`);
|
|
157
|
+
console.log("Available functions:");
|
|
158
|
+
functions.forEach((name) => {
|
|
159
|
+
console.log(` - ${name}`);
|
|
160
|
+
});
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
deployFunction(options.name, projectRef, projectRoot, logger);
|
|
164
|
+
logger.info("Tip: Set secrets with: blt deploy secrets");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
logger.info(`Found ${functions.length} function(s): ${functions.join(", ")}`);
|
|
168
|
+
const results = {
|
|
169
|
+
success: [],
|
|
170
|
+
failed: [],
|
|
171
|
+
};
|
|
172
|
+
for (const name of functions) {
|
|
173
|
+
if (deployFunction(name, projectRef, projectRoot, logger)) {
|
|
174
|
+
results.success.push(name);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
results.failed.push(name);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
console.log("");
|
|
181
|
+
console.log("Deployment Summary");
|
|
182
|
+
console.log("==================");
|
|
183
|
+
if (results.success.length > 0) {
|
|
184
|
+
logger.info(`${results.success.length} function(s) deployed successfully:`);
|
|
185
|
+
results.success.forEach((name) => {
|
|
186
|
+
console.log(` - ${name}`);
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
if (results.failed.length > 0) {
|
|
190
|
+
logger.error(`${results.failed.length} function(s) failed:`);
|
|
191
|
+
results.failed.forEach((name) => {
|
|
192
|
+
console.log(` - ${name}`);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
logger.info("Tip: Set secrets with: blt deploy secrets");
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/commands/deploy/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAyF5C,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC9D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
const DEFAULT_PROJECT_REF = "erpofhdbqnvltzggpnrn";
|
|
3
|
+
function exec(command, options = {}) {
|
|
4
|
+
try {
|
|
5
|
+
return execSync(command, {
|
|
6
|
+
encoding: "utf8",
|
|
7
|
+
stdio: options.silent ? "pipe" : "inherit",
|
|
8
|
+
cwd: options.cwd,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
if (options.ignoreError) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function checkSupabaseCli(logger, cwd) {
|
|
19
|
+
logger.info("Checking Supabase CLI installation...");
|
|
20
|
+
try {
|
|
21
|
+
const version = exec("bunx supabase --version", { silent: true, cwd });
|
|
22
|
+
logger.info(`Supabase CLI found: ${version?.trim() ?? "unknown"}`);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
logger.error("Supabase CLI not found.");
|
|
27
|
+
console.log("Install with: bun install -g supabase");
|
|
28
|
+
console.log("Or use: bunx supabase <command>");
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function checkSupabaseLogin(logger, cwd) {
|
|
33
|
+
logger.info("Checking Supabase authentication...");
|
|
34
|
+
const accessToken = process.env.SUPABASE_ACCESS_TOKEN?.trim();
|
|
35
|
+
if (accessToken) {
|
|
36
|
+
logger.info("Using SUPABASE_ACCESS_TOKEN from environment");
|
|
37
|
+
if (process.env.CI) {
|
|
38
|
+
console.log(`Token length: ${accessToken.length}`);
|
|
39
|
+
console.log(`Token starts with: ${accessToken.substring(0, 10)}...`);
|
|
40
|
+
console.log(`Token ends with: ...${accessToken.substring(accessToken.length - 10)}`);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
exec("bunx supabase projects list", { silent: true, cwd });
|
|
44
|
+
logger.info("Authenticated with Supabase (via token)");
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logger.error("SUPABASE_ACCESS_TOKEN is invalid or expired.");
|
|
49
|
+
console.log("Get a new token from: https://supabase.com/dashboard/account/tokens");
|
|
50
|
+
console.log("Make sure the token has Functions permissions.");
|
|
51
|
+
if (process.env.CI && error instanceof Error) {
|
|
52
|
+
console.log("Debug info:");
|
|
53
|
+
console.log(`Error: ${error.message}`);
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
exec("bunx supabase projects list", { silent: true, cwd });
|
|
60
|
+
logger.info("Authenticated with Supabase (via CLI)");
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
logger.warn("Not logged in to Supabase.");
|
|
65
|
+
console.log("Options:");
|
|
66
|
+
console.log("1. Login with: bunx supabase login");
|
|
67
|
+
console.log(" Then link project: bunx supabase link --project-ref $" + "{SUPABASE_PROJECT_REF}");
|
|
68
|
+
console.log("2. Set SUPABASE_ACCESS_TOKEN in your environment");
|
|
69
|
+
console.log(" Get token from: https://supabase.com/dashboard/account/tokens");
|
|
70
|
+
console.log(" Make sure token has Functions scope/permissions");
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function setSecrets(logger) {
|
|
75
|
+
if (!checkSupabaseCli(logger) || !checkSupabaseLogin(logger)) {
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const stripeKey = process.env.STRIPE_SECRET_KEY;
|
|
79
|
+
const squareToken = process.env.SQUARE_ACCESS_TOKEN;
|
|
80
|
+
if (!stripeKey && !squareToken) {
|
|
81
|
+
logger.error("No payment provider secrets found in environment variables.");
|
|
82
|
+
console.log("Make sure you have a .env file with one or more of:");
|
|
83
|
+
console.log("STRIPE_SECRET_KEY=sk_test_...");
|
|
84
|
+
console.log("SQUARE_ACCESS_TOKEN=EAAAl...");
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const projectRef = (process.env.SUPABASE_PROJECT_REF || DEFAULT_PROJECT_REF).trim();
|
|
88
|
+
const projectFlag = ` --project-ref "${projectRef}"`;
|
|
89
|
+
let secretsSet = 0;
|
|
90
|
+
if (stripeKey) {
|
|
91
|
+
logger.info("Setting STRIPE_SECRET_KEY...");
|
|
92
|
+
exec(`bunx supabase secrets set STRIPE_SECRET_KEY="${stripeKey}"${projectFlag}`);
|
|
93
|
+
logger.info("STRIPE_SECRET_KEY set successfully");
|
|
94
|
+
secretsSet++;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
logger.warn("STRIPE_SECRET_KEY not found, skipping...");
|
|
98
|
+
}
|
|
99
|
+
if (squareToken) {
|
|
100
|
+
logger.info("Setting SQUARE_ACCESS_TOKEN...");
|
|
101
|
+
exec(`bunx supabase secrets set SQUARE_ACCESS_TOKEN="${squareToken}"${projectFlag}`);
|
|
102
|
+
logger.info("SQUARE_ACCESS_TOKEN set successfully");
|
|
103
|
+
secretsSet++;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
logger.warn("SQUARE_ACCESS_TOKEN not found, skipping...");
|
|
107
|
+
}
|
|
108
|
+
logger.info(`${secretsSet} secret(s) set successfully`);
|
|
109
|
+
logger.info("You can verify secrets with: bunx supabase secrets list");
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../src/commands/deploy/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,eAAe,CAAC;AAO5E;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QAwGrD"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { deploySchema } from "./deploy/schema";
|
|
2
2
|
import { deployData } from "./deploy/data";
|
|
3
|
+
import { deployFunctions } from "./deploy/functions";
|
|
4
|
+
import { setSecrets } from "./deploy/secrets";
|
|
3
5
|
import { runSqlFile } from "../lib/database-runner";
|
|
4
6
|
/**
|
|
5
7
|
* Register deploy commands with the CLI program
|
|
@@ -15,6 +17,8 @@ Available operations:
|
|
|
15
17
|
schema Deploy schema from .sql files
|
|
16
18
|
data Deploy data instance from .sql files
|
|
17
19
|
sql Deploy a named SQL file to database
|
|
20
|
+
functions Deploy Supabase Edge Functions
|
|
21
|
+
secrets Set Supabase secrets from environment
|
|
18
22
|
|
|
19
23
|
Run 'blt deploy <operation> --help' for more information on a specific command.
|
|
20
24
|
`;
|
|
@@ -69,5 +73,38 @@ Run 'blt deploy <operation> --help' for more information on a specific command.
|
|
|
69
73
|
process.exit(1);
|
|
70
74
|
}
|
|
71
75
|
});
|
|
76
|
+
program
|
|
77
|
+
.command("deploy functions", "Deploy Supabase Edge Functions")
|
|
78
|
+
.hide()
|
|
79
|
+
.argument("[name]", "Function name")
|
|
80
|
+
.option("--functions-dir <path>", "Path to supabase/functions directory", {
|
|
81
|
+
default: "./supabase/functions",
|
|
82
|
+
})
|
|
83
|
+
.action(async ({ args, options, logger }) => {
|
|
84
|
+
try {
|
|
85
|
+
await deployFunctions({
|
|
86
|
+
name: args.name,
|
|
87
|
+
functionsDir: options.functionsDir,
|
|
88
|
+
}, logger);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
92
|
+
logger.error(`Failed to deploy functions: ${message}`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
program
|
|
97
|
+
.command("deploy secrets", "Set Supabase secrets from environment")
|
|
98
|
+
.hide()
|
|
99
|
+
.action(async ({ logger }) => {
|
|
100
|
+
try {
|
|
101
|
+
await setSecrets(logger);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
105
|
+
logger.error(`Failed to set secrets: ${message}`);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
72
109
|
}
|
|
73
110
|
//# sourceMappingURL=deploy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAgB;IACrD,MAAM,cAAc,GAAG
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
interface InitScriptOptions {
|
|
3
|
+
output: string;
|
|
4
|
+
ssh: boolean;
|
|
5
|
+
workspace: boolean;
|
|
6
|
+
connectionsFromEnv: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Generate a shell script that clones or pulls all BLT projects into the current directory
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateInitScript(options: InitScriptOptions, logger: Logger): Promise<void>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../../src/commands/init/script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAK5C,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAiED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAqFf"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { chmodSync, existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { REPOSITORIES } from "../../lib/repositories";
|
|
4
|
+
function parseEnvFile(envPath) {
|
|
5
|
+
const content = readFileSync(envPath, "utf-8");
|
|
6
|
+
const out = {};
|
|
7
|
+
for (const line of content.split("\n")) {
|
|
8
|
+
const trimmed = line.trim();
|
|
9
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
10
|
+
continue;
|
|
11
|
+
const eq = trimmed.indexOf("=");
|
|
12
|
+
if (eq === -1)
|
|
13
|
+
continue;
|
|
14
|
+
const key = trimmed.slice(0, eq).trim();
|
|
15
|
+
const value = trimmed.slice(eq + 1).trim();
|
|
16
|
+
if (value.startsWith('"') && value.endsWith('"')) {
|
|
17
|
+
out[key] = value.slice(1, -1).replace(/\\"/g, '"');
|
|
18
|
+
}
|
|
19
|
+
else if (value.startsWith("'") && value.endsWith("'")) {
|
|
20
|
+
out[key] = value.slice(1, -1).replace(/\\'/g, "'");
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
out[key] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
function connectionFromSupabaseEnv(env) {
|
|
29
|
+
const connectionString = env.SUPABASE_CONNECTION_STRING;
|
|
30
|
+
if (!connectionString?.startsWith("postgresql://"))
|
|
31
|
+
return null;
|
|
32
|
+
try {
|
|
33
|
+
const u = new URL(connectionString);
|
|
34
|
+
const name = env.SUPABASE_PROJECT_REF ?? u.hostname?.replace(/\./g, "-") ?? "supabase";
|
|
35
|
+
return {
|
|
36
|
+
ssh: "Disabled",
|
|
37
|
+
previewLimit: 50,
|
|
38
|
+
server: u.hostname ?? "",
|
|
39
|
+
port: parseInt(u.port || "5432", 10),
|
|
40
|
+
driver: "PostgreSQL",
|
|
41
|
+
name,
|
|
42
|
+
group: "BLT",
|
|
43
|
+
database: u.pathname?.slice(1) || "postgres",
|
|
44
|
+
password: decodeURIComponent(u.password ?? ""),
|
|
45
|
+
username: decodeURIComponent(u.username ?? ""),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Generate a shell script that clones or pulls all BLT projects into the current directory
|
|
54
|
+
*/
|
|
55
|
+
export async function generateInitScript(options, logger) {
|
|
56
|
+
const lines = [
|
|
57
|
+
"#!/usr/bin/env bash",
|
|
58
|
+
"# BLT project init script - clones or pulls all projects into the current directory",
|
|
59
|
+
"# Generated by: blt init",
|
|
60
|
+
"",
|
|
61
|
+
'set -e',
|
|
62
|
+
"",
|
|
63
|
+
"cd \"$(dirname \"$0\")\"",
|
|
64
|
+
"",
|
|
65
|
+
];
|
|
66
|
+
for (const repo of REPOSITORIES) {
|
|
67
|
+
const url = options.ssh ? repo.sshUrl : repo.url;
|
|
68
|
+
lines.push(`# ${repo.description || repo.name}`);
|
|
69
|
+
lines.push(`if [ -d "${repo.name}" ]; then`);
|
|
70
|
+
lines.push(` echo "Pulling ${repo.name}..."`);
|
|
71
|
+
lines.push(` (cd ${repo.name} && git pull)`);
|
|
72
|
+
lines.push(`else`);
|
|
73
|
+
lines.push(` echo "Cloning ${repo.name}..."`);
|
|
74
|
+
lines.push(` git clone ${url} ${repo.name}`);
|
|
75
|
+
lines.push(`fi`);
|
|
76
|
+
lines.push("");
|
|
77
|
+
}
|
|
78
|
+
lines.push("echo \"Done! All projects are up to date.\"");
|
|
79
|
+
const script = lines.join("\n");
|
|
80
|
+
try {
|
|
81
|
+
await Bun.write(options.output, script);
|
|
82
|
+
// Make executable on Unix
|
|
83
|
+
try {
|
|
84
|
+
chmodSync(options.output, 0o755);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// chmod may fail on Windows, ignore
|
|
88
|
+
}
|
|
89
|
+
logger.info(`Created init script: ${options.output}`);
|
|
90
|
+
if (options.workspace || options.connectionsFromEnv) {
|
|
91
|
+
const baseDir = resolve(dirname(options.output));
|
|
92
|
+
const workspacePath = join(baseDir, "blt.code-workspace");
|
|
93
|
+
const workspaceContent = {};
|
|
94
|
+
if (options.workspace) {
|
|
95
|
+
workspaceContent.folders = REPOSITORIES.map((repo) => ({
|
|
96
|
+
name: repo.name,
|
|
97
|
+
path: repo.name,
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
if (options.connectionsFromEnv) {
|
|
101
|
+
const envPath = join(baseDir, ".env");
|
|
102
|
+
if (existsSync(envPath)) {
|
|
103
|
+
const env = parseEnvFile(envPath);
|
|
104
|
+
const connection = connectionFromSupabaseEnv(env);
|
|
105
|
+
if (connection) {
|
|
106
|
+
workspaceContent.settings = {
|
|
107
|
+
"sqltools.connections": [connection],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Ensure we have at least folders so the file is valid
|
|
113
|
+
if (!workspaceContent.folders) {
|
|
114
|
+
workspaceContent.folders = [];
|
|
115
|
+
}
|
|
116
|
+
await Bun.write(workspacePath, JSON.stringify(workspaceContent, null, "\t") + "\n");
|
|
117
|
+
logger.info(`Created workspace: ${workspacePath}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
122
|
+
logger.error(`Failed to write script: ${message}`);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../../src/commands/init/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,OAAO,EAAE,OAAO,QA4CnD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { generateInitScript } from "./init/script";
|
|
2
|
+
/**
|
|
3
|
+
* Register init command with the CLI program
|
|
4
|
+
*/
|
|
5
|
+
export default function initCommand(program) {
|
|
6
|
+
const initHelpText = `
|
|
7
|
+
Initialize a BLT workspace by creating a script to clone/pull all projects
|
|
8
|
+
|
|
9
|
+
Usage:
|
|
10
|
+
blt init [options]
|
|
11
|
+
|
|
12
|
+
Creates a shell script that will clone all BLT repositories (if they don't exist)
|
|
13
|
+
or pull the latest changes (if they do). Run the generated script in the
|
|
14
|
+
directory where you want the projects to live.
|
|
15
|
+
|
|
16
|
+
With -w, also creates blt.code-workspace with folder entries from the repository list.
|
|
17
|
+
With -c (and -w), adds sqltools.connections from SUPABASE_* vars in .env if present.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
blt init
|
|
21
|
+
blt init -w -c
|
|
22
|
+
./getblt.sh
|
|
23
|
+
`;
|
|
24
|
+
program
|
|
25
|
+
.command("init", "clone repo script")
|
|
26
|
+
.help(initHelpText)
|
|
27
|
+
.option("-o, --output <path>", "Output path for the script", {
|
|
28
|
+
default: "./getblt.sh",
|
|
29
|
+
})
|
|
30
|
+
.option("-s, --ssh", "Use SSH URLs instead of HTTPS URLs", { default: false })
|
|
31
|
+
.option("-w, --workspace", "Also generate blt.code-workspace with folders from repositories", {
|
|
32
|
+
default: false,
|
|
33
|
+
})
|
|
34
|
+
.option("-c, --connections", "Add sqltools.connections from .env if present", {
|
|
35
|
+
default: false,
|
|
36
|
+
})
|
|
37
|
+
.action(async ({ options, logger }) => {
|
|
38
|
+
await generateInitScript({
|
|
39
|
+
output: options.output,
|
|
40
|
+
ssh: options.ssh,
|
|
41
|
+
workspace: options.workspace,
|
|
42
|
+
connectionsFromEnv: options.connections,
|
|
43
|
+
}, logger);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=init.js.map
|