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 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.62.1 linux-x64 node-v24.13.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.62.1/src/commands/add/index.ts)_
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.62.1/src/commands/bootstrap/index.ts)_
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.62.1/src/commands/config/export-backend/index.ts)_
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.62.1/src/commands/config/get-backend/index.ts)_
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.62.1/src/commands/config/import-backend/index.ts)_
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.62.1/src/commands/config/use-backend/index.ts)_
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.62.1/src/commands/delete-state/index.ts)_
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.62.1/src/commands/deploy/index.ts)_
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.62.1/src/commands/doc/index.ts)_
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.62.1/src/commands/down/index.ts)_
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.62.1/src/commands/env/index.ts)_
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.62.1/src/commands/env/set/index.ts)_
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.62.1/src/commands/flow/add/index.ts)_
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.62.1/src/commands/flow/down/index.ts)_
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.62.1/src/commands/flow/env/index.ts)_
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.62.1/src/commands/flow/provid/index.ts)_
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.62.1/src/commands/flow/remove/index.ts)_
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.62.1/src/commands/flow/run/index.ts)_
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.62.1/src/commands/flow/up/index.ts)_
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.62.1/src/commands/import/index.ts)_
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.62.1/src/commands/init/index.ts)_
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.62.1/src/commands/login/index.ts)_
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.62.1/src/commands/logout/index.ts)_
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.62.1/src/commands/provid/index.ts)_
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.62.1/src/commands/publish/index.ts)_
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.62.1/src/commands/remove/index.ts)_
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.62.1/src/commands/run/index.ts)_
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.62.1/src/commands/search/index.ts)_
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.62.1/src/commands/unbootstrap/index.ts)_
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.62.1/src/commands/undeploy/index.ts)_
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.62.1/src/commands/up/index.ts)_
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.62.1/src/commands/workspace/create/index.ts)_
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.62.1/src/commands/workspace/delete/index.ts)_
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.62.1/src/commands/workspace/env/index.ts)_
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.62.1/src/commands/workspace/env/set/index.ts)_
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.62.1/src/commands/workspace/env/unset/index.ts)_
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.62.1/src/commands/workspace/install/index.ts)_
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.62.1/src/commands/workspace/list/index.ts)_
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.62.1/src/commands/workspace/set-profile/index.ts)_
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.62.1/src/commands/workspace/uninstall/index.ts)_
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 response = await fetch(`${this.config.url}/api/workspaces`, {
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
  },
@@ -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;
@@ -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>;
@@ -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 = ['<%= config.bin %> <%= command.id %>'];
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
  }
@@ -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.62.1"
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.62.1",
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",