@codemarc/blt 1.4.5 → 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,7 +59,8 @@ 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 |
59
- | `blt bucket` | names, list, upload, download, url |
62
+ | `blt workflow`| list, show, delete, reload, deploy |
63
+ | `blt bucket` | names, list, upload, download, url, clear |
60
64
  | `blt show` | schema, counts, env, db, repo |
61
65
  | `blt cleanup` | generated, tags |
62
66
 
@@ -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`
@@ -392,6 +477,22 @@ blt bucket url my-bucket docs/file.pdf --signed --expires-in 7200
392
477
  - `--signed` — Generate signed URL (default: false)
393
478
  - `--expires-in <seconds>` — Signed URL expiry (default: 3600).
394
479
 
480
+ ### `blt bucket clear <bucket-name>`
481
+
482
+ Remove all files from a bucket. Requires `--yes` to confirm. Use `--dry-run` to preview.
483
+
484
+ ```bash
485
+ blt bucket clear my-bucket --yes
486
+ blt bucket clear avatars --prefix bae/ --dry-run
487
+ blt bucket clear avatars --prefix bae/ --yes
488
+ ```
489
+
490
+ **Options:**
491
+
492
+ - `-p, --prefix <prefix>` — Only clear files under this path prefix
493
+ - `--dry-run` — Show what would be deleted without deleting
494
+ - `-y, --yes` — Skip confirmation prompt (required to actually delete)
495
+
395
496
  ---
396
497
 
397
498
  ## Show Commands
@@ -508,13 +609,13 @@ Ensure `pdf-lib` is installed: `bun install` (or `npm install`). The CLI uses `p
508
609
 
509
610
  ## Development
510
611
 
511
- Built with TypeScript and Bun.
612
+ Built with TypeScript and Bun. BLT CLI lives in the `cli/` directory of the tools repository.
512
613
 
513
614
  ### Build from source
514
615
 
515
616
  ```bash
516
- git clone https://github.com/codemarc/blt-cli.git
517
- cd blt-cli
617
+ git clone https://github.com/bltcore-com/tools.git
618
+ cd tools/cli
518
619
  bun install
519
620
  bun run build
520
621
  bun link
@@ -547,8 +648,8 @@ Marc J. Greenberg <marc@bltwai.com>
547
648
 
548
649
  ## Repository
549
650
 
550
- https://github.com/codemarc/blt-cli
651
+ https://github.com/bltcore-com/tools (CLI is in `cli/`)
551
652
 
552
653
  ## Support
553
654
 
554
- 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,9 @@
1
+ import type { Logger } from "@caporal/core";
2
+ export declare function clearBucket(args: {
3
+ bucketName: string;
4
+ }, options: {
5
+ prefix: string;
6
+ dryRun: boolean;
7
+ yes: boolean;
8
+ }, logger: Logger): Promise<void>;
9
+ //# sourceMappingURL=clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/commands/bucket/clear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAsD5C,wBAAsB,WAAW,CAChC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,EAC5B,OAAO,EAAE;IACR,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACb,EACD,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAyEf"}
@@ -0,0 +1,105 @@
1
+ import debug from "debug";
2
+ import { getSupabaseClient } from "../../utils/supabase";
3
+ const log = debug("blt:bucket");
4
+ const REMOVE_BATCH_SIZE = 1000;
5
+ async function listAllFilePaths(bucketName, prefix) {
6
+ const supabase = getSupabaseClient();
7
+ const paths = [];
8
+ async function listAtPath(currentPrefix) {
9
+ let offset = 0;
10
+ const limit = 1000;
11
+ while (true) {
12
+ const { data, error } = await supabase.storage
13
+ .from(bucketName)
14
+ .list(currentPrefix, {
15
+ limit,
16
+ offset,
17
+ sortBy: { column: "name", order: "asc" },
18
+ });
19
+ if (error) {
20
+ throw error;
21
+ }
22
+ if (!data?.length)
23
+ break;
24
+ for (const item of data) {
25
+ const itemPath = currentPrefix ? `${currentPrefix}/${item.name}` : item.name;
26
+ // Files have id; folder prefixes have id: null
27
+ if (item.id != null) {
28
+ paths.push(itemPath);
29
+ }
30
+ else {
31
+ await listAtPath(itemPath);
32
+ }
33
+ }
34
+ if (data.length < limit)
35
+ break;
36
+ offset += limit;
37
+ }
38
+ }
39
+ await listAtPath(prefix);
40
+ return paths;
41
+ }
42
+ export async function clearBucket(args, options, logger) {
43
+ try {
44
+ const bucketName = args.bucketName;
45
+ const prefix = options.prefix;
46
+ const dryRun = options.dryRun;
47
+ const yes = options.yes;
48
+ log("Clearing bucket: %s", bucketName);
49
+ const supabase = getSupabaseClient();
50
+ // Verify bucket exists
51
+ const { data: buckets, error: listError } = await supabase.storage.listBuckets();
52
+ if (listError) {
53
+ logger.error("Error listing buckets:", listError.message);
54
+ process.exit(1);
55
+ }
56
+ if (!buckets?.some((b) => b.name === bucketName)) {
57
+ logger.error(`Bucket not found: ${bucketName}`);
58
+ process.exit(1);
59
+ }
60
+ const filePaths = await listAllFilePaths(bucketName, prefix);
61
+ if (filePaths.length === 0) {
62
+ logger.info("No files to clear");
63
+ return;
64
+ }
65
+ const scope = prefix ? `prefix "${prefix}"` : "entire bucket";
66
+ logger.info(`Found ${filePaths.length} file(s) in ${scope}`);
67
+ if (dryRun) {
68
+ logger.info("");
69
+ logger.info("DRY RUN - Files that would be deleted:");
70
+ for (const p of filePaths.slice(0, 20)) {
71
+ logger.info(` ${p}`);
72
+ }
73
+ if (filePaths.length > 20) {
74
+ logger.info(` ... and ${filePaths.length - 20} more`);
75
+ }
76
+ logger.info("");
77
+ return;
78
+ }
79
+ if (!yes) {
80
+ logger.warn(`This will permanently delete ${filePaths.length} file(s).`);
81
+ logger.warn("Run with --yes to confirm.");
82
+ process.exit(1);
83
+ }
84
+ let deletedCount = 0;
85
+ for (let i = 0; i < filePaths.length; i += REMOVE_BATCH_SIZE) {
86
+ const batch = filePaths.slice(i, i + REMOVE_BATCH_SIZE);
87
+ const { error } = await supabase.storage
88
+ .from(bucketName)
89
+ .remove(batch);
90
+ if (error) {
91
+ logger.error(`Error deleting batch: ${error.message}`);
92
+ process.exit(1);
93
+ }
94
+ deletedCount += batch.length;
95
+ logger.info(`Deleted ${deletedCount}/${filePaths.length}...`);
96
+ }
97
+ logger.info("");
98
+ logger.info(`Cleared ${deletedCount} file(s)`);
99
+ }
100
+ catch (error) {
101
+ logger.error("Error:", error.message);
102
+ process.exit(1);
103
+ }
104
+ }
105
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/commands/bucket/clear.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QAmIrD"}
1
+ {"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAS7C;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,OAAO,EAAE,OAAO,QA4JrD"}
@@ -4,6 +4,7 @@ import { uploadFile } from "./bucket/upload";
4
4
  import { uploadFolder } from "./bucket/upload-folder";
5
5
  import { downloadFile } from "./bucket/download";
6
6
  import { getFileUrl } from "./bucket/url";
7
+ import { clearBucket } from "./bucket/clear";
7
8
  /**
8
9
  * Register bucket commands with the CLI program
9
10
  */
@@ -22,6 +23,7 @@ Available operations:
22
23
  upload-folder Upload all files in a folder to a bucket
23
24
  download Download a file from a bucket
24
25
  url Get public or signed URL for a file
26
+ clear Remove all files from a bucket (or prefix)
25
27
 
26
28
  Run 'blt bucket <operation> --help' for more information on a specific command.
27
29
  `;
@@ -109,6 +111,25 @@ Run 'blt bucket <operation> --help' for more information on a specific command.
109
111
  .action(async ({ args, logger }) => {
110
112
  await downloadFile({ bucketName: args.bucketName, remotePath: args.remotePath, localPath: args.localPath }, logger);
111
113
  });
114
+ // Clear all files from a bucket
115
+ program
116
+ .command("bucket clear", "Remove all files from a bucket (or prefix)")
117
+ .hide()
118
+ .argument("<bucket-name>", "Name of the bucket")
119
+ .option("-p, --prefix <prefix>", "Only clear files under this path prefix", {
120
+ default: "",
121
+ })
122
+ .option("--dry-run", "Show what would be deleted without deleting", {
123
+ default: false,
124
+ })
125
+ .option("-y, --yes", "Skip confirmation prompt", { default: false })
126
+ .action(async ({ args, options, logger }) => {
127
+ await clearBucket({ bucketName: args.bucketName }, {
128
+ prefix: options.prefix,
129
+ dryRun: options.dryRun,
130
+ yes: options.yes,
131
+ }, logger);
132
+ });
112
133
  // Get public URL for a file
113
134
  program
114
135
  .command("bucket url", "Get public URL for a file")
@@ -1 +1 @@
1
- {"version":3,"file":"bucket.js","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bucket.js","sourceRoot":"","sources":["../../src/commands/bucket.ts"],"names":[],"mappings":"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"}
@@ -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.5",
3
+ "version": "1.4.7",
4
4
  "description": "blt cli",
5
5
  "type": "module",
6
6
  "main": "dist/blt",