@codemarc/blt 1.4.6 → 1.4.8
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 +182 -5
- package/dist/blt +4 -0
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- package/dist/commands/init/config-templates.d.ts +18 -0
- package/dist/commands/init/config-templates.d.ts.map +1 -0
- package/dist/commands/init/config-templates.js +74 -0
- package/dist/commands/init/config-templates.js.map +1 -0
- package/dist/commands/init/config.d.ts +9 -0
- package/dist/commands/init/config.d.ts.map +1 -0
- package/dist/commands/init/config.js +92 -0
- package/dist/commands/init/config.js.map +1 -0
- package/dist/commands/pdf.js +1 -1
- package/dist/commands/show/info.d.ts +7 -0
- package/dist/commands/show/info.d.ts.map +1 -0
- package/dist/commands/show/info.js +52 -0
- package/dist/commands/show/info.js.map +1 -0
- package/dist/commands/wai/config-templates.d.ts +18 -0
- package/dist/commands/wai/config-templates.d.ts.map +1 -0
- package/dist/commands/wai/config-templates.js +136 -0
- package/dist/commands/wai/config-templates.js.map +1 -0
- package/dist/commands/wai/config.d.ts +9 -0
- package/dist/commands/wai/config.d.ts.map +1 -0
- package/dist/commands/wai/config.js +144 -0
- package/dist/commands/wai/config.js.map +1 -0
- package/dist/commands/wai.d.ts +7 -0
- package/dist/commands/wai.d.ts.map +1 -0
- package/dist/commands/wai.js +208 -0
- package/dist/commands/wai.js.map +1 -0
- package/dist/commands/workflow.d.ts +6 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +291 -0
- package/dist/commands/workflow.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
const DEPLOY_REPO = "bltcore-com/deploy";
|
|
3
|
+
const RELOAD_WORKFLOWS = {
|
|
4
|
+
bae: "deploy-initial-data-to-bae.yml",
|
|
5
|
+
joanne: "deploy-initial-data-to-joanne.yml",
|
|
6
|
+
demo: "deploy-initial-data-to-demo.yml",
|
|
7
|
+
test: "deploy-initial-data-to-test.yml",
|
|
8
|
+
};
|
|
9
|
+
const DEPLOY_SUBDOMAIN_WORKFLOWS = {
|
|
10
|
+
bae: "deploy-bltpos-bae-instance.yml",
|
|
11
|
+
joanne: "deploy-bltpos-joanne-instance.yml",
|
|
12
|
+
demo: "deploy-bltcore-demo-instance.yml",
|
|
13
|
+
test: "deploy-bltcore-test-instance.yml",
|
|
14
|
+
};
|
|
15
|
+
const VALID_ENVS = ["bae", "joanne", "demo", "test"];
|
|
16
|
+
function ensureGhInstalled(logger) {
|
|
17
|
+
const result = spawnSync("gh", ["--version"], { encoding: "utf8" });
|
|
18
|
+
if (result.status !== 0) {
|
|
19
|
+
logger.error("GitHub CLI (gh) is required. Install: https://cli.github.com/");
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function runWorkflow(workflowFile, options) {
|
|
24
|
+
const args = ["workflow", "run", workflowFile, "--repo", DEPLOY_REPO];
|
|
25
|
+
if (options.ref) {
|
|
26
|
+
args.push("--ref", options.ref);
|
|
27
|
+
}
|
|
28
|
+
if (options.wait) {
|
|
29
|
+
args.push("--wait");
|
|
30
|
+
}
|
|
31
|
+
const result = spawnSync("gh", args, {
|
|
32
|
+
stdio: "inherit",
|
|
33
|
+
encoding: "utf8",
|
|
34
|
+
});
|
|
35
|
+
if (result.status !== 0) {
|
|
36
|
+
process.exit(result.status ?? 1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Register workflow commands with the CLI program
|
|
41
|
+
*/
|
|
42
|
+
export default function workflowCommand(program) {
|
|
43
|
+
const workflowHelpText = `
|
|
44
|
+
trigger deploy github actions
|
|
45
|
+
|
|
46
|
+
Usage:
|
|
47
|
+
blt workflow <operation> [env]
|
|
48
|
+
|
|
49
|
+
Available operations:
|
|
50
|
+
list List recent workflow runs (omit env to list available environments)
|
|
51
|
+
show Show the latest run and gh command to open its URL
|
|
52
|
+
delete Delete old workflow runs, keeping the latest N per workflow
|
|
53
|
+
reload Load starter data to environment (deploy-initial-data-to-*)
|
|
54
|
+
deploy Deploy subdomain for environment (*.bltpos.com / *.bltcore.com)
|
|
55
|
+
|
|
56
|
+
Environments: bae, joanne, demo, test
|
|
57
|
+
|
|
58
|
+
Run 'blt workflow <operation> <env> --help' for options.
|
|
59
|
+
`;
|
|
60
|
+
program
|
|
61
|
+
.command("workflow list", "List recent workflow runs")
|
|
62
|
+
.hide()
|
|
63
|
+
.argument("[env]", "Environment name (bae, joanne, demo, test). Omit to list available environments.")
|
|
64
|
+
.option("--limit <n>", "Maximum number of runs to show", {
|
|
65
|
+
default: 20,
|
|
66
|
+
validator: (v) => Number(v),
|
|
67
|
+
})
|
|
68
|
+
.option("--status <status>", "Filter by status (queued|completed|in_progress|success|failure)", {})
|
|
69
|
+
.option("--json", "Output as JSON", { default: false })
|
|
70
|
+
.action(async ({ args, options, logger, }) => {
|
|
71
|
+
const env = args.env?.toLowerCase();
|
|
72
|
+
if (!env || !VALID_ENVS.includes(env)) {
|
|
73
|
+
console.log("Available environments:");
|
|
74
|
+
for (const e of VALID_ENVS) {
|
|
75
|
+
console.log(` ${e}`);
|
|
76
|
+
}
|
|
77
|
+
console.log("\nUsage: blt workflow list <env> [OPTIONS...]");
|
|
78
|
+
if (env && !VALID_ENVS.includes(env)) {
|
|
79
|
+
logger.error(`Unknown environment '${args.env}'.`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
ensureGhInstalled(logger);
|
|
85
|
+
const limit = options.limit;
|
|
86
|
+
const status = options.status;
|
|
87
|
+
const asJson = options.json;
|
|
88
|
+
const repoArgs = ["--repo", DEPLOY_REPO];
|
|
89
|
+
const limitArgs = ["--limit", String(limit)];
|
|
90
|
+
function runList(workflowFile) {
|
|
91
|
+
const listArgs = ["run", "list", ...repoArgs, ...limitArgs, "--workflow", workflowFile];
|
|
92
|
+
if (status)
|
|
93
|
+
listArgs.push("--status", status);
|
|
94
|
+
if (asJson)
|
|
95
|
+
listArgs.push("--json", "databaseId,workflowName,displayTitle,status,conclusion,createdAt,url,headBranch");
|
|
96
|
+
return spawnSync("gh", listArgs, { encoding: "utf8" });
|
|
97
|
+
}
|
|
98
|
+
const reloadFile = RELOAD_WORKFLOWS[env];
|
|
99
|
+
const deployFile = DEPLOY_SUBDOMAIN_WORKFLOWS[env];
|
|
100
|
+
const r1 = runList(reloadFile);
|
|
101
|
+
const r2 = runList(deployFile);
|
|
102
|
+
if (r1.status !== 0)
|
|
103
|
+
process.exit(r1.status ?? 1);
|
|
104
|
+
if (r2.status !== 0)
|
|
105
|
+
process.exit(r2.status ?? 1);
|
|
106
|
+
if (asJson) {
|
|
107
|
+
const a = JSON.parse(String(r1.stdout || "[]"));
|
|
108
|
+
const b = JSON.parse(String(r2.stdout || "[]"));
|
|
109
|
+
const merged = [...a, ...b].sort((x, y) => new Date(y.createdAt).getTime() - new Date(x.createdAt).getTime());
|
|
110
|
+
console.log(JSON.stringify(merged.slice(0, limit), null, 2));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.log(`\n=== ${reloadFile} ===\n`);
|
|
114
|
+
process.stdout.write(r1.stdout || "");
|
|
115
|
+
console.log(`\n=== ${deployFile} ===\n`);
|
|
116
|
+
process.stdout.write(r2.stdout || "");
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
program
|
|
120
|
+
.command("workflow show", "Show the latest run and gh command to open its URL")
|
|
121
|
+
.hide()
|
|
122
|
+
.argument("<env>", "Environment name (bae, joanne, demo, test)")
|
|
123
|
+
.option("--type <reload|deploy>", "Show last reload run or last deploy run (default: most recent of either)", {
|
|
124
|
+
validator: ["reload", "deploy"],
|
|
125
|
+
})
|
|
126
|
+
.option("--web", "Open the run in the browser", { default: false })
|
|
127
|
+
.action(async ({ args, options, logger, }) => {
|
|
128
|
+
const env = args.env?.toLowerCase();
|
|
129
|
+
if (!VALID_ENVS.includes(env)) {
|
|
130
|
+
logger.error(`Unknown environment '${args.env}'. Valid: ${VALID_ENVS.join(", ")}`);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
ensureGhInstalled(logger);
|
|
134
|
+
const repoArgs = ["--repo", DEPLOY_REPO];
|
|
135
|
+
const typeFilter = options.type;
|
|
136
|
+
const reloadFile = RELOAD_WORKFLOWS[env];
|
|
137
|
+
const deployFile = DEPLOY_SUBDOMAIN_WORKFLOWS[env];
|
|
138
|
+
function getLatestRun(workflowFile) {
|
|
139
|
+
const listArgs = [
|
|
140
|
+
"run",
|
|
141
|
+
"list",
|
|
142
|
+
...repoArgs,
|
|
143
|
+
"--limit",
|
|
144
|
+
"1",
|
|
145
|
+
"--workflow",
|
|
146
|
+
workflowFile,
|
|
147
|
+
"--json",
|
|
148
|
+
"databaseId,url,displayTitle,createdAt",
|
|
149
|
+
];
|
|
150
|
+
const result = spawnSync("gh", listArgs, { encoding: "utf8" });
|
|
151
|
+
if (result.status !== 0)
|
|
152
|
+
return null;
|
|
153
|
+
const runs = JSON.parse(String(result.stdout || "[]"));
|
|
154
|
+
return runs[0] ?? null;
|
|
155
|
+
}
|
|
156
|
+
let latest;
|
|
157
|
+
if (typeFilter === "reload") {
|
|
158
|
+
latest = getLatestRun(reloadFile);
|
|
159
|
+
}
|
|
160
|
+
else if (typeFilter === "deploy") {
|
|
161
|
+
latest = getLatestRun(deployFile);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const reloadRun = getLatestRun(reloadFile);
|
|
165
|
+
const deployRun = getLatestRun(deployFile);
|
|
166
|
+
const runs = [reloadRun, deployRun].filter(Boolean);
|
|
167
|
+
latest = runs.length > 0
|
|
168
|
+
? runs.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0]
|
|
169
|
+
: null;
|
|
170
|
+
}
|
|
171
|
+
if (!latest) {
|
|
172
|
+
const typeDesc = typeFilter ? ` (${typeFilter})` : "";
|
|
173
|
+
logger.error(`No workflow runs found for ${env}${typeDesc}`);
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
const viewCmd = `gh run view ${latest.databaseId} -R ${DEPLOY_REPO}`;
|
|
177
|
+
console.log(latest.displayTitle);
|
|
178
|
+
console.log(`\n${viewCmd}\n`);
|
|
179
|
+
console.log(latest.url);
|
|
180
|
+
if (options.web) {
|
|
181
|
+
spawnSync("gh", ["run", "view", String(latest.databaseId), ...repoArgs, "--web"], {
|
|
182
|
+
stdio: "inherit",
|
|
183
|
+
encoding: "utf8",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
program
|
|
188
|
+
.command("workflow delete", "Delete old workflow runs, keeping the latest N")
|
|
189
|
+
.hide()
|
|
190
|
+
.argument("<env>", "Environment name (bae, joanne, demo, test)")
|
|
191
|
+
.option("--keep <n>", "Number of runs to keep per workflow", {
|
|
192
|
+
default: 5,
|
|
193
|
+
validator: (v) => {
|
|
194
|
+
const n = Number(v);
|
|
195
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
196
|
+
throw new Error("--keep must be a positive integer");
|
|
197
|
+
}
|
|
198
|
+
return n;
|
|
199
|
+
},
|
|
200
|
+
})
|
|
201
|
+
.action(async ({ args, options, logger, }) => {
|
|
202
|
+
const env = args.env?.toLowerCase();
|
|
203
|
+
if (!VALID_ENVS.includes(env)) {
|
|
204
|
+
logger.error(`Unknown environment '${args.env}'. Valid: ${VALID_ENVS.join(", ")}`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
ensureGhInstalled(logger);
|
|
208
|
+
const keep = options.keep;
|
|
209
|
+
const repoArgs = ["--repo", DEPLOY_REPO];
|
|
210
|
+
function deleteOldRuns(workflowFile) {
|
|
211
|
+
const listArgs = [
|
|
212
|
+
"run",
|
|
213
|
+
"list",
|
|
214
|
+
...repoArgs,
|
|
215
|
+
"--limit",
|
|
216
|
+
"100",
|
|
217
|
+
"--workflow",
|
|
218
|
+
workflowFile,
|
|
219
|
+
"--json",
|
|
220
|
+
"databaseId,createdAt",
|
|
221
|
+
];
|
|
222
|
+
const result = spawnSync("gh", listArgs, { encoding: "utf8" });
|
|
223
|
+
if (result.status !== 0) {
|
|
224
|
+
logger.error(`Failed to list runs for ${workflowFile}`);
|
|
225
|
+
process.exit(result.status ?? 1);
|
|
226
|
+
}
|
|
227
|
+
const runs = JSON.parse(String(result.stdout || "[]"));
|
|
228
|
+
const sorted = runs.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
229
|
+
const toDelete = sorted.slice(keep);
|
|
230
|
+
for (const run of toDelete) {
|
|
231
|
+
const deleteResult = spawnSync("gh", ["run", "delete", String(run.databaseId), ...repoArgs], { encoding: "utf8" });
|
|
232
|
+
if (deleteResult.status !== 0) {
|
|
233
|
+
logger.error(`Failed to delete run ${run.databaseId}`);
|
|
234
|
+
process.exit(deleteResult.status ?? 1);
|
|
235
|
+
}
|
|
236
|
+
logger.info(`Deleted run ${run.databaseId} (${workflowFile})`);
|
|
237
|
+
}
|
|
238
|
+
return toDelete.length;
|
|
239
|
+
}
|
|
240
|
+
const reloadFile = RELOAD_WORKFLOWS[env];
|
|
241
|
+
const deployFile = DEPLOY_SUBDOMAIN_WORKFLOWS[env];
|
|
242
|
+
const reloadDeleted = deleteOldRuns(reloadFile);
|
|
243
|
+
const deployDeleted = deleteOldRuns(deployFile);
|
|
244
|
+
logger.info(`Deleted ${reloadDeleted + deployDeleted} old runs (kept latest ${keep} per workflow)`);
|
|
245
|
+
});
|
|
246
|
+
program
|
|
247
|
+
.command("workflow reload", "Load starter data to environment")
|
|
248
|
+
.hide()
|
|
249
|
+
.argument("<env>", "Environment name (bae, joanne, demo, test)")
|
|
250
|
+
.option("--ref <branch>", "Git ref to run against", { default: "main" })
|
|
251
|
+
.option("--wait", "Block until workflow completes", { default: false })
|
|
252
|
+
.action(async ({ args, options, logger, }) => {
|
|
253
|
+
const env = args.env?.toLowerCase();
|
|
254
|
+
if (!VALID_ENVS.includes(env)) {
|
|
255
|
+
logger.error(`Unknown environment '${args.env}'. Valid: ${VALID_ENVS.join(", ")}`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
ensureGhInstalled(logger);
|
|
259
|
+
const workflowFile = RELOAD_WORKFLOWS[env];
|
|
260
|
+
runWorkflow(workflowFile, {
|
|
261
|
+
ref: options.ref,
|
|
262
|
+
wait: options.wait,
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
program
|
|
266
|
+
.command("workflow deploy", "Deploy subdomain for environment")
|
|
267
|
+
.hide()
|
|
268
|
+
.argument("<env>", "Environment name (bae, joanne, demo, test)")
|
|
269
|
+
.option("--ref <branch>", "Git ref to run against", { default: "main" })
|
|
270
|
+
.option("--wait", "Block until workflow completes", { default: false })
|
|
271
|
+
.action(async ({ args, options, logger, }) => {
|
|
272
|
+
const env = args.env?.toLowerCase();
|
|
273
|
+
if (!VALID_ENVS.includes(env)) {
|
|
274
|
+
logger.error(`Unknown environment '${args.env}'. Valid: ${VALID_ENVS.join(", ")}`);
|
|
275
|
+
process.exit(1);
|
|
276
|
+
}
|
|
277
|
+
ensureGhInstalled(logger);
|
|
278
|
+
const workflowFile = DEPLOY_SUBDOMAIN_WORKFLOWS[env];
|
|
279
|
+
runWorkflow(workflowFile, {
|
|
280
|
+
ref: options.ref,
|
|
281
|
+
wait: options.wait,
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
program
|
|
285
|
+
.command("workflow", "trigger deploy github actions workflow")
|
|
286
|
+
.help(workflowHelpText)
|
|
287
|
+
.action(() => {
|
|
288
|
+
console.log(workflowHelpText);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
|