@glubean/cli 0.1.47 → 0.1.49
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/commands/env.d.ts +14 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +80 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -17
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +6 -2
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +252 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/trigger.d.ts +13 -0
- package/dist/commands/trigger.d.ts.map +1 -0
- package/dist/commands/trigger.js +213 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/commands/worker.d.ts +14 -0
- package/dist/commands/worker.d.ts.map +1 -0
- package/dist/commands/worker.js +10 -0
- package/dist/commands/worker.js.map +1 -0
- package/dist/lib/active_env.d.ts +30 -0
- package/dist/lib/active_env.d.ts.map +1 -0
- package/dist/lib/active_env.js +63 -0
- package/dist/lib/active_env.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +29 -0
- package/dist/main.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync command - packages and uploads test files to the Glubean cloud registry.
|
|
3
|
+
*/
|
|
4
|
+
import { join, relative, resolve } from "node:path";
|
|
5
|
+
import { readdir, readFile, stat, rm } from "node:fs/promises";
|
|
6
|
+
import archiver from "archiver";
|
|
7
|
+
import { createWriteStream } from "node:fs";
|
|
8
|
+
import { scan } from "@glubean/scanner";
|
|
9
|
+
import { buildMetadata } from "../metadata.js";
|
|
10
|
+
import { CLI_VERSION } from "../version.js";
|
|
11
|
+
import { resolveApiUrl, resolveProjectId, resolveToken } from "../lib/auth.js";
|
|
12
|
+
import { loadConfig } from "../lib/config.js";
|
|
13
|
+
import { loadProjectEnv } from "../lib/env.js";
|
|
14
|
+
const colors = {
|
|
15
|
+
reset: "\x1b[0m",
|
|
16
|
+
bold: "\x1b[1m",
|
|
17
|
+
dim: "\x1b[2m",
|
|
18
|
+
green: "\x1b[32m",
|
|
19
|
+
yellow: "\x1b[33m",
|
|
20
|
+
blue: "\x1b[34m",
|
|
21
|
+
red: "\x1b[31m",
|
|
22
|
+
cyan: "\x1b[36m",
|
|
23
|
+
};
|
|
24
|
+
const DEFAULT_SKIP_DIRS = [
|
|
25
|
+
"node_modules",
|
|
26
|
+
".git",
|
|
27
|
+
".glubean",
|
|
28
|
+
"dist",
|
|
29
|
+
"build",
|
|
30
|
+
];
|
|
31
|
+
function parseIgnorePatterns(content) {
|
|
32
|
+
const patterns = [];
|
|
33
|
+
for (const raw of content.split("\n")) {
|
|
34
|
+
const line = raw.trim();
|
|
35
|
+
if (!line || line.startsWith("#"))
|
|
36
|
+
continue;
|
|
37
|
+
let pattern = line;
|
|
38
|
+
if (pattern.startsWith("/"))
|
|
39
|
+
pattern = pattern.slice(1);
|
|
40
|
+
if (pattern.endsWith("/"))
|
|
41
|
+
pattern = pattern.slice(0, -1);
|
|
42
|
+
pattern = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&");
|
|
43
|
+
pattern = pattern
|
|
44
|
+
.replace(/\*\*/g, "{{GLOBSTAR}}")
|
|
45
|
+
.replace(/\*/g, "[^/]*")
|
|
46
|
+
.replace(/\?/g, "[^/]")
|
|
47
|
+
.replace(/\{\{GLOBSTAR\}\}/g, ".*");
|
|
48
|
+
patterns.push(new RegExp(`(^|/)${pattern}(/|$)`));
|
|
49
|
+
}
|
|
50
|
+
return patterns;
|
|
51
|
+
}
|
|
52
|
+
async function walkForFiles(dir, skipPatterns) {
|
|
53
|
+
const files = [];
|
|
54
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
if (entry.name.startsWith(".") && entry.name !== ".env" && entry.name !== ".glubeanignore") {
|
|
57
|
+
// Skip hidden files except .env and .glubeanignore
|
|
58
|
+
}
|
|
59
|
+
const full = join(dir, entry.name);
|
|
60
|
+
if (entry.isDirectory()) {
|
|
61
|
+
if (DEFAULT_SKIP_DIRS.includes(entry.name))
|
|
62
|
+
continue;
|
|
63
|
+
files.push(...await walkForFiles(full, skipPatterns));
|
|
64
|
+
}
|
|
65
|
+
else if (entry.isFile()) {
|
|
66
|
+
files.push(full);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return files;
|
|
70
|
+
}
|
|
71
|
+
async function collectBundleFiles(dir) {
|
|
72
|
+
const skipPatterns = DEFAULT_SKIP_DIRS.map((d) => new RegExp(`(^|/)${d}(/|$)`));
|
|
73
|
+
const ignorePath = join(dir, ".glubeanignore");
|
|
74
|
+
try {
|
|
75
|
+
const content = await readFile(ignorePath, "utf-8");
|
|
76
|
+
skipPatterns.push(...parseIgnorePatterns(content));
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// No .glubeanignore
|
|
80
|
+
}
|
|
81
|
+
const allFiles = await walkForFiles(dir, skipPatterns);
|
|
82
|
+
const files = [];
|
|
83
|
+
for (const file of allFiles) {
|
|
84
|
+
const rel = relative(dir, file);
|
|
85
|
+
if (rel.startsWith(".glubean-bundle-"))
|
|
86
|
+
continue;
|
|
87
|
+
// Apply skip patterns
|
|
88
|
+
if (skipPatterns.some((p) => p.test(rel)))
|
|
89
|
+
continue;
|
|
90
|
+
files.push(rel);
|
|
91
|
+
}
|
|
92
|
+
return files.sort();
|
|
93
|
+
}
|
|
94
|
+
async function createBundleTar(dir, metadata, outputPath) {
|
|
95
|
+
const bundleFiles = await collectBundleFiles(dir);
|
|
96
|
+
return new Promise((resolve, reject) => {
|
|
97
|
+
const output = createWriteStream(outputPath);
|
|
98
|
+
const archive = archiver("tar");
|
|
99
|
+
output.on("close", () => resolve(bundleFiles.length));
|
|
100
|
+
archive.on("error", (err) => reject(err));
|
|
101
|
+
archive.pipe(output);
|
|
102
|
+
// Add metadata.json
|
|
103
|
+
const metadataContent = JSON.stringify(metadata, null, 2);
|
|
104
|
+
archive.append(metadataContent, { name: "metadata.json" });
|
|
105
|
+
// Add all project files
|
|
106
|
+
for (const filePath of bundleFiles) {
|
|
107
|
+
const srcPath = join(dir, filePath);
|
|
108
|
+
archive.file(srcPath, { name: filePath });
|
|
109
|
+
}
|
|
110
|
+
archive.finalize();
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async function initSync(projectId, version, apiUrl, token) {
|
|
114
|
+
const headers = {
|
|
115
|
+
"Content-Type": "application/json",
|
|
116
|
+
};
|
|
117
|
+
if (token)
|
|
118
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
119
|
+
const response = await fetch(`${apiUrl}/projects/${projectId}/bundles/sync/init`, {
|
|
120
|
+
method: "POST",
|
|
121
|
+
headers,
|
|
122
|
+
body: JSON.stringify({ version }),
|
|
123
|
+
});
|
|
124
|
+
if (!response.ok) {
|
|
125
|
+
const error = await response.text();
|
|
126
|
+
throw new Error(`Init sync failed: ${response.status} - ${error}`);
|
|
127
|
+
}
|
|
128
|
+
return response.json();
|
|
129
|
+
}
|
|
130
|
+
async function uploadToS3(tarPath, uploadUrl) {
|
|
131
|
+
const tarContent = await readFile(tarPath);
|
|
132
|
+
const response = await fetch(uploadUrl, {
|
|
133
|
+
method: "PUT",
|
|
134
|
+
headers: { "Content-Type": "application/x-tar" },
|
|
135
|
+
body: tarContent,
|
|
136
|
+
});
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
const error = await response.text();
|
|
139
|
+
throw new Error(`S3 upload failed: ${response.status} - ${error}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async function completeSync(projectId, bundleId, timestamp, files, apiUrl, token) {
|
|
143
|
+
const headers = {
|
|
144
|
+
"Content-Type": "application/json",
|
|
145
|
+
};
|
|
146
|
+
if (token)
|
|
147
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
148
|
+
const response = await fetch(`${apiUrl}/projects/${projectId}/bundles/sync/complete`, {
|
|
149
|
+
method: "POST",
|
|
150
|
+
headers,
|
|
151
|
+
body: JSON.stringify({ bundleId, timestamp, files }),
|
|
152
|
+
});
|
|
153
|
+
if (!response.ok) {
|
|
154
|
+
const error = await response.text();
|
|
155
|
+
throw new Error(`Complete sync failed: ${response.status} - ${error}`);
|
|
156
|
+
}
|
|
157
|
+
return response.json();
|
|
158
|
+
}
|
|
159
|
+
export async function syncCommand(options = {}) {
|
|
160
|
+
console.log(`\n${colors.bold}${colors.blue}☁️ Glubean Sync${colors.reset}\n`);
|
|
161
|
+
const dir = options.dir ? resolve(options.dir) : process.cwd();
|
|
162
|
+
const config = await loadConfig(dir);
|
|
163
|
+
const envFileVars = await loadProjectEnv(dir, config.run.envFile);
|
|
164
|
+
const sources = { envFileVars, cloudConfig: config.cloud };
|
|
165
|
+
const authOpts = {
|
|
166
|
+
token: options.token,
|
|
167
|
+
project: options.project,
|
|
168
|
+
apiUrl: options.apiUrl,
|
|
169
|
+
};
|
|
170
|
+
const projectId = await resolveProjectId(authOpts, sources);
|
|
171
|
+
if (!projectId) {
|
|
172
|
+
console.log(`${colors.red}✗ Error: No project ID found.${colors.reset}`);
|
|
173
|
+
console.log(`${colors.dim} Use --project, set GLUBEAN_PROJECT_ID, add to .env, or configure in package.json glubean.cloud.${colors.reset}\n`);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
const version = options.version ||
|
|
177
|
+
new Date().toISOString().replace(/[:.]/g, "-");
|
|
178
|
+
const apiUrl = (await resolveApiUrl(authOpts, sources)).replace(/\/$/, "");
|
|
179
|
+
const token = await resolveToken(authOpts, sources);
|
|
180
|
+
console.log(`${colors.dim}Project: ${colors.reset}${projectId}`);
|
|
181
|
+
console.log(`${colors.dim}Version: ${colors.reset}${version}`);
|
|
182
|
+
console.log(`${colors.dim}Directory: ${colors.reset}${dir}`);
|
|
183
|
+
console.log();
|
|
184
|
+
console.log(`${colors.cyan}→ Scanning test files...${colors.reset}`);
|
|
185
|
+
const scanResult = await scan(dir);
|
|
186
|
+
if (scanResult.fileCount === 0) {
|
|
187
|
+
console.log(`${colors.yellow}⚠️ No test files found.${colors.reset}`);
|
|
188
|
+
console.log(`${colors.dim} Make sure your test files import from @glubean/sdk and export test().${colors.reset}\n`);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const metadata = await buildMetadata(scanResult, {
|
|
192
|
+
generatedBy: `@glubean/cli@${CLI_VERSION}`,
|
|
193
|
+
projectId,
|
|
194
|
+
version,
|
|
195
|
+
});
|
|
196
|
+
const files = metadata.files;
|
|
197
|
+
const testCount = metadata.testCount;
|
|
198
|
+
const fileCount = metadata.fileCount;
|
|
199
|
+
console.log(`${colors.green}✓ Found ${testCount} test(s) in ${fileCount} file(s)${colors.reset}`);
|
|
200
|
+
for (const [path, meta] of Object.entries(files)) {
|
|
201
|
+
console.log(`${colors.dim} • ${path}${colors.reset}`);
|
|
202
|
+
for (const exp of meta.exports) {
|
|
203
|
+
const tagStr = exp.tags ? ` [${exp.tags.join(", ")}]` : "";
|
|
204
|
+
console.log(`${colors.dim} - ${exp.id}${tagStr}${colors.reset}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
console.log();
|
|
208
|
+
console.log(`${colors.cyan}→ Generating metadata.json...${colors.reset}`);
|
|
209
|
+
console.log(`${colors.green}✓ Metadata generated${colors.reset}\n`);
|
|
210
|
+
const syncTimestamp = Date.now();
|
|
211
|
+
const tarPath = join(process.cwd(), `.glubean-bundle-${version}.tar`);
|
|
212
|
+
console.log(`${colors.cyan}→ Bundling project files...${colors.reset}`);
|
|
213
|
+
const bundledFileCount = await createBundleTar(dir, metadata, tarPath);
|
|
214
|
+
const tarStat = await stat(tarPath);
|
|
215
|
+
const sizeKB = (tarStat.size / 1024).toFixed(2);
|
|
216
|
+
const dataFileCount = bundledFileCount - fileCount;
|
|
217
|
+
const breakdown = dataFileCount > 0 ? ` (${fileCount} test + ${dataFileCount} data/support)` : "";
|
|
218
|
+
console.log(`${colors.green}✓ Bundle created: ${bundledFileCount} files${breakdown}, ${sizeKB} KB${colors.reset}\n`);
|
|
219
|
+
if (options.dryRun) {
|
|
220
|
+
console.log(`${colors.yellow}🔍 Dry run - skipping upload${colors.reset}`);
|
|
221
|
+
console.log(`${colors.dim} Bundle saved to: ${tarPath}${colors.reset}`);
|
|
222
|
+
console.log(`${colors.dim} Metadata:${colors.reset}`);
|
|
223
|
+
console.log(JSON.stringify(metadata, null, 2));
|
|
224
|
+
console.log(`\n${colors.green}${colors.bold}✓ Sync complete (dry run)!${colors.reset}\n`);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
console.log(`${colors.cyan}→ Initializing sync...${colors.reset}`);
|
|
229
|
+
const initResult = await initSync(projectId, version, apiUrl, token ?? undefined);
|
|
230
|
+
console.log(`${colors.green}✓ Bundle ID: ${initResult.bundleId}${colors.reset}`);
|
|
231
|
+
console.log(`${colors.cyan}→ Uploading to cloud storage...${colors.reset}`);
|
|
232
|
+
await uploadToS3(tarPath, initResult.uploadUrl);
|
|
233
|
+
console.log(`${colors.green}✓ Upload complete${colors.reset}`);
|
|
234
|
+
console.log(`${colors.cyan}→ Finalizing sync...${colors.reset}`);
|
|
235
|
+
const completeResult = await completeSync(projectId, initResult.bundleId, syncTimestamp, metadata.files, apiUrl, token ?? undefined);
|
|
236
|
+
console.log(`${colors.green}✓ Sync finalized${colors.reset}`);
|
|
237
|
+
console.log();
|
|
238
|
+
console.log(`${colors.bold}Bundle Summary:${colors.reset}`);
|
|
239
|
+
console.log(`${colors.dim} ID: ${colors.reset}${completeResult.bundleId}`);
|
|
240
|
+
console.log(`${colors.dim} Version: ${colors.reset}${completeResult.version}`);
|
|
241
|
+
console.log(`${colors.dim} Tests: ${colors.reset}${completeResult.testCount}`);
|
|
242
|
+
console.log(`${colors.dim} Files: ${colors.reset}${completeResult.fileCount}`);
|
|
243
|
+
await rm(tarPath).catch(() => { });
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
console.log(`${colors.red}✗ Sync failed: ${error instanceof Error ? error.message : error}${colors.reset}`);
|
|
247
|
+
console.log(`${colors.dim} Bundle saved locally: ${tarPath}${colors.reset}`);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
console.log(`\n${colors.green}${colors.bold}✓ Sync complete!${colors.reset}\n`);
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger command - triggers a remote run on Glubean Cloud.
|
|
3
|
+
*/
|
|
4
|
+
export interface TriggerOptions {
|
|
5
|
+
project?: string;
|
|
6
|
+
bundle?: string;
|
|
7
|
+
job?: string;
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
token?: string;
|
|
10
|
+
follow?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function triggerCommand(options?: TriggerOptions): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/commands/trigger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA8LD,wBAAsB,cAAc,CAClC,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkHf"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger command - triggers a remote run on Glubean Cloud.
|
|
3
|
+
*/
|
|
4
|
+
import { resolveApiUrl, resolveProjectId, resolveToken } from "../lib/auth.js";
|
|
5
|
+
import { loadConfig } from "../lib/config.js";
|
|
6
|
+
import { loadProjectEnv } from "../lib/env.js";
|
|
7
|
+
const colors = {
|
|
8
|
+
reset: "\x1b[0m",
|
|
9
|
+
bold: "\x1b[1m",
|
|
10
|
+
dim: "\x1b[2m",
|
|
11
|
+
green: "\x1b[32m",
|
|
12
|
+
yellow: "\x1b[33m",
|
|
13
|
+
blue: "\x1b[34m",
|
|
14
|
+
red: "\x1b[31m",
|
|
15
|
+
cyan: "\x1b[36m",
|
|
16
|
+
};
|
|
17
|
+
async function createRun(projectId, apiUrl, token, bundleId, jobId) {
|
|
18
|
+
const headers = {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
};
|
|
21
|
+
if (token)
|
|
22
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
23
|
+
const body = { projectId };
|
|
24
|
+
if (bundleId)
|
|
25
|
+
body.bundleId = bundleId;
|
|
26
|
+
if (jobId)
|
|
27
|
+
body.jobId = jobId;
|
|
28
|
+
const response = await fetch(`${apiUrl}/data-plane/runs`, {
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers,
|
|
31
|
+
body: JSON.stringify(body),
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
const error = await response.text();
|
|
35
|
+
throw new Error(`Failed to create run: ${response.status} - ${error}`);
|
|
36
|
+
}
|
|
37
|
+
return response.json();
|
|
38
|
+
}
|
|
39
|
+
async function getRunStatus(runId, apiUrl, token) {
|
|
40
|
+
const headers = {};
|
|
41
|
+
if (token)
|
|
42
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
43
|
+
const response = await fetch(`${apiUrl}/data-plane/runs/${runId}`, {
|
|
44
|
+
method: "GET",
|
|
45
|
+
headers,
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const error = await response.text();
|
|
49
|
+
throw new Error(`Failed to get run status: ${response.status} - ${error}`);
|
|
50
|
+
}
|
|
51
|
+
return response.json();
|
|
52
|
+
}
|
|
53
|
+
async function getRunEvents(runId, apiUrl, token, afterSeq) {
|
|
54
|
+
const headers = {};
|
|
55
|
+
if (token)
|
|
56
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
57
|
+
const params = new URLSearchParams();
|
|
58
|
+
if (afterSeq !== undefined)
|
|
59
|
+
params.set("afterSeq", String(afterSeq));
|
|
60
|
+
params.set("limit", "100");
|
|
61
|
+
const url = `${apiUrl}/data-plane/runs/${runId}/events?${params.toString()}`;
|
|
62
|
+
const response = await fetch(url, { method: "GET", headers });
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
const error = await response.text();
|
|
65
|
+
throw new Error(`Failed to get run events: ${response.status} - ${error}`);
|
|
66
|
+
}
|
|
67
|
+
return response.json();
|
|
68
|
+
}
|
|
69
|
+
function formatEvent(event) {
|
|
70
|
+
switch (event.type) {
|
|
71
|
+
case "log":
|
|
72
|
+
return `${colors.dim}${event.message}${colors.reset}`;
|
|
73
|
+
case "assertion": {
|
|
74
|
+
const icon = event.passed ? `${colors.green}✓${colors.reset}` : `${colors.red}✗${colors.reset}`;
|
|
75
|
+
let line = `${icon} ${event.message}`;
|
|
76
|
+
if (!event.passed &&
|
|
77
|
+
(event.expected !== undefined || event.actual !== undefined)) {
|
|
78
|
+
if (event.expected !== undefined) {
|
|
79
|
+
line += `\n ${colors.dim}Expected: ${JSON.stringify(event.expected)}${colors.reset}`;
|
|
80
|
+
}
|
|
81
|
+
if (event.actual !== undefined) {
|
|
82
|
+
line += `\n ${colors.dim}Actual: ${JSON.stringify(event.actual)}${colors.reset}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return line;
|
|
86
|
+
}
|
|
87
|
+
case "trace": {
|
|
88
|
+
const data = event.data;
|
|
89
|
+
if (data) {
|
|
90
|
+
return `${colors.cyan}→ ${data.method} ${data.url} → ${data.status} (${data.duration}ms)${colors.reset}`;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
case "step_start":
|
|
95
|
+
return `${colors.blue}▶ ${event.message || "Step started"}${colors.reset}`;
|
|
96
|
+
case "step_end":
|
|
97
|
+
return `${colors.blue}◼ ${event.message || "Step ended"}${colors.reset}`;
|
|
98
|
+
case "error":
|
|
99
|
+
return `${colors.red}✗ Error: ${event.message}${colors.reset}`;
|
|
100
|
+
default:
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function tailEvents(runId, apiUrl, token) {
|
|
105
|
+
let cursor = undefined;
|
|
106
|
+
const terminalStatuses = ["passed", "failed", "cancelled", "exhausted"];
|
|
107
|
+
while (true) {
|
|
108
|
+
try {
|
|
109
|
+
const { events, nextCursor } = await getRunEvents(runId, apiUrl, token, cursor);
|
|
110
|
+
for (const event of events) {
|
|
111
|
+
const formatted = formatEvent(event);
|
|
112
|
+
if (formatted) {
|
|
113
|
+
console.log(` ${formatted}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (nextCursor !== undefined) {
|
|
117
|
+
cursor = nextCursor;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
console.log(`${colors.dim} (polling...)${colors.reset}`);
|
|
122
|
+
}
|
|
123
|
+
const status = await getRunStatus(runId, apiUrl, token);
|
|
124
|
+
if (terminalStatuses.includes(status.status)) {
|
|
125
|
+
return status;
|
|
126
|
+
}
|
|
127
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export async function triggerCommand(options = {}) {
|
|
131
|
+
console.log(`\n${colors.bold}${colors.blue}🚀 Glubean Trigger${colors.reset}\n`);
|
|
132
|
+
const rootDir = process.cwd();
|
|
133
|
+
const config = await loadConfig(rootDir);
|
|
134
|
+
const envFileVars = await loadProjectEnv(rootDir, config.run.envFile);
|
|
135
|
+
const sources = { envFileVars, cloudConfig: config.cloud };
|
|
136
|
+
const authOpts = {
|
|
137
|
+
token: options.token,
|
|
138
|
+
project: options.project,
|
|
139
|
+
apiUrl: options.apiUrl,
|
|
140
|
+
};
|
|
141
|
+
const projectId = await resolveProjectId(authOpts, sources);
|
|
142
|
+
if (!projectId) {
|
|
143
|
+
console.log(`${colors.red}✗ Error: No project ID found.${colors.reset}`);
|
|
144
|
+
console.log(`${colors.dim} Use --project, set GLUBEAN_PROJECT_ID, add to .env, or configure in package.json glubean.cloud.${colors.reset}\n`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
const apiUrl = (await resolveApiUrl(authOpts, sources)).replace(/\/$/, "");
|
|
148
|
+
const appUrl = apiUrl.replace("api.", "app.").replace(/\/$/, "");
|
|
149
|
+
const token = await resolveToken(authOpts, sources);
|
|
150
|
+
console.log(`${colors.dim}Project: ${colors.reset}${projectId}`);
|
|
151
|
+
if (options.bundle) {
|
|
152
|
+
console.log(`${colors.dim}Bundle: ${colors.reset}${options.bundle}`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.log(`${colors.dim}Bundle: ${colors.reset}(latest)`);
|
|
156
|
+
}
|
|
157
|
+
if (options.job) {
|
|
158
|
+
console.log(`${colors.dim}Job: ${colors.reset}${options.job}`);
|
|
159
|
+
}
|
|
160
|
+
console.log();
|
|
161
|
+
try {
|
|
162
|
+
console.log(`${colors.cyan}→ Creating run...${colors.reset}`);
|
|
163
|
+
const result = await createRun(projectId, apiUrl, token ?? undefined, options.bundle, options.job);
|
|
164
|
+
console.log(`${colors.green}✓ Run created${colors.reset}`);
|
|
165
|
+
console.log(`${colors.dim} Run ID: ${colors.reset}${result.runId}`);
|
|
166
|
+
console.log(`${colors.dim} Bundle ID: ${colors.reset}${result.bundleId}`);
|
|
167
|
+
console.log();
|
|
168
|
+
const runUrl = `${appUrl}/runs/${result.runId}`;
|
|
169
|
+
console.log(`${colors.bold}View in browser:${colors.reset}`);
|
|
170
|
+
console.log(` ${colors.cyan}${runUrl}${colors.reset}`);
|
|
171
|
+
console.log();
|
|
172
|
+
if (options.follow) {
|
|
173
|
+
console.log(`${colors.bold}Live output:${colors.reset}`);
|
|
174
|
+
console.log(`${colors.dim}─────────────────────────────────────${colors.reset}`);
|
|
175
|
+
const finalStatus = await tailEvents(result.runId, apiUrl, token ?? undefined);
|
|
176
|
+
console.log(`${colors.dim}─────────────────────────────────────${colors.reset}`);
|
|
177
|
+
console.log();
|
|
178
|
+
const statusColor = finalStatus.status === "passed" ? colors.green : colors.red;
|
|
179
|
+
console.log(`${colors.bold}Result:${colors.reset} ${statusColor}${finalStatus.status.toUpperCase()}${colors.reset}`);
|
|
180
|
+
if (finalStatus.summary) {
|
|
181
|
+
const s = finalStatus.summary;
|
|
182
|
+
const parts = [];
|
|
183
|
+
if (s.passed !== undefined) {
|
|
184
|
+
parts.push(`${colors.green}${s.passed} passed${colors.reset}`);
|
|
185
|
+
}
|
|
186
|
+
if (s.failed !== undefined) {
|
|
187
|
+
parts.push(`${colors.red}${s.failed} failed${colors.reset}`);
|
|
188
|
+
}
|
|
189
|
+
if (s.skipped !== undefined) {
|
|
190
|
+
parts.push(`${colors.yellow}${s.skipped} skipped${colors.reset}`);
|
|
191
|
+
}
|
|
192
|
+
if (parts.length > 0) {
|
|
193
|
+
console.log(`${colors.bold}Tests:${colors.reset} ${parts.join(", ")}`);
|
|
194
|
+
}
|
|
195
|
+
if (s.durationMs !== undefined) {
|
|
196
|
+
console.log(`${colors.bold}Time:${colors.reset} ${s.durationMs}ms`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
console.log();
|
|
200
|
+
if (finalStatus.status !== "passed") {
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
console.log(`${colors.dim}Tip: Use --follow to tail logs in real-time${colors.reset}\n`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
console.log(`${colors.red}✗ ${error instanceof Error ? error.message : error}${colors.reset}`);
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=trigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/commands/trigger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker command — self-hosted worker management.
|
|
3
|
+
* Stub: full implementation deferred to future work.
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkerOptions {
|
|
6
|
+
instances?: number | "auto";
|
|
7
|
+
config?: string;
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
token?: string;
|
|
10
|
+
logLevel?: string;
|
|
11
|
+
workerId?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function workerCommand(subcommand: string, _options?: WorkerOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,aAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker command — self-hosted worker management.
|
|
3
|
+
* Stub: full implementation deferred to future work.
|
|
4
|
+
*/
|
|
5
|
+
export async function workerCommand(subcommand, _options = {}) {
|
|
6
|
+
console.error(`Worker command "${subcommand}" is not yet implemented in the Node.js CLI.\n` +
|
|
7
|
+
"Self-hosted worker support is coming in a future release.");
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/commands/worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,WAA0B,EAAE;IAE5B,OAAO,CAAC,KAAK,CACX,mBAAmB,UAAU,gDAAgD;QAC3E,2DAA2D,CAC9D,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active environment state file.
|
|
3
|
+
*
|
|
4
|
+
* Reads/writes `.glubean/active-env` in the project root.
|
|
5
|
+
* Used by both the CLI `run` command and the MCP server to resolve
|
|
6
|
+
* which `.env.<name>` file to load when no explicit `--env-file` is given.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Read the active environment name from `.glubean/active-env`.
|
|
10
|
+
* Returns `undefined` if the file doesn't exist or is empty.
|
|
11
|
+
*/
|
|
12
|
+
export declare function readActiveEnv(projectRoot: string): Promise<string | undefined>;
|
|
13
|
+
/**
|
|
14
|
+
* Write the active environment name to `.glubean/active-env`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function writeActiveEnv(projectRoot: string, envName: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Remove the active environment file (reset to default `.env`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function clearActiveEnv(projectRoot: string): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the env file name to use.
|
|
23
|
+
*
|
|
24
|
+
* Priority:
|
|
25
|
+
* 1. Explicit `--env-file` flag (pass-through, not handled here)
|
|
26
|
+
* 2. `.glubean/active-env` → `.env.<name>`
|
|
27
|
+
* 3. Default `.env`
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveEnvFileName(projectRoot: string): Promise<string>;
|
|
30
|
+
//# sourceMappingURL=active_env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"active_env.d.ts","sourceRoot":"","sources":["../../src/lib/active_env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH;;;GAGG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Active environment state file.
|
|
3
|
+
*
|
|
4
|
+
* Reads/writes `.glubean/active-env` in the project root.
|
|
5
|
+
* Used by both the CLI `run` command and the MCP server to resolve
|
|
6
|
+
* which `.env.<name>` file to load when no explicit `--env-file` is given.
|
|
7
|
+
*/
|
|
8
|
+
import { resolve } from "node:path";
|
|
9
|
+
import { readFile, writeFile, mkdir, unlink } from "node:fs/promises";
|
|
10
|
+
const ACTIVE_ENV_DIR = ".glubean";
|
|
11
|
+
const ACTIVE_ENV_FILE = "active-env";
|
|
12
|
+
function activeEnvPath(projectRoot) {
|
|
13
|
+
return resolve(projectRoot, ACTIVE_ENV_DIR, ACTIVE_ENV_FILE);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Read the active environment name from `.glubean/active-env`.
|
|
17
|
+
* Returns `undefined` if the file doesn't exist or is empty.
|
|
18
|
+
*/
|
|
19
|
+
export async function readActiveEnv(projectRoot) {
|
|
20
|
+
try {
|
|
21
|
+
const content = await readFile(activeEnvPath(projectRoot), "utf-8");
|
|
22
|
+
const env = content.trim();
|
|
23
|
+
return env || undefined;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Write the active environment name to `.glubean/active-env`.
|
|
31
|
+
*/
|
|
32
|
+
export async function writeActiveEnv(projectRoot, envName) {
|
|
33
|
+
const dir = resolve(projectRoot, ACTIVE_ENV_DIR);
|
|
34
|
+
await mkdir(dir, { recursive: true });
|
|
35
|
+
await writeFile(activeEnvPath(projectRoot), envName + "\n", "utf-8");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Remove the active environment file (reset to default `.env`).
|
|
39
|
+
*/
|
|
40
|
+
export async function clearActiveEnv(projectRoot) {
|
|
41
|
+
try {
|
|
42
|
+
await unlink(activeEnvPath(projectRoot));
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Already gone — that's fine
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the env file name to use.
|
|
50
|
+
*
|
|
51
|
+
* Priority:
|
|
52
|
+
* 1. Explicit `--env-file` flag (pass-through, not handled here)
|
|
53
|
+
* 2. `.glubean/active-env` → `.env.<name>`
|
|
54
|
+
* 3. Default `.env`
|
|
55
|
+
*/
|
|
56
|
+
export async function resolveEnvFileName(projectRoot) {
|
|
57
|
+
const activeEnv = await readActiveEnv(projectRoot);
|
|
58
|
+
if (activeEnv) {
|
|
59
|
+
return `.env.${activeEnv}`;
|
|
60
|
+
}
|
|
61
|
+
return ".env";
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=active_env.js.map
|