@codemarc/blt 1.4.6 → 1.4.7

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 CHANGED
@@ -1,6 +1,8 @@
1
1
  # @codemarc/blt
2
2
 
3
3
  > BLT CLI — Command-line tools for image processing, PDF manipulation, storage, schema/data build and deploy, and version management.
4
+ >
5
+ > Part of the [bltcore-com/tools](https://github.com/bltcore-com/tools) repository (BLT Core tools monorepo).
4
6
 
5
7
  ## Features
6
8
 
@@ -10,6 +12,7 @@
10
12
  - **Build**: Build schema from DDL files, build data from instance directory
11
13
  - **Deploy**: Deploy schema/data from SQL files, run a single SQL file
12
14
  - **Bucket**: Supabase storage — list buckets, list/upload/download files, get URLs
15
+ - **Workflow**: List, show, delete, reload, and deploy GitHub Actions workflows (requires `gh`)
13
16
  - **Show**: Schema info, row counts, env vars, DB version, repo list
14
17
  - **Cleanup**: Remove generated SQL/instance files, clean infrequently used YAML tags
15
18
 
@@ -56,6 +59,7 @@ blt deploy schema
56
59
  | `blt version` | Update, string, sql |
57
60
  | `blt build` | Schema (DDL), data (instance) |
58
61
  | `blt deploy` | Schema, data, sql file |
62
+ | `blt workflow`| list, show, delete, reload, deploy |
59
63
  | `blt bucket` | names, list, upload, download, url, clear |
60
64
  | `blt show` | schema, counts, env, db, repo |
61
65
  | `blt cleanup` | generated, tags |
@@ -315,6 +319,87 @@ blt deploy sql ./migrations/001_init.sql
315
319
 
316
320
  ---
317
321
 
322
+ ## Workflow Commands (GitHub Actions)
323
+
324
+ Manage deploy GitHub Actions workflows in the `bltcore-com/deploy` repository. **Requires:** [GitHub CLI (`gh`)](https://cli.github.com/) installed and authenticated.
325
+
326
+ **Environments:** `bae`, `joanne`, `demo`, `test`
327
+
328
+ ### `blt workflow list [env]`
329
+
330
+ List recent workflow runs. Omit `env` to list available environments.
331
+
332
+ ```bash
333
+ blt workflow list # List environments
334
+ blt workflow list bae # List runs for bae
335
+ blt workflow list bae --limit 10 --status completed
336
+ ```
337
+
338
+ **Options:**
339
+
340
+ - `--limit <n>` — Maximum runs to show (default: 20)
341
+ - `--status <status>` — Filter: `queued`, `completed`, `in_progress`, `success`, `failure`
342
+ - `--json` — Output as JSON
343
+
344
+ ### `blt workflow show <env>`
345
+
346
+ Show the latest run and the `gh run view` command plus URL for opening in the browser.
347
+
348
+ ```bash
349
+ blt workflow show bae
350
+ blt workflow show bae --type reload # Last reload run only
351
+ blt workflow show bae --type deploy # Last deploy run only
352
+ blt workflow show bae --web # Open in browser
353
+ ```
354
+
355
+ **Options:**
356
+
357
+ - `--type <reload|deploy>` — Show last reload or last deploy run (default: most recent of either)
358
+ - `--web` — Open the run in the browser
359
+
360
+ ### `blt workflow delete <env>`
361
+
362
+ Delete old workflow runs, keeping the latest N per workflow.
363
+
364
+ ```bash
365
+ blt workflow delete bae # Keep 5 runs per workflow (default)
366
+ blt workflow delete joanne --keep 10
367
+ ```
368
+
369
+ **Options:**
370
+
371
+ - `--keep <n>` — Runs to keep per workflow (default: 5)
372
+
373
+ ### `blt workflow reload <env>`
374
+
375
+ Load starter data to environment (deploy-initial-data-to-* workflow).
376
+
377
+ ```bash
378
+ blt workflow reload bae
379
+ blt workflow reload bae --ref main --wait
380
+ ```
381
+
382
+ **Options:**
383
+
384
+ - `--ref <branch>` — Git ref to run against (default: main)
385
+ - `--wait` — Block until workflow completes
386
+
387
+ ### `blt workflow deploy <env>`
388
+
389
+ Deploy subdomain for environment (*.bltpos.com / *.bltcore.com).
390
+
391
+ ```bash
392
+ blt workflow deploy bae
393
+ blt workflow deploy joanne --ref main --wait
394
+ ```
395
+
396
+ **Options:**
397
+
398
+ - `--ref <branch>` — Git ref to run against (default: main)
399
+ - `--wait` — Block until workflow completes
400
+
401
+ ---
402
+
318
403
  ## Bucket Commands (Supabase Storage)
319
404
 
320
405
  ### `blt bucket names`
@@ -524,13 +609,13 @@ Ensure `pdf-lib` is installed: `bun install` (or `npm install`). The CLI uses `p
524
609
 
525
610
  ## Development
526
611
 
527
- Built with TypeScript and Bun.
612
+ Built with TypeScript and Bun. BLT CLI lives in the `cli/` directory of the tools repository.
528
613
 
529
614
  ### Build from source
530
615
 
531
616
  ```bash
532
- git clone https://github.com/codemarc/blt-cli.git
533
- cd blt-cli
617
+ git clone https://github.com/bltcore-com/tools.git
618
+ cd tools/cli
534
619
  bun install
535
620
  bun run build
536
621
  bun link
@@ -563,8 +648,8 @@ Marc J. Greenberg <marc@bltwai.com>
563
648
 
564
649
  ## Repository
565
650
 
566
- https://github.com/codemarc/blt-cli
651
+ https://github.com/bltcore-com/tools (CLI is in `cli/`)
567
652
 
568
653
  ## Support
569
654
 
570
- https://github.com/codemarc/blt-cli/issues
655
+ https://github.com/bltcore-com/tools/issues
package/dist/blt CHANGED
@@ -9,6 +9,7 @@ import pdfCommand from "./commands/pdf";
9
9
  import versionCommand from "./commands/version";
10
10
  import showCommand from "./commands/show";
11
11
  import cleanupCommand from "./commands/cleanup";
12
+ import workflowCommand from "./commands/workflow";
12
13
  import { join, dirname } from "node:path";
13
14
  import { readFileSync } from "node:fs";
14
15
  import { fileURLToPath } from "node:url";
@@ -31,6 +32,7 @@ deployCommand(program);
31
32
  bucketCommand(program);
32
33
  showCommand(program);
33
34
  cleanupCommand(program);
35
+ workflowCommand(program);
34
36
  // If no command is provided, show help
35
37
  const args = process.argv.slice(2);
36
38
  if (args.length === 0) {
package/dist/blt.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAoBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
1
+ {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAqBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
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,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"}
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;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAElD,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;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AAE3B,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,7 @@
1
+ import type { Logger } from "@caporal/core";
2
+ /**
3
+ * Fetch and display pos/data version strings for an environment (same format as login footer).
4
+ * Calls the info API at BLT_INFO_API_URL.
5
+ */
6
+ export declare function showInfo(name: string, logger: Logger): Promise<void>;
7
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/commands/show/info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAU5C;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C1E"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Fetch and display pos/data version strings for an environment (same format as login footer).
3
+ * Calls the info API at BLT_INFO_API_URL.
4
+ */
5
+ export async function showInfo(name, logger) {
6
+ const apiBase = process.env.BLT_INFO_API_URL?.trim();
7
+ if (!apiBase) {
8
+ logger.error("BLT_INFO_API_URL is not set.");
9
+ console.log("Set the info API base URL, e.g.:");
10
+ console.log(' export BLT_INFO_API_URL="https://<project-ref>.supabase.co/functions/v1/info"');
11
+ process.exit(1);
12
+ }
13
+ const base = apiBase.replace(/\/$/, "");
14
+ const url = `${base}?name=${encodeURIComponent(name)}`;
15
+ try {
16
+ const res = await fetch(url);
17
+ if (!res.ok) {
18
+ const body = (await res.json().catch(() => ({})));
19
+ if (body.error) {
20
+ logger.error(body.error);
21
+ if (body.valid?.length) {
22
+ console.log(`Valid environments: ${body.valid.join(", ")}`);
23
+ }
24
+ }
25
+ else {
26
+ logger.error(`API returned ${res.status}: ${res.statusText}`);
27
+ }
28
+ process.exit(1);
29
+ }
30
+ const body = (await res.json());
31
+ if (body.lines?.length) {
32
+ for (const line of body.lines) {
33
+ console.log(line);
34
+ }
35
+ }
36
+ else if (body.pos || body.data) {
37
+ if (body.pos)
38
+ console.log(body.pos);
39
+ if (body.data)
40
+ console.log(body.data);
41
+ }
42
+ else {
43
+ logger.warn("No version data returned.");
44
+ }
45
+ }
46
+ catch (error) {
47
+ const message = error instanceof Error ? error.message : String(error);
48
+ logger.error(`Failed to fetch info: ${message}`);
49
+ process.exit(1);
50
+ }
51
+ }
52
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/commands/show/info.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc;IACzD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,IAAI,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAiB,CAAC;YAClE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiB,CAAC;QAEhD,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Program } from "@caporal/core";
2
+ /**
3
+ * Register workflow commands with the CLI program
4
+ */
5
+ export default function workflowCommand(program: Program): void;
6
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,eAAe,CAAC;AAmD5E;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,OAAO,EAAE,OAAO,QAgWvD"}
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemarc/blt",
3
- "version": "1.4.6",
3
+ "version": "1.4.7",
4
4
  "description": "blt cli",
5
5
  "type": "module",
6
6
  "main": "dist/blt",