@codemarc/blt 1.8.3 → 1.8.5
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 +18 -8
- package/dist/blt +19 -19
- package/dist/blt.js.map +1 -1
- package/dist/commands/app/data.d.ts +6 -0
- package/dist/commands/app/data.d.ts.map +1 -1
- package/dist/commands/app/data.js +5 -0
- package/dist/commands/app/data.js.map +1 -1
- package/dist/commands/app/env-check.d.ts +14 -8
- package/dist/commands/app/env-check.d.ts.map +1 -1
- package/dist/commands/app/env-check.js +51 -21
- package/dist/commands/app/env-check.js.map +1 -1
- package/dist/commands/app/env-decrypt.d.ts +9 -0
- package/dist/commands/app/env-decrypt.d.ts.map +1 -0
- package/dist/commands/app/env-decrypt.js +37 -0
- package/dist/commands/app/env-decrypt.js.map +1 -0
- package/dist/commands/app/pos.d.ts +2 -1
- package/dist/commands/app/pos.d.ts.map +1 -1
- package/dist/commands/app/pos.js +35 -33
- package/dist/commands/app/pos.js.map +1 -1
- package/dist/commands/app/site-env.d.ts +12 -0
- package/dist/commands/app/site-env.d.ts.map +1 -0
- package/dist/commands/app/site-env.js +53 -0
- package/dist/commands/app/site-env.js.map +1 -0
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +37 -11
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/env/get.d.ts +3 -2
- package/dist/commands/env/get.d.ts.map +1 -1
- package/dist/commands/env/get.js +13 -41
- package/dist/commands/env/get.js.map +1 -1
- package/dist/commands/env/list.d.ts +8 -0
- package/dist/commands/env/list.d.ts.map +1 -0
- package/dist/commands/env/list.js +21 -0
- package/dist/commands/env/list.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +13 -4
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init/script.d.ts +1 -0
- package/dist/commands/init/script.d.ts.map +1 -1
- package/dist/commands/init/script.js +33 -11
- package/dist/commands/init/script.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +6 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/show/env.d.ts.map +1 -1
- package/dist/commands/show/env.js +7 -25
- package/dist/commands/show/env.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +1 -7
- package/dist/commands/workflow.js.map +1 -1
- package/dist/lib/github.d.ts +17 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +53 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/repositories.d.ts +1 -0
- package/dist/lib/repositories.d.ts.map +1 -1
- package/dist/lib/repositories.js +30 -14
- package/dist/lib/repositories.js.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- **Bucket**: Supabase storage — list buckets, list/upload/download files, get URLs
|
|
19
19
|
- **Workflow**: List, show, delete, reload, and deploy GitHub Actions workflows (requires `gh`)
|
|
20
20
|
- **Show**: Schema info, row counts, env vars, DB version, repo list
|
|
21
|
-
- **Env**: Decrypt trailz `.trailz/env
|
|
21
|
+
- **Env**: Decrypt trailz `.trailz/env/env.<name>.bin` to `.env` via smash (`blt env get`; expands `$VAR` by default; requires `SMASH_KEY`)
|
|
22
22
|
- **Spin**: Manage DigitalOcean droplets and DNS for BLT test environments
|
|
23
23
|
- **App**: Developer-triggered POS deployment and test data refresh workflows
|
|
24
24
|
- **Cleanup**: Remove generated SQL/instance files, clean infrequently used YAML tags
|
|
@@ -429,15 +429,16 @@ blt deploy sql ./migrations/001_init.sql
|
|
|
429
429
|
|
|
430
430
|
The `app` namespace wraps developer on-demand workflows for BLT test environments.
|
|
431
431
|
|
|
432
|
-
### `blt app pos --branch <branch> --env <env>
|
|
432
|
+
### `blt app pos <target> [--branch <branch>] [--env <env>]`
|
|
433
433
|
|
|
434
|
-
Build and deploy POS to a configured test target.
|
|
434
|
+
Build and deploy POS to a configured test target. Uses `deploy/sites/<target>.bltcore.com` and the site env bundle (`BLT_ENV_NAME` from `.trailz/env/env.<name>.bin`). Writes `app/.dm.env` from the same bundle, renders nginx templates when present, then deploys via SSH/SCP.
|
|
435
435
|
|
|
436
436
|
```bash
|
|
437
|
-
blt app pos --branch laf-test
|
|
437
|
+
blt app pos test1 --branch laf-test
|
|
438
|
+
./regen.sh # same flow from deploy/sites/test1.bltcore.com (default branch laf-test)
|
|
438
439
|
```
|
|
439
440
|
|
|
440
|
-
|
|
441
|
+
`--env` is optional when it matches `BLT_ENV_NAME` in the site bundle. `--branch` defaults to `laf-test`.
|
|
441
442
|
|
|
442
443
|
### `blt app data refresh --from <source-env> --to <target-env>`
|
|
443
444
|
|
|
@@ -447,7 +448,16 @@ Pull a data snapshot from one environment and apply it to another.
|
|
|
447
448
|
blt app data refresh --from laf --to test-laf
|
|
448
449
|
```
|
|
449
450
|
|
|
450
|
-
This command uses `.trailz/env
|
|
451
|
+
This command uses `.trailz/env/env.<name>.bin` bundles in the **current working directory** (for example a deploy site checkout) and the existing `blt data pull` / `blt data apply` implementation. Snapshots default to `<cwd>/data-snapshots/` in **toon** format (override with `--out` / `--format`).
|
|
452
|
+
|
|
453
|
+
### `blt app data remove <instance>`
|
|
454
|
+
|
|
455
|
+
Delete all stamped snapshot runs for an instance under the snapshot base (default `<cwd>/data-snapshots/<instance>/`). No env bundle required.
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
blt app data remove laf
|
|
459
|
+
blt app data remove laf --dry-run
|
|
460
|
+
```
|
|
451
461
|
|
|
452
462
|
---
|
|
453
463
|
|
|
@@ -959,14 +969,14 @@ blt spin setup test-laf --user root
|
|
|
959
969
|
|
|
960
970
|
### `blt env get <name>`
|
|
961
971
|
|
|
962
|
-
Decrypt using `smash -n`. Ciphertext must be at `.trailz/env
|
|
972
|
+
Decrypt using `smash -n`. Ciphertext must be at `.trailz/env/env.<name>.bin`; the CLI invokes smash with **`env.<name>` (no `.bin`)** — that matches `@codemarc/smashdata`, which reads `${path}.bin` for decrypt. Set **`SMASH_KEY`** in your environment (same as when you encrypted). Writes plaintext to `.env` in the current directory. **`$VAR` references in the trailz file are expanded by default** (e.g. `SUPABASE_URL=https://$SUPABASE_PROJECT_REF.supabase.co`); use `--no-expand` to keep references verbatim.
|
|
963
973
|
|
|
964
974
|
```bash
|
|
965
975
|
blt env get laf
|
|
966
976
|
blt env get bae --no-expand
|
|
967
977
|
```
|
|
968
978
|
|
|
969
|
-
Equivalent to `smash -n .trailz/env
|
|
979
|
+
Equivalent to `smash -n .trailz/env/env.laf >.env` from the project root when `.trailz/env/env.laf.bin` exists.
|
|
970
980
|
|
|
971
981
|
---
|
|
972
982
|
|
package/dist/blt
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
import { program } from "@caporal/core";
|
|
3
|
+
import appCommand from "./commands/app";
|
|
3
4
|
import bucketCommand from "./commands/bucket";
|
|
4
5
|
import buildCommand from "./commands/build";
|
|
6
|
+
import cleanupCommand from "./commands/cleanup";
|
|
7
|
+
// import dataCommand from "./commands/data";
|
|
5
8
|
import deployCommand from "./commands/deploy";
|
|
9
|
+
import envCommand from "./commands/env";
|
|
6
10
|
import imageCommand from "./commands/image";
|
|
7
11
|
import initCommand from "./commands/init";
|
|
8
12
|
import pdfCommand from "./commands/pdf";
|
|
9
|
-
import versionCommand from "./commands/version";
|
|
10
13
|
import showCommand from "./commands/show";
|
|
11
|
-
import cleanupCommand from "./commands/cleanup";
|
|
12
|
-
import workflowCommand from "./commands/workflow";
|
|
13
|
-
import waiCommand from "./commands/wai";
|
|
14
|
-
import templateCommand from "./commands/template";
|
|
15
|
-
import envCommand from "./commands/env";
|
|
16
|
-
import dataCommand from "./commands/data";
|
|
17
14
|
import spinCommand from "./commands/spin";
|
|
18
|
-
import
|
|
15
|
+
import templateCommand from "./commands/template";
|
|
16
|
+
import versionCommand from "./commands/version";
|
|
17
|
+
import waiCommand from "./commands/wai";
|
|
18
|
+
import workflowCommand from "./commands/workflow";
|
|
19
19
|
import { join, dirname } from "node:path";
|
|
20
20
|
import { readFileSync } from "node:fs";
|
|
21
21
|
import { fileURLToPath } from "node:url";
|
|
@@ -29,22 +29,22 @@ export function getPackageVersion() {
|
|
|
29
29
|
program.name("blt")
|
|
30
30
|
.version(getPackageVersion())
|
|
31
31
|
.description("BLT Core Cli");
|
|
32
|
+
appCommand(program);
|
|
33
|
+
bucketCommand(program);
|
|
34
|
+
buildCommand(program);
|
|
35
|
+
cleanupCommand(program);
|
|
36
|
+
// dataCommand(program);
|
|
37
|
+
deployCommand(program);
|
|
38
|
+
envCommand(program);
|
|
32
39
|
imageCommand(program);
|
|
33
40
|
initCommand(program);
|
|
34
41
|
pdfCommand(program);
|
|
35
|
-
versionCommand(program);
|
|
36
|
-
buildCommand(program);
|
|
37
|
-
deployCommand(program);
|
|
38
|
-
bucketCommand(program);
|
|
39
42
|
showCommand(program);
|
|
40
|
-
cleanupCommand(program);
|
|
41
|
-
workflowCommand(program);
|
|
42
|
-
waiCommand(program);
|
|
43
|
-
templateCommand(program);
|
|
44
|
-
envCommand(program);
|
|
45
|
-
dataCommand(program);
|
|
46
43
|
spinCommand(program);
|
|
47
|
-
|
|
44
|
+
templateCommand(program);
|
|
45
|
+
versionCommand(program);
|
|
46
|
+
waiCommand(program);
|
|
47
|
+
workflowCommand(program);
|
|
48
48
|
// If no command is provided, show help
|
|
49
49
|
const args = process.argv.slice(2);
|
|
50
50
|
if (args.length === 0) {
|
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,
|
|
1
|
+
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,6CAA6C;AAC7C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,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,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,wBAAwB;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,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"}
|
|
@@ -22,8 +22,14 @@ export type AppDataRefreshOptions = {
|
|
|
22
22
|
out: string;
|
|
23
23
|
format: DataFormat;
|
|
24
24
|
};
|
|
25
|
+
export type AppDataRemoveOptions = {
|
|
26
|
+
instance: string;
|
|
27
|
+
out: string;
|
|
28
|
+
dryRun: boolean;
|
|
29
|
+
};
|
|
25
30
|
export declare function appDataPull(opts: AppDataPullOptions, logger: Logger): Promise<void>;
|
|
26
31
|
export declare function appDataApply(opts: AppDataApplyOptions, logger: Logger): Promise<void>;
|
|
27
32
|
export declare function appDataRefresh(opts: AppDataRefreshOptions, logger: Logger): Promise<void>;
|
|
33
|
+
export declare function appDataRemove(opts: AppDataRemoveOptions, logger: Logger): void;
|
|
28
34
|
export {};
|
|
29
35
|
//# sourceMappingURL=data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/commands/app/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/commands/app/data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQ5C,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,eAAO,MAAM,uBAAuB,EAAE,UAAmB,CAAC;AAE1D,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,SAAgB,GAAG,MAAM,CAE3F;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;CAChB,CAAC;AAsBF,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3F;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/F;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG9E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isAbsolute, resolve } from "node:path";
|
|
2
2
|
import { dataPull } from "../data/pull";
|
|
3
3
|
import { dataApply } from "../data/apply";
|
|
4
|
+
import { dataRemove } from "../data/remove";
|
|
4
5
|
import { resolveLatestSnapshot } from "../data/helpers";
|
|
5
6
|
import { ensureAppEnv, parseDotEnvContent, trailzEnvBasePath } from "./env-check";
|
|
6
7
|
import { readCommand } from "./shell";
|
|
@@ -67,4 +68,8 @@ export async function appDataRefresh(opts, logger) {
|
|
|
67
68
|
await appDataPull({ env: opts.from, out: opts.out, format: opts.format }, logger);
|
|
68
69
|
await appDataApply({ env: opts.to, snapshotDir: "latest", out: opts.out, dryRun: false }, logger);
|
|
69
70
|
}
|
|
71
|
+
export function appDataRemove(opts, logger) {
|
|
72
|
+
const outDir = resolveAppSnapshotOutDir(opts.out, process.cwd());
|
|
73
|
+
dataRemove(opts.instance, { outBaseDir: outDir, dryRun: opts.dryRun }, logger);
|
|
74
|
+
}
|
|
70
75
|
//# sourceMappingURL=data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/commands/app/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,uBAAuB,GAAe,MAAM,CAAC;AAE1D,6EAA6E;AAC7E,MAAM,UAAU,wBAAwB,CAAC,GAAW,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;IAClF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/commands/app/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { Logger } from "@caporal/core";
|
|
2
2
|
/** Canonical tag written by `blt env get` and recognized on preflight. */
|
|
3
3
|
export declare const BLT_ENV_NAME_KEY = "BLT_ENV_NAME";
|
|
4
|
-
/**
|
|
4
|
+
/** Human-readable header written by `blt env get` (parsed on preflight). */
|
|
5
5
|
export declare const ENV_FROM_COMMENT_RE: RegExp;
|
|
6
|
+
/** Pre-rename trailz bundles (`.env.<name>.bin`); still parsed from older `.env` files. */
|
|
7
|
+
export declare const LEGACY_ENV_FROM_COMMENT_RE: RegExp;
|
|
6
8
|
export type AppEnvSource = "local-dotenv" | "trailz-bundle";
|
|
7
9
|
export type AppEnvAvailability = {
|
|
8
10
|
envName: string;
|
|
@@ -12,14 +14,18 @@ export type AppEnvAvailability = {
|
|
|
12
14
|
bundlePath: string;
|
|
13
15
|
};
|
|
14
16
|
export declare function trailzEnvBasePath(cwd: string, envName: string): string;
|
|
17
|
+
export declare function legacyTrailzEnvBasePath(cwd: string, envName: string): string;
|
|
15
18
|
export declare function trailzEnvBundlePath(cwd: string, envName: string): string;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export declare function
|
|
19
|
+
export declare function legacyTrailzEnvBundlePath(cwd: string, envName: string): string;
|
|
20
|
+
/** Smash plaintext path + ciphertext path; prefers `env.<name>.bin`, falls back to legacy `.env.<name>.bin`. */
|
|
21
|
+
export declare function resolveTrailzEnvPaths(cwd: string, envName: string): {
|
|
22
|
+
basePath: string;
|
|
23
|
+
bundlePath: string;
|
|
24
|
+
} | null;
|
|
25
|
+
/** Names with a trailz ciphertext bundle in `cwd/.trailz/env/` (sorted). */
|
|
26
|
+
export declare function listTrailzEnvNames(cwd?: string): string[];
|
|
19
27
|
export declare function dotEnvPathFor(cwd: string): string;
|
|
20
|
-
/**
|
|
21
|
-
export declare function formatEnvFileHeader(envName: string): string;
|
|
22
|
-
/** Parse `BLT_ENV_NAME` or `# from .trailz/env/.env.<name>.bin` from a `.env` body. */
|
|
28
|
+
/** Parse `BLT_ENV_NAME` or `# from .trailz/env/env.<name>.bin` from a `.env` body. */
|
|
23
29
|
export declare function parseEnvNameFromDotEnv(content: string): string | null;
|
|
24
30
|
/** Parse assignment lines from `.env` text (skips comments and `BLT_ENV_NAME`). */
|
|
25
31
|
export declare function parseDotEnvAssignments(content: string): Record<string, string>;
|
|
@@ -39,7 +45,7 @@ export declare function ensureAppEnv(opts: {
|
|
|
39
45
|
envName: string;
|
|
40
46
|
cwd: string;
|
|
41
47
|
logger?: Logger;
|
|
42
|
-
/** When true, skip cwd `.env` and require `.trailz/env
|
|
48
|
+
/** When true, skip cwd `.env` and require `.trailz/env/env.<name>.bin` (app data workflows). */
|
|
43
49
|
trailzOnly?: boolean;
|
|
44
50
|
}): AppEnvAvailability;
|
|
45
51
|
//# sourceMappingURL=env-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-check.d.ts","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"env-check.d.ts","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,QAA2E,CAAC;AAE5G,2FAA2F;AAC3F,eAAO,MAAM,0BAA0B,QACoC,CAAC;AAM5E,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;AAE5D,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,gHAAgH;AAChH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcjD;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CAoBxE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAarE;AAED,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9E;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,CAAC,UAAwB,EACxC,MAAM,UAAO,GACX,MAAM,CAAC,UAAU,CAInB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,kBAAkB,CAuDrB"}
|
|
@@ -1,37 +1,66 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import dotenv from "dotenv";
|
|
4
4
|
import dotenvExpand from "dotenv-expand";
|
|
5
5
|
/** Canonical tag written by `blt env get` and recognized on preflight. */
|
|
6
6
|
export const BLT_ENV_NAME_KEY = "BLT_ENV_NAME";
|
|
7
|
-
/**
|
|
8
|
-
export const ENV_FROM_COMMENT_RE = /^#\s*from\s+\.trailz\/env
|
|
7
|
+
/** Human-readable header written by `blt env get` (parsed on preflight). */
|
|
8
|
+
export const ENV_FROM_COMMENT_RE = /^#\s*from\s+\.trailz\/env\/env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin\s*$/m;
|
|
9
|
+
/** Pre-rename trailz bundles (`.env.<name>.bin`); still parsed from older `.env` files. */
|
|
10
|
+
export const LEGACY_ENV_FROM_COMMENT_RE = /^#\s*from\s+\.trailz\/env\/\.env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin\s*$/m;
|
|
11
|
+
/** Ciphertext filenames under `.trailz/env/` (basename only). */
|
|
12
|
+
const TRAILZ_ENV_BUNDLE_RE = /^env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin$/;
|
|
13
|
+
const LEGACY_TRAILZ_ENV_BUNDLE_RE = /^\.env\.([a-zA-Z0-9][a-zA-Z0-9._-]*)\.bin$/;
|
|
9
14
|
export function trailzEnvBasePath(cwd, envName) {
|
|
15
|
+
return join(cwd, ".trailz", "env", `env.${envName}`);
|
|
16
|
+
}
|
|
17
|
+
export function legacyTrailzEnvBasePath(cwd, envName) {
|
|
10
18
|
return join(cwd, ".trailz", "env", `.env.${envName}`);
|
|
11
19
|
}
|
|
12
20
|
export function trailzEnvBundlePath(cwd, envName) {
|
|
13
21
|
return `${trailzEnvBasePath(cwd, envName)}.bin`;
|
|
14
22
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return `${siteEnvName}-dm`;
|
|
23
|
+
export function legacyTrailzEnvBundlePath(cwd, envName) {
|
|
24
|
+
return `${legacyTrailzEnvBasePath(cwd, envName)}.bin`;
|
|
18
25
|
}
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
/** Smash plaintext path + ciphertext path; prefers `env.<name>.bin`, falls back to legacy `.env.<name>.bin`. */
|
|
27
|
+
export function resolveTrailzEnvPaths(cwd, envName) {
|
|
28
|
+
const newBase = trailzEnvBasePath(cwd, envName);
|
|
29
|
+
const newBin = `${newBase}.bin`;
|
|
30
|
+
if (existsSync(newBin)) {
|
|
31
|
+
return { basePath: newBase, bundlePath: newBin };
|
|
32
|
+
}
|
|
33
|
+
const legacyBase = legacyTrailzEnvBasePath(cwd, envName);
|
|
34
|
+
const legacyBin = `${legacyBase}.bin`;
|
|
35
|
+
if (existsSync(legacyBin)) {
|
|
36
|
+
return { basePath: legacyBase, bundlePath: legacyBin };
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/** Names with a trailz ciphertext bundle in `cwd/.trailz/env/` (sorted). */
|
|
41
|
+
export function listTrailzEnvNames(cwd = process.cwd()) {
|
|
42
|
+
const envDir = join(cwd, ".trailz", "env");
|
|
43
|
+
if (!existsSync(envDir)) {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const names = new Set();
|
|
47
|
+
for (const file of readdirSync(envDir)) {
|
|
48
|
+
const current = TRAILZ_ENV_BUNDLE_RE.exec(file);
|
|
49
|
+
if (current) {
|
|
50
|
+
names.add(current[1]);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const legacy = LEGACY_TRAILZ_ENV_BUNDLE_RE.exec(file);
|
|
54
|
+
if (legacy) {
|
|
55
|
+
names.add(legacy[1]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...names].sort();
|
|
21
59
|
}
|
|
22
60
|
export function dotEnvPathFor(cwd) {
|
|
23
61
|
return join(cwd, ".env");
|
|
24
62
|
}
|
|
25
|
-
/**
|
|
26
|
-
export function formatEnvFileHeader(envName) {
|
|
27
|
-
return [
|
|
28
|
-
`# BLT environment: ${envName}`,
|
|
29
|
-
`# from .trailz/env/.env.${envName}.bin`,
|
|
30
|
-
`${BLT_ENV_NAME_KEY}=${envName}`,
|
|
31
|
-
"",
|
|
32
|
-
].join("\n");
|
|
33
|
-
}
|
|
34
|
-
/** Parse `BLT_ENV_NAME` or `# from .trailz/env/.env.<name>.bin` from a `.env` body. */
|
|
63
|
+
/** Parse `BLT_ENV_NAME` or `# from .trailz/env/env.<name>.bin` from a `.env` body. */
|
|
35
64
|
export function parseEnvNameFromDotEnv(content) {
|
|
36
65
|
for (const rawLine of content.split("\n")) {
|
|
37
66
|
const line = rawLine.trim();
|
|
@@ -42,7 +71,7 @@ export function parseEnvNameFromDotEnv(content) {
|
|
|
42
71
|
return value.length > 0 ? value : null;
|
|
43
72
|
}
|
|
44
73
|
}
|
|
45
|
-
const commentMatch = ENV_FROM_COMMENT_RE.exec(content);
|
|
74
|
+
const commentMatch = ENV_FROM_COMMENT_RE.exec(content) ?? LEGACY_ENV_FROM_COMMENT_RE.exec(content);
|
|
46
75
|
return commentMatch?.[1] ?? null;
|
|
47
76
|
}
|
|
48
77
|
/** Parse assignment lines from `.env` text (skips comments and `BLT_ENV_NAME`). */
|
|
@@ -91,7 +120,8 @@ export function parseDotEnvContent(content, baseEnv = process.env, expand = true
|
|
|
91
120
|
* Accepts a loaded, tagged `.env` or a trailz ciphertext bundle (+ SMASH_KEY).
|
|
92
121
|
*/
|
|
93
122
|
export function ensureAppEnv(opts) {
|
|
94
|
-
const
|
|
123
|
+
const resolved = resolveTrailzEnvPaths(opts.cwd, opts.envName);
|
|
124
|
+
const bundlePath = resolved?.bundlePath ?? trailzEnvBundlePath(opts.cwd, opts.envName);
|
|
95
125
|
const dotEnvPath = dotEnvPathFor(opts.cwd);
|
|
96
126
|
if (!opts.trailzOnly && existsSync(dotEnvPath)) {
|
|
97
127
|
const content = readFileSync(dotEnvPath, "utf8");
|
|
@@ -114,7 +144,7 @@ export function ensureAppEnv(opts) {
|
|
|
114
144
|
opts.logger?.info(`Local .env exists in ${opts.cwd} but is not tagged with ${BLT_ENV_NAME_KEY}; checking trailz bundle`);
|
|
115
145
|
}
|
|
116
146
|
}
|
|
117
|
-
if (!
|
|
147
|
+
if (!resolved) {
|
|
118
148
|
throw new Error(`Environment "${opts.envName}" is not available in ${opts.cwd}.\n` +
|
|
119
149
|
` Expected tagged .env (${BLT_ENV_NAME_KEY}=${opts.envName}) or ciphertext at:\n` +
|
|
120
150
|
` ${bundlePath}\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-check.js","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"env-check.js","sourceRoot":"","sources":["../../../src/commands/app/env-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Resolve smash CLI (local node_modules or bunx fallback). */
|
|
2
|
+
export declare function resolveSmashCommand(cwd: string): string[];
|
|
3
|
+
export type DecryptTrailzEnvOptions = {
|
|
4
|
+
cwd?: string;
|
|
5
|
+
expand?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/** Decrypt a trailz env bundle (`smash -n <basePath>`) and optionally expand `$VAR` references. */
|
|
8
|
+
export declare function decryptTrailzEnvBase(basePath: string, options?: DecryptTrailzEnvOptions): string;
|
|
9
|
+
//# sourceMappingURL=env-decrypt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-decrypt.d.ts","sourceRoot":"","sources":["../../../src/commands/app/env-decrypt.ts"],"names":[],"mappings":"AAKA,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAUzD;AAED,MAAM,MAAM,uBAAuB,GAAG;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,mGAAmG;AACnG,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,uBAA4B,GACnC,MAAM,CAuBR"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { expandDotEnvBody } from "./env-check";
|
|
5
|
+
/** Resolve smash CLI (local node_modules or bunx fallback). */
|
|
6
|
+
export function resolveSmashCommand(cwd) {
|
|
7
|
+
const binSmash = join(cwd, "node_modules", ".bin", "smash");
|
|
8
|
+
const script = join(cwd, "node_modules", "@codemarc", "smashdata", "smash");
|
|
9
|
+
if (existsSync(binSmash)) {
|
|
10
|
+
return [binSmash];
|
|
11
|
+
}
|
|
12
|
+
if (existsSync(script)) {
|
|
13
|
+
return ["node", script];
|
|
14
|
+
}
|
|
15
|
+
return ["bunx", "@codemarc/smashdata"];
|
|
16
|
+
}
|
|
17
|
+
/** Decrypt a trailz env bundle (`smash -n <basePath>`) and optionally expand `$VAR` references. */
|
|
18
|
+
export function decryptTrailzEnvBase(basePath, options = {}) {
|
|
19
|
+
const cwd = options.cwd ?? process.cwd();
|
|
20
|
+
const expand = options.expand ?? true;
|
|
21
|
+
const smashCmd = resolveSmashCommand(cwd);
|
|
22
|
+
const [command, ...commandArgs] = smashCmd;
|
|
23
|
+
const result = spawnSync(command, [...commandArgs, "-n", basePath], {
|
|
24
|
+
cwd,
|
|
25
|
+
env: process.env,
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
});
|
|
28
|
+
if (result.error) {
|
|
29
|
+
throw result.error;
|
|
30
|
+
}
|
|
31
|
+
if ((result.status ?? 0) !== 0) {
|
|
32
|
+
throw new Error(`smash -n ${basePath} failed${result.stderr ? `: ${result.stderr.trim()}` : ""}`);
|
|
33
|
+
}
|
|
34
|
+
const decrypted = (result.stdout ?? "").replace(/^\uFEFF/, "").trimStart();
|
|
35
|
+
return expand ? expandDotEnvBody(decrypted) : decrypted;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=env-decrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-decrypt.js","sourceRoot":"","sources":["../../../src/commands/app/env-decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACxC,CAAC;AAOD,mGAAmG;AACnG,MAAM,UAAU,oBAAoB,CACnC,QAAgB,EAChB,UAAmC,EAAE;IAErC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACtC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;QACnE,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,MAAM;KAChB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,MAAM,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACd,YAAY,QAAQ,UAAU,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChF,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3E,OAAO,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Logger } from "@caporal/core";
|
|
2
|
+
export declare const DEFAULT_POS_BRANCH = "laf-test";
|
|
2
3
|
export type DeployPosAppOptions = {
|
|
3
4
|
target: string;
|
|
4
5
|
branch: string;
|
|
5
|
-
env
|
|
6
|
+
env?: string;
|
|
6
7
|
};
|
|
7
8
|
export declare function deployPosApp(opts: DeployPosAppOptions, logger: Logger): Promise<void>;
|
|
8
9
|
//# sourceMappingURL=pos.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"pos.d.ts","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAO5C,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAE7C,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAoBF,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF3F"}
|
package/dist/commands/app/pos.js
CHANGED
|
@@ -1,34 +1,50 @@
|
|
|
1
|
-
import { existsSync, rmSync } from "node:fs";
|
|
1
|
+
import { appendFileSync, existsSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { findWorkspaceRoot, resolveDeploySiteDir } from "./paths";
|
|
4
|
-
import {
|
|
4
|
+
import { ensureAppEnv } from "./env-check";
|
|
5
|
+
import { decryptTrailzEnvBase } from "./env-decrypt";
|
|
6
|
+
import { loadSiteEnvContext, renderNginxTemplatesIfPresent } from "./site-env";
|
|
5
7
|
import { runCommand } from "./shell";
|
|
8
|
+
export const DEFAULT_POS_BRANCH = "laf-test";
|
|
6
9
|
function removeIfExists(path) {
|
|
7
10
|
if (existsSync(path)) {
|
|
8
11
|
rmSync(path, { recursive: true, force: true });
|
|
9
12
|
}
|
|
10
13
|
}
|
|
14
|
+
function expandedSiteEnvBody(siteEnvBase, siteDir) {
|
|
15
|
+
return decryptTrailzEnvBase(siteEnvBase, { cwd: siteDir, expand: true });
|
|
16
|
+
}
|
|
17
|
+
function writeExpandedSiteEnv(path, siteEnvBase, siteDir) {
|
|
18
|
+
writeFileSync(path, `${expandedSiteEnvBody(siteEnvBase, siteDir)}\n`);
|
|
19
|
+
}
|
|
20
|
+
function appendExpandedSiteEnv(path, siteEnvBase, siteDir) {
|
|
21
|
+
appendFileSync(path, `\n${expandedSiteEnvBody(siteEnvBase, siteDir)}\n`);
|
|
22
|
+
}
|
|
11
23
|
export async function deployPosApp(opts, logger) {
|
|
12
24
|
const workspaceRoot = findWorkspaceRoot();
|
|
13
25
|
const siteDir = resolveDeploySiteDir(opts.target, workspaceRoot);
|
|
26
|
+
const site = loadSiteEnvContext(siteDir, logger);
|
|
27
|
+
const envName = opts.env ?? site.bltEnvName;
|
|
14
28
|
const envPlain = join(siteDir, ".env");
|
|
15
29
|
const appZip = join(siteDir, "app.zip");
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
if (envName !== site.bltEnvName) {
|
|
31
|
+
throw new Error(`Requested env "${envName}" does not match BLT_ENV_NAME="${site.bltEnvName}" in site bundle.`);
|
|
32
|
+
}
|
|
33
|
+
if (opts.target !== site.target) {
|
|
34
|
+
throw new Error(`SSH target "${opts.target}" does not match site target "${site.target}" from bundle.`);
|
|
35
|
+
}
|
|
36
|
+
ensureAppEnv({ envName, cwd: siteDir, logger });
|
|
37
|
+
logger.info(`Deploying POS branch "${opts.branch}" with env "${envName}" to "${site.target}"`);
|
|
19
38
|
logger.info(`Site directory: ${siteDir}`);
|
|
20
|
-
runCommand("bash", ["-lc", `smash -n ../../../.trailz/keys | grep GITHUB_TOKEN > .env`], logger, {
|
|
21
|
-
cwd: siteDir,
|
|
22
|
-
});
|
|
39
|
+
runCommand("bash", ["-lc", `smash -n ../../../.trailz/keys/keys | grep GITHUB_TOKEN > .env`], logger, { cwd: siteDir });
|
|
23
40
|
runCommand("bash", ["-lc", `printf '\\nTZ=America/New_York\\n' >> .env`], logger, {
|
|
24
41
|
cwd: siteDir,
|
|
25
42
|
});
|
|
26
43
|
runCommand("docker", ["build", "-f", "Dockerfile", "-t", "blt-core-pos", "."], logger, {
|
|
27
44
|
cwd: siteDir,
|
|
28
45
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
46
|
+
logger.info("Merging expanded site env into build .env");
|
|
47
|
+
appendExpandedSiteEnv(envPlain, site.siteEnvBase, siteDir);
|
|
32
48
|
runCommand("docker", [
|
|
33
49
|
"run",
|
|
34
50
|
"-it",
|
|
@@ -42,31 +58,17 @@ export async function deployPosApp(opts, logger) {
|
|
|
42
58
|
"blt-core-pos",
|
|
43
59
|
"/home/blt/buildcore.sh",
|
|
44
60
|
], logger, { cwd: siteDir });
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const dmSiteEnvRel = `.trailz/env/.env.${dmEnvName}`;
|
|
49
|
-
if (existsSync(dmBundlePath)) {
|
|
50
|
-
logger.info(`Writing gateway env from .trailz/env/.env.${dmEnvName}.bin → app/.dm.env`);
|
|
51
|
-
runCommand("bash", ["-lc", `smash -n ${dmSiteEnvRel} > app/.dm.env`], logger, {
|
|
52
|
-
cwd: siteDir,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
logger.info(`No DM env bundle at ${dmBundlePath}; skipping app/.dm.env`);
|
|
57
|
-
if (existsSync(dmEnvOut)) {
|
|
58
|
-
rmSync(dmEnvOut, { force: true });
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
+
logger.info("Writing expanded gateway env from same bundle → app/.dm.env");
|
|
62
|
+
writeExpandedSiteEnv(join(siteDir, "app", ".dm.env"), site.siteEnvBase, siteDir);
|
|
63
|
+
renderNginxTemplatesIfPresent(site, logger);
|
|
61
64
|
removeIfExists(appZip);
|
|
62
65
|
runCommand("zip", ["-9r", "app.zip", "app/"], logger, { cwd: siteDir });
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
});
|
|
66
|
-
runCommand("scp", [
|
|
67
|
-
runCommand("scp", [appZip, `${opts.target}:`], logger, { cwd: siteDir });
|
|
66
|
+
logger.info("Writing expanded site .env for droplet deploy");
|
|
67
|
+
writeExpandedSiteEnv(envPlain, site.siteEnvBase, siteDir);
|
|
68
|
+
runCommand("scp", [envPlain, `${site.target}:`], logger, { cwd: siteDir });
|
|
69
|
+
runCommand("scp", [appZip, `${site.target}:`], logger, { cwd: siteDir });
|
|
68
70
|
runCommand("ssh", [
|
|
69
|
-
|
|
71
|
+
site.target,
|
|
70
72
|
"rm -rf app.last && mv app app.last && unzip app.zip && cd app && docker compose restart",
|
|
71
73
|
], logger, { cwd: siteDir });
|
|
72
74
|
logger.info("POS deploy complete.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pos.js","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"pos.js","sourceRoot":"","sources":["../../../src/commands/app/pos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAQ7C,SAAS,cAAc,CAAC,IAAY;IACnC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB,EAAE,OAAe;IAChE,OAAO,oBAAoB,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,WAAmB,EAAE,OAAe;IAC/E,aAAa,CAAC,IAAI,EAAE,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,WAAmB,EAAE,OAAe;IAChF,cAAc,CAAC,IAAI,EAAE,KAAK,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAyB,EAAE,MAAc;IAC3E,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACd,kBAAkB,OAAO,kCAAkC,IAAI,CAAC,UAAU,mBAAmB,CAC7F,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACd,eAAe,IAAI,CAAC,MAAM,iCAAiC,IAAI,CAAC,MAAM,gBAAgB,CACtF,CAAC;IACH,CAAC;IAED,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhD,MAAM,CAAC,IAAI,CACV,yBAAyB,IAAI,CAAC,MAAM,eAAe,OAAO,SAAS,IAAI,CAAC,MAAM,GAAG,CACjF,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;IAE1C,UAAU,CACT,MAAM,EACN,CAAC,KAAK,EAAE,gEAAgE,CAAC,EACzE,MAAM,EACN,EAAE,GAAG,EAAE,OAAO,EAAE,CAChB,CAAC;IACF,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,4CAA4C,CAAC,EAAE,MAAM,EAAE;QACjF,GAAG,EAAE,OAAO;KACZ,CAAC,CAAC;IAEH,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE;QACtF,GAAG,EAAE,OAAO;KACZ,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACzD,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE3D,UAAU,CACT,QAAQ,EACR;QACC,KAAK;QACL,KAAK;QACL,MAAM;QACN,YAAY;QACZ,MAAM;QACN,IAAI;QACJ,UAAU,IAAI,CAAC,MAAM,EAAE;QACvB,IAAI;QACJ,yBAAyB;QACzB,cAAc;QACd,wBAAwB;KACxB,EACD,MAAM,EACN,EAAE,GAAG,EAAE,OAAO,EAAE,CAChB,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC3E,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAEjF,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE5C,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAExE,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC7D,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAE1D,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3E,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,UAAU,CACT,KAAK,EACL;QACC,IAAI,CAAC,MAAM;QACX,yFAAyF;KACzF,EACD,MAAM,EACN,EAAE,GAAG,EAAE,OAAO,EAAE,CAChB,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
export type SiteEnvContext = {
|
|
3
|
+
siteDir: string;
|
|
4
|
+
siteSlug: string;
|
|
5
|
+
bltEnvName: string;
|
|
6
|
+
target: string;
|
|
7
|
+
dmHost: string;
|
|
8
|
+
siteEnvBase: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function loadSiteEnvContext(siteDir: string, logger: Logger): SiteEnvContext;
|
|
11
|
+
export declare function renderNginxTemplatesIfPresent(site: SiteEnvContext, logger: Logger): void;
|
|
12
|
+
//# sourceMappingURL=site-env.d.ts.map
|