hereya-cli 0.62.1 → 0.64.0
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 +112 -42
- package/dist/backend/cloud/cloud-backend.d.ts +2 -2
- package/dist/backend/cloud/cloud-backend.js +6 -2
- package/dist/backend/common.d.ts +4 -1
- package/dist/backend/file.d.ts +2 -2
- package/dist/backend/file.js +1 -1
- package/dist/commands/docker/run/index.d.ts +15 -0
- package/dist/commands/docker/run/index.js +111 -0
- package/dist/commands/flow/docker/run/index.d.ts +16 -0
- package/dist/commands/flow/docker/run/index.js +67 -0
- package/dist/commands/workspace/list/index.d.ts +3 -0
- package/dist/commands/workspace/list/index.js +15 -4
- package/dist/infrastructure/local.d.ts +4 -0
- package/dist/infrastructure/local.js +24 -0
- package/oclif.manifest.json +184 -42
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ $ npm install -g hereya-cli
|
|
|
20
20
|
$ hereya COMMAND
|
|
21
21
|
running command...
|
|
22
22
|
$ hereya (--version)
|
|
23
|
-
hereya-cli/0.
|
|
23
|
+
hereya-cli/0.64.0 linux-x64 node-v24.13.0
|
|
24
24
|
$ hereya --help [COMMAND]
|
|
25
25
|
USAGE
|
|
26
26
|
$ hereya COMMAND
|
|
@@ -38,10 +38,12 @@ USAGE
|
|
|
38
38
|
* [`hereya delete-state`](#hereya-delete-state)
|
|
39
39
|
* [`hereya deploy`](#hereya-deploy)
|
|
40
40
|
* [`hereya doc PACKAGE`](#hereya-doc-package)
|
|
41
|
+
* [`hereya docker run IMAGE`](#hereya-docker-run-image)
|
|
41
42
|
* [`hereya down`](#hereya-down)
|
|
42
43
|
* [`hereya env [NAME]`](#hereya-env-name)
|
|
43
44
|
* [`hereya env set [NAME]`](#hereya-env-set-name)
|
|
44
45
|
* [`hereya flow add PACKAGE`](#hereya-flow-add-package)
|
|
46
|
+
* [`hereya flow docker run IMAGE`](#hereya-flow-docker-run-image)
|
|
45
47
|
* [`hereya flow down`](#hereya-flow-down)
|
|
46
48
|
* [`hereya flow env [NAME]`](#hereya-flow-env-name)
|
|
47
49
|
* [`hereya flow provid PACKAGE`](#hereya-flow-provid-package)
|
|
@@ -103,7 +105,7 @@ EXAMPLES
|
|
|
103
105
|
$ hereya add cloudy/docker_postgres
|
|
104
106
|
```
|
|
105
107
|
|
|
106
|
-
_See code: [src/commands/add/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
108
|
+
_See code: [src/commands/add/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/add/index.ts)_
|
|
107
109
|
|
|
108
110
|
## `hereya bootstrap INFRASTRUCTURETYPE`
|
|
109
111
|
|
|
@@ -128,7 +130,7 @@ EXAMPLES
|
|
|
128
130
|
$ hereya bootstrap local
|
|
129
131
|
```
|
|
130
132
|
|
|
131
|
-
_See code: [src/commands/bootstrap/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
133
|
+
_See code: [src/commands/bootstrap/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/bootstrap/index.ts)_
|
|
132
134
|
|
|
133
135
|
## `hereya config export-backend [FILE]`
|
|
134
136
|
|
|
@@ -150,7 +152,7 @@ EXAMPLES
|
|
|
150
152
|
$ hereya config export-backend ./path/to/export.json
|
|
151
153
|
```
|
|
152
154
|
|
|
153
|
-
_See code: [src/commands/config/export-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
155
|
+
_See code: [src/commands/config/export-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/config/export-backend/index.ts)_
|
|
154
156
|
|
|
155
157
|
## `hereya config get-backend`
|
|
156
158
|
|
|
@@ -167,7 +169,7 @@ EXAMPLES
|
|
|
167
169
|
$ hereya config get-backend
|
|
168
170
|
```
|
|
169
171
|
|
|
170
|
-
_See code: [src/commands/config/get-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
172
|
+
_See code: [src/commands/config/get-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/config/get-backend/index.ts)_
|
|
171
173
|
|
|
172
174
|
## `hereya config import-backend FILE`
|
|
173
175
|
|
|
@@ -187,7 +189,7 @@ EXAMPLES
|
|
|
187
189
|
$ hereya config import-backend ./path/to/cloud-backend.json
|
|
188
190
|
```
|
|
189
191
|
|
|
190
|
-
_See code: [src/commands/config/import-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
192
|
+
_See code: [src/commands/config/import-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/config/import-backend/index.ts)_
|
|
191
193
|
|
|
192
194
|
## `hereya config use-backend TYPE`
|
|
193
195
|
|
|
@@ -209,7 +211,7 @@ EXAMPLES
|
|
|
209
211
|
$ hereya config use-backend local
|
|
210
212
|
```
|
|
211
213
|
|
|
212
|
-
_See code: [src/commands/config/use-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
214
|
+
_See code: [src/commands/config/use-backend/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/config/use-backend/index.ts)_
|
|
213
215
|
|
|
214
216
|
## `hereya delete-state`
|
|
215
217
|
|
|
@@ -235,7 +237,7 @@ EXAMPLES
|
|
|
235
237
|
$ hereya delete-state --workspace staging
|
|
236
238
|
```
|
|
237
239
|
|
|
238
|
-
_See code: [src/commands/delete-state/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
240
|
+
_See code: [src/commands/delete-state/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/delete-state/index.ts)_
|
|
239
241
|
|
|
240
242
|
## `hereya deploy`
|
|
241
243
|
|
|
@@ -260,7 +262,7 @@ EXAMPLES
|
|
|
260
262
|
$ hereya deploy
|
|
261
263
|
```
|
|
262
264
|
|
|
263
|
-
_See code: [src/commands/deploy/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
265
|
+
_See code: [src/commands/deploy/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/deploy/index.ts)_
|
|
264
266
|
|
|
265
267
|
## `hereya doc PACKAGE`
|
|
266
268
|
|
|
@@ -293,7 +295,38 @@ EXAMPLES
|
|
|
293
295
|
$ hereya doc my-package --no-doc
|
|
294
296
|
```
|
|
295
297
|
|
|
296
|
-
_See code: [src/commands/doc/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
298
|
+
_See code: [src/commands/doc/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/doc/index.ts)_
|
|
299
|
+
|
|
300
|
+
## `hereya docker run IMAGE`
|
|
301
|
+
|
|
302
|
+
Run a Docker container with hereya env vars injected as -e flags.
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
USAGE
|
|
306
|
+
$ hereya docker run IMAGE... [--chdir <value>] [-p <value>] [-w <value>]
|
|
307
|
+
|
|
308
|
+
ARGUMENTS
|
|
309
|
+
IMAGE... Docker image to run
|
|
310
|
+
|
|
311
|
+
FLAGS
|
|
312
|
+
-p, --port=<value> [default: 8080] port to forward and set as PORT env var (default: 8080)
|
|
313
|
+
-w, --workspace=<value> name of the workspace to use
|
|
314
|
+
--chdir=<value> directory to run command in
|
|
315
|
+
|
|
316
|
+
DESCRIPTION
|
|
317
|
+
Run a Docker container with hereya env vars injected as -e flags.
|
|
318
|
+
|
|
319
|
+
EXAMPLES
|
|
320
|
+
$ hereya docker run myapp:latest
|
|
321
|
+
|
|
322
|
+
$ hereya docker run -w staging myapp:latest
|
|
323
|
+
|
|
324
|
+
$ hereya docker run -p 3000 myapp:latest
|
|
325
|
+
|
|
326
|
+
$ hereya docker run myapp:latest -- --rm -v ./data:/data
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
_See code: [src/commands/docker/run/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/docker/run/index.ts)_
|
|
297
330
|
|
|
298
331
|
## `hereya down`
|
|
299
332
|
|
|
@@ -320,7 +353,7 @@ EXAMPLES
|
|
|
320
353
|
$ hereya down
|
|
321
354
|
```
|
|
322
355
|
|
|
323
|
-
_See code: [src/commands/down/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
356
|
+
_See code: [src/commands/down/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/down/index.ts)_
|
|
324
357
|
|
|
325
358
|
## `hereya env [NAME]`
|
|
326
359
|
|
|
@@ -351,7 +384,7 @@ EXAMPLES
|
|
|
351
384
|
$ hereya env -w dev -l
|
|
352
385
|
```
|
|
353
386
|
|
|
354
|
-
_See code: [src/commands/env/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
387
|
+
_See code: [src/commands/env/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/env/index.ts)_
|
|
355
388
|
|
|
356
389
|
## `hereya env set [NAME]`
|
|
357
390
|
|
|
@@ -378,7 +411,7 @@ EXAMPLES
|
|
|
378
411
|
$ hereya env set FOO -v bar -w dev
|
|
379
412
|
```
|
|
380
413
|
|
|
381
|
-
_See code: [src/commands/env/set/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
414
|
+
_See code: [src/commands/env/set/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/env/set/index.ts)_
|
|
382
415
|
|
|
383
416
|
## `hereya flow add PACKAGE`
|
|
384
417
|
|
|
@@ -416,7 +449,37 @@ EXAMPLES
|
|
|
416
449
|
$ hereya flow add cloudy/docker_postgres -p DB_NAME=mydb -p DB_USER=admin
|
|
417
450
|
```
|
|
418
451
|
|
|
419
|
-
_See code: [src/commands/flow/add/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
452
|
+
_See code: [src/commands/flow/add/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/add/index.ts)_
|
|
453
|
+
|
|
454
|
+
## `hereya flow docker run IMAGE`
|
|
455
|
+
|
|
456
|
+
Run a Docker container with hereya env vars in a git branch-based workspace
|
|
457
|
+
|
|
458
|
+
```
|
|
459
|
+
USAGE
|
|
460
|
+
$ hereya flow docker run IMAGE... [--chdir <value>] [--pin] [-p <value>] [--profile <value>]
|
|
461
|
+
|
|
462
|
+
ARGUMENTS
|
|
463
|
+
IMAGE... Docker image to run
|
|
464
|
+
|
|
465
|
+
FLAGS
|
|
466
|
+
-p, --port=<value> [default: 8080] port to forward and set as PORT env var (default: 8080)
|
|
467
|
+
--chdir=<value> directory to run command in
|
|
468
|
+
--pin append git commit SHA to workspace name for commit-specific isolation
|
|
469
|
+
--profile=<value> profile to use for the workspace (will be appended to workspace name)
|
|
470
|
+
|
|
471
|
+
DESCRIPTION
|
|
472
|
+
Run a Docker container with hereya env vars in a git branch-based workspace
|
|
473
|
+
|
|
474
|
+
EXAMPLES
|
|
475
|
+
$ hereya flow docker run myapp:latest
|
|
476
|
+
|
|
477
|
+
$ hereya flow docker run --profile staging myapp:latest
|
|
478
|
+
|
|
479
|
+
$ hereya flow docker run --pin myapp:latest -- --rm
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
_See code: [src/commands/flow/docker/run/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/docker/run/index.ts)_
|
|
420
483
|
|
|
421
484
|
## `hereya flow down`
|
|
422
485
|
|
|
@@ -450,7 +513,7 @@ EXAMPLES
|
|
|
450
513
|
$ hereya flow down --pin
|
|
451
514
|
```
|
|
452
515
|
|
|
453
|
-
_See code: [src/commands/flow/down/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
516
|
+
_See code: [src/commands/flow/down/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/down/index.ts)_
|
|
454
517
|
|
|
455
518
|
## `hereya flow env [NAME]`
|
|
456
519
|
|
|
@@ -484,7 +547,7 @@ EXAMPLES
|
|
|
484
547
|
$ hereya flow env -l
|
|
485
548
|
```
|
|
486
549
|
|
|
487
|
-
_See code: [src/commands/flow/env/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
550
|
+
_See code: [src/commands/flow/env/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/env/index.ts)_
|
|
488
551
|
|
|
489
552
|
## `hereya flow provid PACKAGE`
|
|
490
553
|
|
|
@@ -513,7 +576,7 @@ EXAMPLES
|
|
|
513
576
|
$ hereya flow provid hereya/postgres --pin
|
|
514
577
|
```
|
|
515
578
|
|
|
516
|
-
_See code: [src/commands/flow/provid/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
579
|
+
_See code: [src/commands/flow/provid/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/provid/index.ts)_
|
|
517
580
|
|
|
518
581
|
## `hereya flow remove PACKAGE`
|
|
519
582
|
|
|
@@ -543,7 +606,7 @@ EXAMPLES
|
|
|
543
606
|
$ hereya flow remove cloudy/docker_postgres --profile staging
|
|
544
607
|
```
|
|
545
608
|
|
|
546
|
-
_See code: [src/commands/flow/remove/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
609
|
+
_See code: [src/commands/flow/remove/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/remove/index.ts)_
|
|
547
610
|
|
|
548
611
|
## `hereya flow run CMD`
|
|
549
612
|
|
|
@@ -572,7 +635,7 @@ EXAMPLES
|
|
|
572
635
|
$ hereya flow run --pin -- npm test
|
|
573
636
|
```
|
|
574
637
|
|
|
575
|
-
_See code: [src/commands/flow/run/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
638
|
+
_See code: [src/commands/flow/run/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/run/index.ts)_
|
|
576
639
|
|
|
577
640
|
## `hereya flow up`
|
|
578
641
|
|
|
@@ -606,7 +669,7 @@ EXAMPLES
|
|
|
606
669
|
$ hereya flow up --pin
|
|
607
670
|
```
|
|
608
671
|
|
|
609
|
-
_See code: [src/commands/flow/up/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
672
|
+
_See code: [src/commands/flow/up/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/flow/up/index.ts)_
|
|
610
673
|
|
|
611
674
|
## `hereya help [COMMAND]`
|
|
612
675
|
|
|
@@ -663,7 +726,7 @@ EXAMPLES
|
|
|
663
726
|
$ hereya import org/my-package -f state.tfstate -w my-workspace
|
|
664
727
|
```
|
|
665
728
|
|
|
666
|
-
_See code: [src/commands/import/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
729
|
+
_See code: [src/commands/import/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/import/index.ts)_
|
|
667
730
|
|
|
668
731
|
## `hereya init PROJECT`
|
|
669
732
|
|
|
@@ -689,7 +752,7 @@ EXAMPLES
|
|
|
689
752
|
$ hereya init myProject -w=defaultWorkspace --chdir=./myProject
|
|
690
753
|
```
|
|
691
754
|
|
|
692
|
-
_See code: [src/commands/init/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
755
|
+
_See code: [src/commands/init/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/init/index.ts)_
|
|
693
756
|
|
|
694
757
|
## `hereya login [URL]`
|
|
695
758
|
|
|
@@ -718,7 +781,7 @@ EXAMPLES
|
|
|
718
781
|
$ hereya login --token=your-token https://cloud.hereya.dev
|
|
719
782
|
```
|
|
720
783
|
|
|
721
|
-
_See code: [src/commands/login/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
784
|
+
_See code: [src/commands/login/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/login/index.ts)_
|
|
722
785
|
|
|
723
786
|
## `hereya logout`
|
|
724
787
|
|
|
@@ -735,7 +798,7 @@ EXAMPLES
|
|
|
735
798
|
$ hereya logout
|
|
736
799
|
```
|
|
737
800
|
|
|
738
|
-
_See code: [src/commands/logout/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
801
|
+
_See code: [src/commands/logout/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/logout/index.ts)_
|
|
739
802
|
|
|
740
803
|
## `hereya provid PACKAGE`
|
|
741
804
|
|
|
@@ -763,7 +826,7 @@ EXAMPLES
|
|
|
763
826
|
$ hereya provid hereya/postgres --workspace staging
|
|
764
827
|
```
|
|
765
828
|
|
|
766
|
-
_See code: [src/commands/provid/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
829
|
+
_See code: [src/commands/provid/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/provid/index.ts)_
|
|
767
830
|
|
|
768
831
|
## `hereya publish`
|
|
769
832
|
|
|
@@ -786,7 +849,7 @@ EXAMPLES
|
|
|
786
849
|
$ hereya publish --chdir=/path/to/package
|
|
787
850
|
```
|
|
788
851
|
|
|
789
|
-
_See code: [src/commands/publish/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
852
|
+
_See code: [src/commands/publish/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/publish/index.ts)_
|
|
790
853
|
|
|
791
854
|
## `hereya remove PACKAGE`
|
|
792
855
|
|
|
@@ -814,7 +877,7 @@ EXAMPLES
|
|
|
814
877
|
$ hereya remove cloudy/docker_postgres
|
|
815
878
|
```
|
|
816
879
|
|
|
817
|
-
_See code: [src/commands/remove/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
880
|
+
_See code: [src/commands/remove/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/remove/index.ts)_
|
|
818
881
|
|
|
819
882
|
## `hereya run CMD`
|
|
820
883
|
|
|
@@ -840,7 +903,7 @@ EXAMPLES
|
|
|
840
903
|
$ hereya run -w uat -- node index.js
|
|
841
904
|
```
|
|
842
905
|
|
|
843
|
-
_See code: [src/commands/run/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
906
|
+
_See code: [src/commands/run/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/run/index.ts)_
|
|
844
907
|
|
|
845
908
|
## `hereya search QUERY`
|
|
846
909
|
|
|
@@ -871,7 +934,7 @@ EXAMPLES
|
|
|
871
934
|
$ hereya search database --json
|
|
872
935
|
```
|
|
873
936
|
|
|
874
|
-
_See code: [src/commands/search/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
937
|
+
_See code: [src/commands/search/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/search/index.ts)_
|
|
875
938
|
|
|
876
939
|
## `hereya unbootstrap INFRASTRUCTURETYPE`
|
|
877
940
|
|
|
@@ -896,7 +959,7 @@ EXAMPLES
|
|
|
896
959
|
$ hereya unbootstrap local
|
|
897
960
|
```
|
|
898
961
|
|
|
899
|
-
_See code: [src/commands/unbootstrap/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
962
|
+
_See code: [src/commands/unbootstrap/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/unbootstrap/index.ts)_
|
|
900
963
|
|
|
901
964
|
## `hereya undeploy`
|
|
902
965
|
|
|
@@ -921,7 +984,7 @@ EXAMPLES
|
|
|
921
984
|
$ hereya undeploy
|
|
922
985
|
```
|
|
923
986
|
|
|
924
|
-
_See code: [src/commands/undeploy/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
987
|
+
_See code: [src/commands/undeploy/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/undeploy/index.ts)_
|
|
925
988
|
|
|
926
989
|
## `hereya up`
|
|
927
990
|
|
|
@@ -948,7 +1011,7 @@ EXAMPLES
|
|
|
948
1011
|
$ hereya up
|
|
949
1012
|
```
|
|
950
1013
|
|
|
951
|
-
_See code: [src/commands/up/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1014
|
+
_See code: [src/commands/up/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/up/index.ts)_
|
|
952
1015
|
|
|
953
1016
|
## `hereya workspace create NAME`
|
|
954
1017
|
|
|
@@ -973,7 +1036,7 @@ EXAMPLES
|
|
|
973
1036
|
$ hereya workspace create dev
|
|
974
1037
|
```
|
|
975
1038
|
|
|
976
|
-
_See code: [src/commands/workspace/create/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1039
|
+
_See code: [src/commands/workspace/create/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/create/index.ts)_
|
|
977
1040
|
|
|
978
1041
|
## `hereya workspace delete NAME`
|
|
979
1042
|
|
|
@@ -993,7 +1056,7 @@ EXAMPLES
|
|
|
993
1056
|
$ hereya workspace delete dev
|
|
994
1057
|
```
|
|
995
1058
|
|
|
996
|
-
_See code: [src/commands/workspace/delete/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1059
|
+
_See code: [src/commands/workspace/delete/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/delete/index.ts)_
|
|
997
1060
|
|
|
998
1061
|
## `hereya workspace env [NAME]`
|
|
999
1062
|
|
|
@@ -1019,7 +1082,7 @@ EXAMPLES
|
|
|
1019
1082
|
$ hereya workspace env myEnv -w dev
|
|
1020
1083
|
```
|
|
1021
1084
|
|
|
1022
|
-
_See code: [src/commands/workspace/env/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1085
|
+
_See code: [src/commands/workspace/env/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/env/index.ts)_
|
|
1023
1086
|
|
|
1024
1087
|
## `hereya workspace env set`
|
|
1025
1088
|
|
|
@@ -1043,7 +1106,7 @@ EXAMPLES
|
|
|
1043
1106
|
$ hereya workspace env set -w my-workspace -n myVar -v my-value -i aws -s
|
|
1044
1107
|
```
|
|
1045
1108
|
|
|
1046
|
-
_See code: [src/commands/workspace/env/set/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1109
|
+
_See code: [src/commands/workspace/env/set/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/env/set/index.ts)_
|
|
1047
1110
|
|
|
1048
1111
|
## `hereya workspace env unset`
|
|
1049
1112
|
|
|
@@ -1064,7 +1127,7 @@ EXAMPLES
|
|
|
1064
1127
|
$ hereya workspace env unset -w my-workspace -n myVar
|
|
1065
1128
|
```
|
|
1066
1129
|
|
|
1067
|
-
_See code: [src/commands/workspace/env/unset/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1130
|
+
_See code: [src/commands/workspace/env/unset/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/env/unset/index.ts)_
|
|
1068
1131
|
|
|
1069
1132
|
## `hereya workspace install PACKAGE`
|
|
1070
1133
|
|
|
@@ -1091,7 +1154,7 @@ EXAMPLES
|
|
|
1091
1154
|
$ hereya workspace install hereya/aws-cognito
|
|
1092
1155
|
```
|
|
1093
1156
|
|
|
1094
|
-
_See code: [src/commands/workspace/install/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1157
|
+
_See code: [src/commands/workspace/install/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/install/index.ts)_
|
|
1095
1158
|
|
|
1096
1159
|
## `hereya workspace list`
|
|
1097
1160
|
|
|
@@ -1099,16 +1162,23 @@ List workspaces.
|
|
|
1099
1162
|
|
|
1100
1163
|
```
|
|
1101
1164
|
USAGE
|
|
1102
|
-
$ hereya workspace list
|
|
1165
|
+
$ hereya workspace list [-o <value>]
|
|
1166
|
+
|
|
1167
|
+
FLAGS
|
|
1168
|
+
-o, --org=<value> Filter workspaces by organization name. Use "personal" to show only your personal workspaces.
|
|
1103
1169
|
|
|
1104
1170
|
DESCRIPTION
|
|
1105
1171
|
List workspaces.
|
|
1106
1172
|
|
|
1107
1173
|
EXAMPLES
|
|
1108
1174
|
$ hereya workspace list
|
|
1175
|
+
|
|
1176
|
+
$ hereya workspace list --org my-org
|
|
1177
|
+
|
|
1178
|
+
$ hereya workspace list --org personal
|
|
1109
1179
|
```
|
|
1110
1180
|
|
|
1111
|
-
_See code: [src/commands/workspace/list/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1181
|
+
_See code: [src/commands/workspace/list/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/list/index.ts)_
|
|
1112
1182
|
|
|
1113
1183
|
## `hereya workspace set-profile PROFILE`
|
|
1114
1184
|
|
|
@@ -1132,7 +1202,7 @@ EXAMPLES
|
|
|
1132
1202
|
$ hereya workspace set-profile prod-profile -w production
|
|
1133
1203
|
```
|
|
1134
1204
|
|
|
1135
|
-
_See code: [src/commands/workspace/set-profile/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1205
|
+
_See code: [src/commands/workspace/set-profile/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/set-profile/index.ts)_
|
|
1136
1206
|
|
|
1137
1207
|
## `hereya workspace uninstall PACKAGE`
|
|
1138
1208
|
|
|
@@ -1159,5 +1229,5 @@ EXAMPLES
|
|
|
1159
1229
|
$ hereya workspace uninstall hereya/aws-cognito
|
|
1160
1230
|
```
|
|
1161
1231
|
|
|
1162
|
-
_See code: [src/commands/workspace/uninstall/index.ts](https://github.com/hereya/hereya-cli/blob/v0.
|
|
1232
|
+
_See code: [src/commands/workspace/uninstall/index.ts](https://github.com/hereya/hereya-cli/blob/v0.64.0/src/commands/workspace/uninstall/index.ts)_
|
|
1163
1233
|
<!-- commandsstop -->
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Config } from '../../lib/config/common.js';
|
|
2
|
-
import { AddPackageToWorkspaceInput, AddPackageToWorkspaceOutput, Backend, CreateWorkspaceInput, CreateWorkspaceOutput, DeleteStateInput, DeleteStateOutput, DeleteWorkspaceInput, DeleteWorkspaceOutput, ExportBackendOutput, GetPackageOutput, GetProvisioningIdInput, GetProvisioningIdOutput, GetStateInput, GetStateOutput, GetWorkspaceEnvInput, GetWorkspaceEnvOutput, GetWorkspaceOutput, ImportBackendInput, ImportBackendOutput, InitProjectInput, InitProjectOutput, ListPackageVersionsOutput, PublishPackageInput, PublishPackageOutput, RemovePackageFromWorkspaceInput, RemovePackageFromWorkspaceOutput, SearchPackagesInput, SearchPackagesOutput, SetEnvVarInput, SetEnvVarOutput, UnsetEnvVarInput, UnsetEnvVarOutput, UpdateWorkspaceInput, UpdateWorkspaceOutput } from '../common.js';
|
|
2
|
+
import { AddPackageToWorkspaceInput, AddPackageToWorkspaceOutput, Backend, CreateWorkspaceInput, CreateWorkspaceOutput, DeleteStateInput, DeleteStateOutput, DeleteWorkspaceInput, DeleteWorkspaceOutput, ExportBackendOutput, GetPackageOutput, GetProvisioningIdInput, GetProvisioningIdOutput, GetStateInput, GetStateOutput, GetWorkspaceEnvInput, GetWorkspaceEnvOutput, GetWorkspaceOutput, ImportBackendInput, ImportBackendOutput, InitProjectInput, InitProjectOutput, ListPackageVersionsOutput, ListWorkspacesInput, PublishPackageInput, PublishPackageOutput, RemovePackageFromWorkspaceInput, RemovePackageFromWorkspaceOutput, SearchPackagesInput, SearchPackagesOutput, SetEnvVarInput, SetEnvVarOutput, UnsetEnvVarInput, UnsetEnvVarOutput, UpdateWorkspaceInput, UpdateWorkspaceOutput } from '../common.js';
|
|
3
3
|
interface CloudBackendConfig {
|
|
4
4
|
accessToken: string;
|
|
5
5
|
clientId: string;
|
|
@@ -23,7 +23,7 @@ export declare class CloudBackend implements Backend {
|
|
|
23
23
|
importBackend(input: ImportBackendInput): Promise<ImportBackendOutput>;
|
|
24
24
|
init(input: InitProjectInput): Promise<InitProjectOutput>;
|
|
25
25
|
listPackageVersions(name: string): Promise<ListPackageVersionsOutput>;
|
|
26
|
-
listWorkspaces(): Promise<string[]>;
|
|
26
|
+
listWorkspaces(input?: ListWorkspacesInput): Promise<string[]>;
|
|
27
27
|
publishPackage(input: PublishPackageInput): Promise<PublishPackageOutput>;
|
|
28
28
|
removePackageFromWorkspace(input: RemovePackageFromWorkspaceInput): Promise<RemovePackageFromWorkspaceOutput>;
|
|
29
29
|
saveState(config: Config, workspace?: string): Promise<void>;
|
|
@@ -391,8 +391,12 @@ export class CloudBackend {
|
|
|
391
391
|
success: true,
|
|
392
392
|
};
|
|
393
393
|
}
|
|
394
|
-
async listWorkspaces() {
|
|
395
|
-
const
|
|
394
|
+
async listWorkspaces(input) {
|
|
395
|
+
const url = new URL(`${this.config.url}/api/workspaces`);
|
|
396
|
+
if (input?.org) {
|
|
397
|
+
url.searchParams.set('org', input.org);
|
|
398
|
+
}
|
|
399
|
+
const response = await fetch(url.toString(), {
|
|
396
400
|
headers: {
|
|
397
401
|
'Authorization': `Bearer ${this.config.accessToken}`,
|
|
398
402
|
},
|
package/dist/backend/common.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface Backend {
|
|
|
16
16
|
importBackend(input: ImportBackendInput): Promise<ImportBackendOutput>;
|
|
17
17
|
init(options: InitProjectInput): Promise<InitProjectOutput>;
|
|
18
18
|
listPackageVersions?(name: string): Promise<ListPackageVersionsOutput>;
|
|
19
|
-
listWorkspaces(): Promise<string[]>;
|
|
19
|
+
listWorkspaces(input?: ListWorkspacesInput): Promise<string[]>;
|
|
20
20
|
publishPackage?(input: PublishPackageInput): Promise<PublishPackageOutput>;
|
|
21
21
|
removePackageFromWorkspace(input: RemovePackageFromWorkspaceInput): Promise<RemovePackageFromWorkspaceOutput>;
|
|
22
22
|
saveState(config: Config, workspace?: string): Promise<void>;
|
|
@@ -290,6 +290,9 @@ export type ListPackageVersionsOutput = {
|
|
|
290
290
|
reason: string;
|
|
291
291
|
success: false;
|
|
292
292
|
};
|
|
293
|
+
export type ListWorkspacesInput = {
|
|
294
|
+
org?: string;
|
|
295
|
+
};
|
|
293
296
|
export type SearchPackagesInput = {
|
|
294
297
|
limit?: number;
|
|
295
298
|
offset?: number;
|
package/dist/backend/file.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Config } from '../lib/config/common.js';
|
|
2
|
-
import { AddPackageToWorkspaceInput, AddPackageToWorkspaceOutput, Backend, CreateWorkspaceInput, CreateWorkspaceOutput, DeleteStateInput, DeleteStateOutput, DeleteWorkspaceInput, DeleteWorkspaceOutput, ExportBackendOutput, GetPackageOutput, GetProvisioningIdInput, GetProvisioningIdOutput, GetStateInput, GetStateOutput, GetWorkspaceEnvInput, GetWorkspaceEnvOutput, GetWorkspaceOutput, ImportBackendInput, ImportBackendOutput, InitProjectInput, InitProjectOutput, ListPackageVersionsOutput, PublishPackageInput, PublishPackageOutput, RemovePackageFromWorkspaceInput, RemovePackageFromWorkspaceOutput, SetEnvVarInput, SetEnvVarOutput, UnsetEnvVarInput, UnsetEnvVarOutput, UpdateWorkspaceInput, UpdateWorkspaceOutput } from './common.js';
|
|
2
|
+
import { AddPackageToWorkspaceInput, AddPackageToWorkspaceOutput, Backend, CreateWorkspaceInput, CreateWorkspaceOutput, DeleteStateInput, DeleteStateOutput, DeleteWorkspaceInput, DeleteWorkspaceOutput, ExportBackendOutput, GetPackageOutput, GetProvisioningIdInput, GetProvisioningIdOutput, GetStateInput, GetStateOutput, GetWorkspaceEnvInput, GetWorkspaceEnvOutput, GetWorkspaceOutput, ImportBackendInput, ImportBackendOutput, InitProjectInput, InitProjectOutput, ListPackageVersionsOutput, ListWorkspacesInput, PublishPackageInput, PublishPackageOutput, RemovePackageFromWorkspaceInput, RemovePackageFromWorkspaceOutput, SetEnvVarInput, SetEnvVarOutput, UnsetEnvVarInput, UnsetEnvVarOutput, UpdateWorkspaceInput, UpdateWorkspaceOutput } from './common.js';
|
|
3
3
|
import { FileStorage } from './file-storage/common.js';
|
|
4
4
|
export declare class FileBackend implements Backend {
|
|
5
5
|
private readonly fileStorage;
|
|
@@ -18,7 +18,7 @@ export declare class FileBackend implements Backend {
|
|
|
18
18
|
importBackend(_: ImportBackendInput): Promise<ImportBackendOutput>;
|
|
19
19
|
init(options: InitProjectInput): Promise<InitProjectOutput>;
|
|
20
20
|
listPackageVersions(_: string): Promise<ListPackageVersionsOutput>;
|
|
21
|
-
listWorkspaces(): Promise<string[]>;
|
|
21
|
+
listWorkspaces(_input?: ListWorkspacesInput): Promise<string[]>;
|
|
22
22
|
publishPackage(_: PublishPackageInput): Promise<PublishPackageOutput>;
|
|
23
23
|
removePackageFromWorkspace(input: RemovePackageFromWorkspaceInput): Promise<RemovePackageFromWorkspaceOutput>;
|
|
24
24
|
saveState(config: Config, workspace?: string): Promise<void>;
|
package/dist/backend/file.js
CHANGED
|
@@ -349,7 +349,7 @@ export class FileBackend {
|
|
|
349
349
|
success: false,
|
|
350
350
|
};
|
|
351
351
|
}
|
|
352
|
-
async listWorkspaces() {
|
|
352
|
+
async listWorkspaces(_input) {
|
|
353
353
|
const workspaces$ = await this.fileStorage.listFileNames({ directory: 'state/workspaces' });
|
|
354
354
|
if (workspaces$.success) {
|
|
355
355
|
return workspaces$.files
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class DockerRun extends Command {
|
|
3
|
+
static args: {
|
|
4
|
+
image: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
chdir: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
port: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
};
|
|
13
|
+
static strict: boolean;
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import spawn from 'cross-spawn';
|
|
3
|
+
import { getBackend } from '../../../backend/index.js';
|
|
4
|
+
import { ensureDockerNetwork } from '../../../infrastructure/local.js';
|
|
5
|
+
import { getConfigManager } from '../../../lib/config/index.js';
|
|
6
|
+
import { getEnvManager } from '../../../lib/env/index.js';
|
|
7
|
+
import { getProfileFromWorkspace } from '../../../lib/profile-utils.js';
|
|
8
|
+
import { runShell } from '../../../lib/shell.js';
|
|
9
|
+
import { validateDevelopmentWorkspace } from '../../../lib/workspace-validation.js';
|
|
10
|
+
export default class DockerRun extends Command {
|
|
11
|
+
static args = {
|
|
12
|
+
image: Args.string({ description: 'Docker image to run', required: true }),
|
|
13
|
+
};
|
|
14
|
+
static description = 'Run a Docker container with hereya env vars injected as -e flags.';
|
|
15
|
+
static examples = [
|
|
16
|
+
'<%= config.bin %> <%= command.id %> myapp:latest',
|
|
17
|
+
'<%= config.bin %> <%= command.id %> -w staging myapp:latest',
|
|
18
|
+
'<%= config.bin %> <%= command.id %> -p 3000 myapp:latest',
|
|
19
|
+
'<%= config.bin %> <%= command.id %> myapp:latest -- --rm -v ./data:/data',
|
|
20
|
+
];
|
|
21
|
+
static flags = {
|
|
22
|
+
chdir: Flags.string({
|
|
23
|
+
description: 'directory to run command in',
|
|
24
|
+
required: false,
|
|
25
|
+
}),
|
|
26
|
+
port: Flags.integer({
|
|
27
|
+
char: 'p',
|
|
28
|
+
default: 8080,
|
|
29
|
+
description: 'port to forward and set as PORT env var (default: 8080)',
|
|
30
|
+
required: false,
|
|
31
|
+
}),
|
|
32
|
+
workspace: Flags.string({
|
|
33
|
+
char: 'w',
|
|
34
|
+
description: 'name of the workspace to use',
|
|
35
|
+
required: false,
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
static strict = false;
|
|
39
|
+
async run() {
|
|
40
|
+
const { args, argv, flags } = await this.parse(DockerRun);
|
|
41
|
+
const projectRootDir = flags.chdir || process.env.HEREYA_PROJECT_ROOT_DIR;
|
|
42
|
+
const configManager = getConfigManager();
|
|
43
|
+
const loadConfigOutput = await configManager.loadConfig({ projectRootDir });
|
|
44
|
+
if (!loadConfigOutput.found) {
|
|
45
|
+
this.warn(`Project not initialized. Run 'hereya init' first.`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const { config } = loadConfigOutput;
|
|
49
|
+
let { workspace } = flags;
|
|
50
|
+
if (!workspace) {
|
|
51
|
+
workspace = config.workspace;
|
|
52
|
+
}
|
|
53
|
+
if (!workspace) {
|
|
54
|
+
this.error('you must specify a workspace to run the command in');
|
|
55
|
+
}
|
|
56
|
+
const backend = await getBackend();
|
|
57
|
+
const validation = await validateDevelopmentWorkspace(workspace, backend, 'docker run', config.project);
|
|
58
|
+
if (!validation.isValid) {
|
|
59
|
+
this.error(validation.message);
|
|
60
|
+
}
|
|
61
|
+
const profile = await getProfileFromWorkspace(backend, workspace, config.project);
|
|
62
|
+
const envManager = getEnvManager();
|
|
63
|
+
const getProjectEnvOutput = await envManager.getProjectEnv({
|
|
64
|
+
profile,
|
|
65
|
+
projectRootDir,
|
|
66
|
+
workspace,
|
|
67
|
+
});
|
|
68
|
+
if (!getProjectEnvOutput.success) {
|
|
69
|
+
this.error(getProjectEnvOutput.reason);
|
|
70
|
+
}
|
|
71
|
+
const { env } = getProjectEnvOutput;
|
|
72
|
+
// Apply HEREYA_DOCKER_ overrides: strip prefix and override the base key
|
|
73
|
+
const dockerPrefix = 'HEREYA_DOCKER_';
|
|
74
|
+
for (const key of Object.keys(env)) {
|
|
75
|
+
if (key.startsWith(dockerPrefix)) {
|
|
76
|
+
const targetKey = key.slice(dockerPrefix.length);
|
|
77
|
+
env[targetKey] = env[key];
|
|
78
|
+
delete env[key];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Determine port: existing PORT from env takes precedence, otherwise use --port flag
|
|
82
|
+
const port = env.PORT || String(flags.port);
|
|
83
|
+
env.PORT = port;
|
|
84
|
+
const { image } = args;
|
|
85
|
+
// Build -e flags from env
|
|
86
|
+
const envFlags = [];
|
|
87
|
+
for (const [key, value] of Object.entries(env)) {
|
|
88
|
+
envFlags.push('-e', `${key}=${value}`);
|
|
89
|
+
}
|
|
90
|
+
// Extra args after -- go before the image as docker run flags
|
|
91
|
+
const extraArgs = argv.slice(1);
|
|
92
|
+
// Ensure hereya docker network exists and attach container to it
|
|
93
|
+
const networkName = await ensureDockerNetwork(runShell);
|
|
94
|
+
// docker run --network <net> -p <port>:<port> [extraArgs] -e K=V ... <image>
|
|
95
|
+
const dockerArgs = ['--network', networkName, '-p', `${port}:${port}`, ...extraArgs, ...envFlags, image];
|
|
96
|
+
this.log(`Running docker container "${image}" with ${Object.keys(env).length} env var(s) on port ${port}...`);
|
|
97
|
+
// Use spawn directly without shell to avoid special characters in env values
|
|
98
|
+
// being interpreted by /bin/sh (e.g. parentheses, brackets, semicolons)
|
|
99
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
100
|
+
const child = spawn('docker', ['run', ...dockerArgs], {
|
|
101
|
+
cwd: projectRootDir,
|
|
102
|
+
stdio: 'inherit',
|
|
103
|
+
});
|
|
104
|
+
child.on('error', reject);
|
|
105
|
+
child.on('close', (code) => resolve(code));
|
|
106
|
+
});
|
|
107
|
+
if (exitCode !== 0) {
|
|
108
|
+
this.error(`Docker run failed with exit code ${exitCode}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class FlowDockerRun extends Command {
|
|
3
|
+
static args: {
|
|
4
|
+
image: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static flags: {
|
|
9
|
+
chdir: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
pin: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
port: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
static strict: boolean;
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
|
+
import { getBackend } from '../../../../backend/index.js';
|
|
3
|
+
import { getConfigManager } from '../../../../lib/config/index.js';
|
|
4
|
+
import { buildFlowWorkspaceName } from '../../../../lib/flow-utils.js';
|
|
5
|
+
import { validateFlowCommand } from '../../../../lib/workspace-validation.js';
|
|
6
|
+
import DockerRun from '../../../docker/run/index.js';
|
|
7
|
+
export default class FlowDockerRun extends Command {
|
|
8
|
+
static args = {
|
|
9
|
+
image: Args.string({ description: 'Docker image to run', required: true }),
|
|
10
|
+
};
|
|
11
|
+
static description = 'Run a Docker container with hereya env vars in a git branch-based workspace';
|
|
12
|
+
static examples = [
|
|
13
|
+
'<%= config.bin %> <%= command.id %> myapp:latest',
|
|
14
|
+
'<%= config.bin %> <%= command.id %> --profile staging myapp:latest',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> --pin myapp:latest -- --rm',
|
|
16
|
+
];
|
|
17
|
+
static flags = {
|
|
18
|
+
chdir: Flags.string({
|
|
19
|
+
description: 'directory to run command in',
|
|
20
|
+
required: false,
|
|
21
|
+
}),
|
|
22
|
+
pin: Flags.boolean({
|
|
23
|
+
description: 'append git commit SHA to workspace name for commit-specific isolation',
|
|
24
|
+
required: false,
|
|
25
|
+
}),
|
|
26
|
+
port: Flags.integer({
|
|
27
|
+
char: 'p',
|
|
28
|
+
default: 8080,
|
|
29
|
+
description: 'port to forward and set as PORT env var (default: 8080)',
|
|
30
|
+
required: false,
|
|
31
|
+
}),
|
|
32
|
+
profile: Flags.string({
|
|
33
|
+
description: 'profile to use for the workspace (will be appended to workspace name)',
|
|
34
|
+
required: false,
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
static strict = false;
|
|
38
|
+
async run() {
|
|
39
|
+
const { argv, flags } = await this.parse(FlowDockerRun);
|
|
40
|
+
const projectRootDir = flags.chdir || process.env.HEREYA_PROJECT_ROOT_DIR;
|
|
41
|
+
const configManager = getConfigManager();
|
|
42
|
+
const loadConfigOutput = await configManager.loadConfig({ projectRootDir });
|
|
43
|
+
if (!loadConfigOutput.found) {
|
|
44
|
+
this.error("Project not initialized. Run 'hereya init' first.");
|
|
45
|
+
}
|
|
46
|
+
const workspaceName = await buildFlowWorkspaceName({
|
|
47
|
+
pin: flags.pin,
|
|
48
|
+
profile: flags.profile,
|
|
49
|
+
project: loadConfigOutput.config.project,
|
|
50
|
+
projectRootDir,
|
|
51
|
+
});
|
|
52
|
+
const backend = await getBackend();
|
|
53
|
+
const validation = await validateFlowCommand(workspaceName, backend);
|
|
54
|
+
if (!validation.isValid) {
|
|
55
|
+
this.error(validation.message);
|
|
56
|
+
}
|
|
57
|
+
const dockerRunArgs = ['--workspace', workspaceName];
|
|
58
|
+
if (flags.chdir)
|
|
59
|
+
dockerRunArgs.push('--chdir', flags.chdir);
|
|
60
|
+
if (flags.port !== 8080)
|
|
61
|
+
dockerRunArgs.push('--port', String(flags.port));
|
|
62
|
+
// Add all arguments (image and extra args after --)
|
|
63
|
+
const allArgs = argv;
|
|
64
|
+
dockerRunArgs.push('--', ...allArgs);
|
|
65
|
+
await DockerRun.run(dockerRunArgs);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -2,5 +2,8 @@ import { Command } from '@oclif/core';
|
|
|
2
2
|
export default class WorkspaceList extends Command {
|
|
3
3
|
static description: string;
|
|
4
4
|
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
org: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
};
|
|
5
8
|
run(): Promise<void>;
|
|
6
9
|
}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
|
-
import { Command } from '@oclif/core';
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
2
|
import { getBackend } from '../../../backend/index.js';
|
|
3
3
|
export default class WorkspaceList extends Command {
|
|
4
4
|
static description = 'List workspaces.';
|
|
5
|
-
static examples = [
|
|
5
|
+
static examples = [
|
|
6
|
+
'<%= config.bin %> <%= command.id %>',
|
|
7
|
+
'<%= config.bin %> <%= command.id %> --org my-org',
|
|
8
|
+
'<%= config.bin %> <%= command.id %> --org personal',
|
|
9
|
+
];
|
|
10
|
+
static flags = {
|
|
11
|
+
org: Flags.string({
|
|
12
|
+
char: 'o',
|
|
13
|
+
description: 'Filter workspaces by organization name. Use "personal" to show only your personal workspaces.',
|
|
14
|
+
required: false,
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
6
17
|
async run() {
|
|
7
|
-
await this.parse(WorkspaceList);
|
|
18
|
+
const { flags } = await this.parse(WorkspaceList);
|
|
8
19
|
try {
|
|
9
20
|
const backend = await getBackend();
|
|
10
|
-
const workspaceNames = await backend.listWorkspaces();
|
|
21
|
+
const workspaceNames = await backend.listWorkspaces(flags.org ? { org: flags.org } : undefined);
|
|
11
22
|
// If no workspaces, show a message
|
|
12
23
|
if (workspaceNames.length === 0) {
|
|
13
24
|
this.log('No workspaces found.');
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Logger } from '../lib/log.js';
|
|
2
|
+
import { runShell } from '../lib/shell.js';
|
|
1
3
|
import { DeployInput, DeployOutput, Infrastructure, ProvisionInput, ProvisionOutput, SaveEnvInput, SaveEnvOutput, StoreEnvInput, StoreEnvOutput, UndeployInput, UndeployOutput, UnstoreEnvInput, UnstoreEnvOutput, UploadStateFileInput, UploadStateFileOutput } from './common.js';
|
|
2
4
|
export declare class LocalInfrastructure implements Infrastructure {
|
|
3
5
|
bootstrap(): Promise<void>;
|
|
@@ -15,4 +17,6 @@ export declare class LocalInfrastructure implements Infrastructure {
|
|
|
15
17
|
undeploy(input: UndeployInput): Promise<UndeployOutput>;
|
|
16
18
|
unstoreEnv(_: UnstoreEnvInput): Promise<UnstoreEnvOutput>;
|
|
17
19
|
uploadStateFile(_: UploadStateFileInput): Promise<UploadStateFileOutput>;
|
|
20
|
+
private ensureDockerNetwork;
|
|
18
21
|
}
|
|
22
|
+
export declare function ensureDockerNetwork(shellFn: typeof runShell, logger?: Logger): Promise<string>;
|
|
@@ -3,6 +3,7 @@ import os from 'node:os';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { getIac } from '../iac/index.js';
|
|
5
5
|
import { downloadPackage } from '../lib/package/index.js';
|
|
6
|
+
import { runShell } from '../lib/shell.js';
|
|
6
7
|
import { getPackageDownloadPath, } from './common.js';
|
|
7
8
|
export class LocalInfrastructure {
|
|
8
9
|
async bootstrap() {
|
|
@@ -17,6 +18,8 @@ export class LocalInfrastructure {
|
|
|
17
18
|
return this.provision(input);
|
|
18
19
|
}
|
|
19
20
|
async destroy(input) {
|
|
21
|
+
const networkName = process.env.HEREYA_DOCKER_NETWORK || 'hereya-docker-network';
|
|
22
|
+
input.parameters = { ...input.parameters, hereyaDockerNetwork: networkName };
|
|
20
23
|
const destPath = await getPackageDownloadPath({ id: input.id, version: input.version });
|
|
21
24
|
const downloadPath = await downloadPackage(input.pkgUrl, destPath);
|
|
22
25
|
const iac$ = getIac({ type: input.iacType });
|
|
@@ -42,6 +45,8 @@ export class LocalInfrastructure {
|
|
|
42
45
|
return { env: output.env, success: true };
|
|
43
46
|
}
|
|
44
47
|
async provision(input) {
|
|
48
|
+
const hereyaDockerNetwork = await this.ensureDockerNetwork(input.logger);
|
|
49
|
+
input.parameters = { ...input.parameters, hereyaDockerNetwork };
|
|
45
50
|
const destPath = await getPackageDownloadPath({ id: input.id, version: input.version });
|
|
46
51
|
const downloadPath = await downloadPackage(input.pkgUrl, destPath);
|
|
47
52
|
const iac$ = getIac({ type: input.iacType });
|
|
@@ -91,4 +96,23 @@ export class LocalInfrastructure {
|
|
|
91
96
|
uploadStateFile(_) {
|
|
92
97
|
throw new Error(`Uploading state file is not supported for local infrastructure`);
|
|
93
98
|
}
|
|
99
|
+
async ensureDockerNetwork(logger) {
|
|
100
|
+
return ensureDockerNetwork(runShell, logger);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export async function ensureDockerNetwork(shellFn, logger) {
|
|
104
|
+
const networkName = process.env.HEREYA_DOCKER_NETWORK || 'hereya-docker-network';
|
|
105
|
+
try {
|
|
106
|
+
await shellFn('docker', ['network', 'inspect', networkName], { logger });
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
try {
|
|
110
|
+
await shellFn('docker', ['network', 'create', networkName], { logger });
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Network was likely created by a concurrent call; verify it exists
|
|
114
|
+
await shellFn('docker', ['network', 'inspect', networkName], { logger });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return networkName;
|
|
94
118
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
{
|
|
2
2
|
"commands": {
|
|
3
|
+
"bootstrap": {
|
|
4
|
+
"aliases": [],
|
|
5
|
+
"args": {
|
|
6
|
+
"infrastructureType": {
|
|
7
|
+
"description": "infrastructure to bootstrap. Options are local, aws",
|
|
8
|
+
"name": "infrastructureType",
|
|
9
|
+
"required": true
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"description": "Install necessary resources for hereya operations in an infrastructure.",
|
|
13
|
+
"examples": [
|
|
14
|
+
"<%= config.bin %> <%= command.id %> aws",
|
|
15
|
+
"<%= config.bin %> <%= command.id %> local"
|
|
16
|
+
],
|
|
17
|
+
"flags": {
|
|
18
|
+
"force": {
|
|
19
|
+
"char": "f",
|
|
20
|
+
"description": "redeploy hereya resources if already deployed",
|
|
21
|
+
"name": "force",
|
|
22
|
+
"allowNo": false,
|
|
23
|
+
"type": "boolean"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"hasDynamicHelp": false,
|
|
27
|
+
"hiddenAliases": [],
|
|
28
|
+
"id": "bootstrap",
|
|
29
|
+
"pluginAlias": "hereya-cli",
|
|
30
|
+
"pluginName": "hereya-cli",
|
|
31
|
+
"pluginType": "core",
|
|
32
|
+
"strict": true,
|
|
33
|
+
"enableJsonFlag": false,
|
|
34
|
+
"isESM": true,
|
|
35
|
+
"relativePath": [
|
|
36
|
+
"dist",
|
|
37
|
+
"commands",
|
|
38
|
+
"bootstrap",
|
|
39
|
+
"index.js"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
3
42
|
"add": {
|
|
4
43
|
"aliases": [],
|
|
5
44
|
"args": {
|
|
@@ -63,45 +102,6 @@
|
|
|
63
102
|
"index.js"
|
|
64
103
|
]
|
|
65
104
|
},
|
|
66
|
-
"bootstrap": {
|
|
67
|
-
"aliases": [],
|
|
68
|
-
"args": {
|
|
69
|
-
"infrastructureType": {
|
|
70
|
-
"description": "infrastructure to bootstrap. Options are local, aws",
|
|
71
|
-
"name": "infrastructureType",
|
|
72
|
-
"required": true
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
"description": "Install necessary resources for hereya operations in an infrastructure.",
|
|
76
|
-
"examples": [
|
|
77
|
-
"<%= config.bin %> <%= command.id %> aws",
|
|
78
|
-
"<%= config.bin %> <%= command.id %> local"
|
|
79
|
-
],
|
|
80
|
-
"flags": {
|
|
81
|
-
"force": {
|
|
82
|
-
"char": "f",
|
|
83
|
-
"description": "redeploy hereya resources if already deployed",
|
|
84
|
-
"name": "force",
|
|
85
|
-
"allowNo": false,
|
|
86
|
-
"type": "boolean"
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"hasDynamicHelp": false,
|
|
90
|
-
"hiddenAliases": [],
|
|
91
|
-
"id": "bootstrap",
|
|
92
|
-
"pluginAlias": "hereya-cli",
|
|
93
|
-
"pluginName": "hereya-cli",
|
|
94
|
-
"pluginType": "core",
|
|
95
|
-
"strict": true,
|
|
96
|
-
"enableJsonFlag": false,
|
|
97
|
-
"isESM": true,
|
|
98
|
-
"relativePath": [
|
|
99
|
-
"dist",
|
|
100
|
-
"commands",
|
|
101
|
-
"bootstrap",
|
|
102
|
-
"index.js"
|
|
103
|
-
]
|
|
104
|
-
},
|
|
105
105
|
"delete-state": {
|
|
106
106
|
"aliases": [],
|
|
107
107
|
"args": {},
|
|
@@ -1082,6 +1082,68 @@
|
|
|
1082
1082
|
"index.js"
|
|
1083
1083
|
]
|
|
1084
1084
|
},
|
|
1085
|
+
"docker:run": {
|
|
1086
|
+
"aliases": [],
|
|
1087
|
+
"args": {
|
|
1088
|
+
"image": {
|
|
1089
|
+
"description": "Docker image to run",
|
|
1090
|
+
"name": "image",
|
|
1091
|
+
"required": true
|
|
1092
|
+
}
|
|
1093
|
+
},
|
|
1094
|
+
"description": "Run a Docker container with hereya env vars injected as -e flags.",
|
|
1095
|
+
"examples": [
|
|
1096
|
+
"<%= config.bin %> <%= command.id %> myapp:latest",
|
|
1097
|
+
"<%= config.bin %> <%= command.id %> -w staging myapp:latest",
|
|
1098
|
+
"<%= config.bin %> <%= command.id %> -p 3000 myapp:latest",
|
|
1099
|
+
"<%= config.bin %> <%= command.id %> myapp:latest -- --rm -v ./data:/data"
|
|
1100
|
+
],
|
|
1101
|
+
"flags": {
|
|
1102
|
+
"chdir": {
|
|
1103
|
+
"description": "directory to run command in",
|
|
1104
|
+
"name": "chdir",
|
|
1105
|
+
"required": false,
|
|
1106
|
+
"hasDynamicHelp": false,
|
|
1107
|
+
"multiple": false,
|
|
1108
|
+
"type": "option"
|
|
1109
|
+
},
|
|
1110
|
+
"port": {
|
|
1111
|
+
"char": "p",
|
|
1112
|
+
"description": "port to forward and set as PORT env var (default: 8080)",
|
|
1113
|
+
"name": "port",
|
|
1114
|
+
"required": false,
|
|
1115
|
+
"default": 8080,
|
|
1116
|
+
"hasDynamicHelp": false,
|
|
1117
|
+
"multiple": false,
|
|
1118
|
+
"type": "option"
|
|
1119
|
+
},
|
|
1120
|
+
"workspace": {
|
|
1121
|
+
"char": "w",
|
|
1122
|
+
"description": "name of the workspace to use",
|
|
1123
|
+
"name": "workspace",
|
|
1124
|
+
"required": false,
|
|
1125
|
+
"hasDynamicHelp": false,
|
|
1126
|
+
"multiple": false,
|
|
1127
|
+
"type": "option"
|
|
1128
|
+
}
|
|
1129
|
+
},
|
|
1130
|
+
"hasDynamicHelp": false,
|
|
1131
|
+
"hiddenAliases": [],
|
|
1132
|
+
"id": "docker:run",
|
|
1133
|
+
"pluginAlias": "hereya-cli",
|
|
1134
|
+
"pluginName": "hereya-cli",
|
|
1135
|
+
"pluginType": "core",
|
|
1136
|
+
"strict": false,
|
|
1137
|
+
"enableJsonFlag": false,
|
|
1138
|
+
"isESM": true,
|
|
1139
|
+
"relativePath": [
|
|
1140
|
+
"dist",
|
|
1141
|
+
"commands",
|
|
1142
|
+
"docker",
|
|
1143
|
+
"run",
|
|
1144
|
+
"index.js"
|
|
1145
|
+
]
|
|
1146
|
+
},
|
|
1085
1147
|
"env:set": {
|
|
1086
1148
|
"aliases": [],
|
|
1087
1149
|
"args": {
|
|
@@ -1796,9 +1858,21 @@
|
|
|
1796
1858
|
"args": {},
|
|
1797
1859
|
"description": "List workspaces.",
|
|
1798
1860
|
"examples": [
|
|
1799
|
-
"<%= config.bin %> <%= command.id %>"
|
|
1861
|
+
"<%= config.bin %> <%= command.id %>",
|
|
1862
|
+
"<%= config.bin %> <%= command.id %> --org my-org",
|
|
1863
|
+
"<%= config.bin %> <%= command.id %> --org personal"
|
|
1800
1864
|
],
|
|
1801
|
-
"flags": {
|
|
1865
|
+
"flags": {
|
|
1866
|
+
"org": {
|
|
1867
|
+
"char": "o",
|
|
1868
|
+
"description": "Filter workspaces by organization name. Use \"personal\" to show only your personal workspaces.",
|
|
1869
|
+
"name": "org",
|
|
1870
|
+
"required": false,
|
|
1871
|
+
"hasDynamicHelp": false,
|
|
1872
|
+
"multiple": false,
|
|
1873
|
+
"type": "option"
|
|
1874
|
+
}
|
|
1875
|
+
},
|
|
1802
1876
|
"hasDynamicHelp": false,
|
|
1803
1877
|
"hiddenAliases": [],
|
|
1804
1878
|
"id": "workspace:list",
|
|
@@ -1929,6 +2003,74 @@
|
|
|
1929
2003
|
"index.js"
|
|
1930
2004
|
]
|
|
1931
2005
|
},
|
|
2006
|
+
"flow:docker:run": {
|
|
2007
|
+
"aliases": [],
|
|
2008
|
+
"args": {
|
|
2009
|
+
"image": {
|
|
2010
|
+
"description": "Docker image to run",
|
|
2011
|
+
"name": "image",
|
|
2012
|
+
"required": true
|
|
2013
|
+
}
|
|
2014
|
+
},
|
|
2015
|
+
"description": "Run a Docker container with hereya env vars in a git branch-based workspace",
|
|
2016
|
+
"examples": [
|
|
2017
|
+
"<%= config.bin %> <%= command.id %> myapp:latest",
|
|
2018
|
+
"<%= config.bin %> <%= command.id %> --profile staging myapp:latest",
|
|
2019
|
+
"<%= config.bin %> <%= command.id %> --pin myapp:latest -- --rm"
|
|
2020
|
+
],
|
|
2021
|
+
"flags": {
|
|
2022
|
+
"chdir": {
|
|
2023
|
+
"description": "directory to run command in",
|
|
2024
|
+
"name": "chdir",
|
|
2025
|
+
"required": false,
|
|
2026
|
+
"hasDynamicHelp": false,
|
|
2027
|
+
"multiple": false,
|
|
2028
|
+
"type": "option"
|
|
2029
|
+
},
|
|
2030
|
+
"pin": {
|
|
2031
|
+
"description": "append git commit SHA to workspace name for commit-specific isolation",
|
|
2032
|
+
"name": "pin",
|
|
2033
|
+
"required": false,
|
|
2034
|
+
"allowNo": false,
|
|
2035
|
+
"type": "boolean"
|
|
2036
|
+
},
|
|
2037
|
+
"port": {
|
|
2038
|
+
"char": "p",
|
|
2039
|
+
"description": "port to forward and set as PORT env var (default: 8080)",
|
|
2040
|
+
"name": "port",
|
|
2041
|
+
"required": false,
|
|
2042
|
+
"default": 8080,
|
|
2043
|
+
"hasDynamicHelp": false,
|
|
2044
|
+
"multiple": false,
|
|
2045
|
+
"type": "option"
|
|
2046
|
+
},
|
|
2047
|
+
"profile": {
|
|
2048
|
+
"description": "profile to use for the workspace (will be appended to workspace name)",
|
|
2049
|
+
"name": "profile",
|
|
2050
|
+
"required": false,
|
|
2051
|
+
"hasDynamicHelp": false,
|
|
2052
|
+
"multiple": false,
|
|
2053
|
+
"type": "option"
|
|
2054
|
+
}
|
|
2055
|
+
},
|
|
2056
|
+
"hasDynamicHelp": false,
|
|
2057
|
+
"hiddenAliases": [],
|
|
2058
|
+
"id": "flow:docker:run",
|
|
2059
|
+
"pluginAlias": "hereya-cli",
|
|
2060
|
+
"pluginName": "hereya-cli",
|
|
2061
|
+
"pluginType": "core",
|
|
2062
|
+
"strict": false,
|
|
2063
|
+
"enableJsonFlag": false,
|
|
2064
|
+
"isESM": true,
|
|
2065
|
+
"relativePath": [
|
|
2066
|
+
"dist",
|
|
2067
|
+
"commands",
|
|
2068
|
+
"flow",
|
|
2069
|
+
"docker",
|
|
2070
|
+
"run",
|
|
2071
|
+
"index.js"
|
|
2072
|
+
]
|
|
2073
|
+
},
|
|
1932
2074
|
"workspace:env:set": {
|
|
1933
2075
|
"aliases": [],
|
|
1934
2076
|
"args": {},
|
|
@@ -2045,5 +2187,5 @@
|
|
|
2045
2187
|
]
|
|
2046
2188
|
}
|
|
2047
2189
|
},
|
|
2048
|
-
"version": "0.
|
|
2190
|
+
"version": "0.64.0"
|
|
2049
2191
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hereya-cli",
|
|
3
3
|
"description": "Infrastructure as Package",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.64.0",
|
|
5
5
|
"author": "Hereya Developers",
|
|
6
6
|
"bin": {
|
|
7
7
|
"hereya": "./bin/run.js"
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"@oclif/plugin-help": "^6.2.25",
|
|
21
21
|
"@oclif/plugin-plugins": "^5.4.31",
|
|
22
22
|
"chalk": "^5.5.0",
|
|
23
|
+
"cross-spawn": "^7.0.6",
|
|
23
24
|
"glob": "^11.0.1",
|
|
24
25
|
"ignore": "^7.0.3",
|
|
25
26
|
"keytar": "^7.9.0",
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
"@oclif/prettier-config": "^0.2.1",
|
|
38
39
|
"@oclif/test": "^4.1.9",
|
|
39
40
|
"@types/chai": "^5.0.1",
|
|
41
|
+
"@types/cross-spawn": "^6.0.6",
|
|
40
42
|
"@types/jsonwebtoken": "^9.0.9",
|
|
41
43
|
"@types/marked-terminal": "^6.1.1",
|
|
42
44
|
"@types/mocha": "^10.0.10",
|