@codemarc/blt 1.6.2 → 1.6.3
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 +17 -1
- package/dist/blt +2 -0
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- package/dist/commands/env/get.d.ts +7 -0
- package/dist/commands/env/get.d.ts.map +1 -0
- package/dist/commands/env/get.js +33 -0
- package/dist/commands/env/get.js.map +1 -0
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +37 -0
- package/dist/commands/env.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
- **Bucket**: Supabase storage — list buckets, list/upload/download files, get URLs
|
|
18
18
|
- **Workflow**: List, show, delete, reload, and deploy GitHub Actions workflows (requires `gh`)
|
|
19
19
|
- **Show**: Schema info, row counts, env vars, DB version, repo list
|
|
20
|
+
- **Env**: Decrypt trailz `.trailz/env/.env.<name>` to `.env` via smash (`blt env get`)
|
|
20
21
|
- **Cleanup**: Remove generated SQL/instance files, clean infrequently used YAML tags
|
|
21
22
|
|
|
22
23
|
## Installation
|
|
@@ -74,6 +75,7 @@ blt deploy schema
|
|
|
74
75
|
| `blt workflow`| list, show, delete, reload, deploy |
|
|
75
76
|
| `blt bucket` | names, list, upload, download, url, clear |
|
|
76
77
|
| `blt show` | schema, counts, env, db, repo |
|
|
78
|
+
| `blt env` | get (decrypt trailz env to `.env`) |
|
|
77
79
|
| `blt cleanup` | generated, tags |
|
|
78
80
|
|
|
79
81
|
Run `blt <command>` with no subcommand for help (e.g. `blt image`, `blt pdf`).
|
|
@@ -733,6 +735,20 @@ blt show repo --ssh
|
|
|
733
735
|
|
|
734
736
|
---
|
|
735
737
|
|
|
738
|
+
## Env Commands
|
|
739
|
+
|
|
740
|
+
### `blt env get <name>`
|
|
741
|
+
|
|
742
|
+
Decrypt the encrypted file `.trailz/env/.env.<name>` using `smash -n` and write the result to `.env` in the current directory. Requires `bunx smash` on your PATH (e.g. from `@codemarc/smashdata`).
|
|
743
|
+
|
|
744
|
+
```bash
|
|
745
|
+
blt env get laf
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
This is equivalent to `smash -n .trailz/env/.env.<name> >.env` from the project root.
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
736
752
|
## Cleanup Commands
|
|
737
753
|
|
|
738
754
|
### `blt cleanup generated`
|
|
@@ -768,7 +784,7 @@ blt cleanup tags joanne --min-count 2 --dry-run
|
|
|
768
784
|
|
|
769
785
|
## Environment Variables
|
|
770
786
|
|
|
771
|
-
Bucket and database operations typically use Supabase configuration (e.g. from `.env`). The `blt show env` command displays BLT core environment variables.
|
|
787
|
+
Bucket and database operations typically use Supabase configuration (e.g. from `.env`). The `blt show env` command displays BLT core environment variables. To materialize `.env` from a committed encrypted file under `.trailz/env/`, use `blt env get <name>`.
|
|
772
788
|
|
|
773
789
|
---
|
|
774
790
|
|
package/dist/blt
CHANGED
|
@@ -12,6 +12,7 @@ import cleanupCommand from "./commands/cleanup";
|
|
|
12
12
|
import workflowCommand from "./commands/workflow";
|
|
13
13
|
import waiCommand from "./commands/wai";
|
|
14
14
|
import templateCommand from "./commands/template";
|
|
15
|
+
import envCommand from "./commands/env";
|
|
15
16
|
import { join, dirname } from "node:path";
|
|
16
17
|
import { readFileSync } from "node:fs";
|
|
17
18
|
import { fileURLToPath } from "node:url";
|
|
@@ -37,6 +38,7 @@ cleanupCommand(program);
|
|
|
37
38
|
workflowCommand(program);
|
|
38
39
|
waiCommand(program);
|
|
39
40
|
templateCommand(program);
|
|
41
|
+
envCommand(program);
|
|
40
42
|
// If no command is provided, show help
|
|
41
43
|
const args = process.argv.slice(2);
|
|
42
44
|
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":";
|
|
1
|
+
{"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAwBA,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;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,eAAe,MAAM,qBAAqB,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;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AAExC,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;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AAEtB,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
|
+
* Decrypt `.trailz/env/.env.<name>` with smash (`-n`) and write plaintext to `.env`
|
|
4
|
+
* in the current working directory.
|
|
5
|
+
*/
|
|
6
|
+
export declare function envGet(name: string, logger: Logger): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAO5C;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BxE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/** Single path segment for `.env.<name>` under `.trailz/env/`. */
|
|
4
|
+
const NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
|
|
5
|
+
/**
|
|
6
|
+
* Decrypt `.trailz/env/.env.<name>` with smash (`-n`) and write plaintext to `.env`
|
|
7
|
+
* in the current working directory.
|
|
8
|
+
*/
|
|
9
|
+
export async function envGet(name, logger) {
|
|
10
|
+
if (!NAME_RE.test(name)) {
|
|
11
|
+
logger.error("Invalid environment name: use one segment (letters, numbers, . _ -).");
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
const encryptedPath = join(cwd, ".trailz", "env", `.env.${name}`);
|
|
16
|
+
if (!existsSync(encryptedPath)) {
|
|
17
|
+
logger.error(`Encrypted env file not found: ${encryptedPath}`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const proc = Bun.spawnSync({
|
|
21
|
+
cmd: ["bunx", "smash", "-n", encryptedPath],
|
|
22
|
+
cwd,
|
|
23
|
+
stdout: "pipe",
|
|
24
|
+
stderr: "inherit",
|
|
25
|
+
});
|
|
26
|
+
if (proc.exitCode !== 0) {
|
|
27
|
+
process.exit(proc.exitCode ?? 1);
|
|
28
|
+
}
|
|
29
|
+
const outPath = join(cwd, ".env");
|
|
30
|
+
await Bun.write(outPath, proc.stdout);
|
|
31
|
+
logger.info(`Wrote ${outPath}`);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,kEAAkE;AAClE,MAAM,OAAO,GAAG,8BAA8B,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc;IACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CACX,sEAAsE,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,iCAAiC,aAAa,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC;QAC3C,GAAG;QACH,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QA2ClD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { envGet } from "./env/get";
|
|
2
|
+
export default function envCommand(program) {
|
|
3
|
+
const envHelpText = `
|
|
4
|
+
env utilities (trailz / smash)
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
blt env <operation>
|
|
8
|
+
|
|
9
|
+
Available operations:
|
|
10
|
+
get <name> Decrypt .trailz/env/.env.<name> with smash and write .env in the current directory
|
|
11
|
+
|
|
12
|
+
Requires: bunx smash (e.g. @codemarc/smashdata) and a committed encrypted file under .trailz/env/.
|
|
13
|
+
|
|
14
|
+
Run 'blt env get --help' for more information.
|
|
15
|
+
`;
|
|
16
|
+
program
|
|
17
|
+
.command("env", "decrypt trailz env to .env")
|
|
18
|
+
.help(envHelpText)
|
|
19
|
+
.action(() => {
|
|
20
|
+
console.log(envHelpText);
|
|
21
|
+
});
|
|
22
|
+
program
|
|
23
|
+
.command("env get", "Decrypt named trailz env to .env")
|
|
24
|
+
.hide()
|
|
25
|
+
.argument("<name>", "Environment name (file .trailz/env/.env.<name>)")
|
|
26
|
+
.action(async ({ args, logger, }) => {
|
|
27
|
+
try {
|
|
28
|
+
await envGet(args.name, logger);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
32
|
+
logger.error(message);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IAClD,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYpB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;SAC5C,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEJ,OAAO;SACL,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACtD,IAAI,EAAE;SACN,QAAQ,CAAC,QAAQ,EAAE,iDAAiD,CAAC;SACrE,MAAM,CACN,KAAK,EAAE,EACN,IAAI,EACJ,MAAM,GAIN,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CACD,CAAC;AACJ,CAAC"}
|