shipthis 0.1.17 → 0.1.19

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
@@ -11,10 +11,10 @@
11
11
  </a>
12
12
  </h1>
13
13
  <p align="center">
14
- <em><b>ShipThis</b> is a <b>command line tool</b> which manages building and uploading your <a href="https://godotengine.org/">Godot</a> mobile games to the <b>Apple App Store</b> and <b>Google Play</b>.</em>
14
+ <b>ShipThis</b> is a <b>command line tool</b> for building and uploading your <a href="https://godotengine.org/">Godot</a> mobile games to the <b>Apple App Store</b> and <b>Google Play</b>.
15
15
  </p>
16
16
  <p align="center">
17
- <em><b>ShipThis compiles and uploads your Godot games in the cloud, meaning <b>you do not need to install or run Xcode or Android Studio to ship a Godot iOS/Android game</b>.</em>
17
+ ShipThis compiles your game on managed cloud servers no local build tools needed. It can be integrated with existing CI or run ad-hoc when you have a new version of your game ready.
18
18
  </p>
19
19
 
20
20
  <p align="center">
@@ -25,14 +25,25 @@
25
25
 
26
26
  ---
27
27
 
28
+ ## ❓ Why use ShipThis?
29
+
30
+ - **✅ Always a free tier** – Enough usage for most solo devs.
31
+ - **✨ One-command setup** – Our interactive [`wizard`](https://shipthis.cc/docs/reference/game/wizard) guides you through configuration.
32
+ - **⏱ Skip the build tools** – No Xcode, Android Studio, or SDK installation required.
33
+ - **🔐 Simplify provisioning** – We handle iOS certificates, Android keystores, app signing, and API keys.
34
+ - **🚀 One-command deployment** – Publish to TestFlight or Google Play with a single CLI command.
35
+
36
+ > [!IMPORTANT]
37
+ > ShipThis is in public beta. While in beta, it is completely free to use. Early users will receive discounts or free access to premium features after launch.
38
+
28
39
  ## ⚡️ Quick start
29
40
 
30
41
  ### What you'll need
31
42
 
32
43
  - A Godot 3.6 or 4.X game
33
44
  - [Node.js](https://nodejs.org/en/download/) version 18.0 or above
34
- - **If you are building an iOS game** - an [Apple Developer account](https://developer.apple.com)
35
- - **If you are building an Android game** - a [Play Console developer account](https://play.google.com/apps/publish/signup)
45
+ - **If you are building an iOS game** an [Apple Developer account](https://developer.apple.com)
46
+ - **If you are building an Android game** a [Play Console developer account](https://play.google.com/apps/publish/signup)
36
47
 
37
48
  ### 1. Install ShipThis
38
49
 
@@ -44,6 +55,8 @@ npm install -g shipthis
44
55
 
45
56
  ### 2. Create an account
46
57
 
58
+ > 🛠 All builds run on managed cloud servers – no need to install Xcode or Android Studio locally.
59
+
47
60
  Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipthis.cc/docs/reference/login) command.
48
61
 
49
62
  ```bash
@@ -52,7 +65,7 @@ shipthis login
52
65
 
53
66
  ### 3. Set up your game
54
67
 
55
- Next, run the [wizard command](https://shipthis.cc/docs/reference/game/wizard) to configure your game on ShipThis. The command takes a platform parameter - this can be either **android** or **ios**. Run this command from within a Godot game directory (with a **project.godot** file):
68
+ Next, run the [wizard command](https://shipthis.cc/docs/reference/game/wizard) to configure your game on ShipThis. The command takes a platform parameter this can be either **android** or **ios**. Run this command from within a Godot game directory (with a **project.godot** file):
56
69
 
57
70
  ### Set up an Android game
58
71
 
@@ -60,6 +73,21 @@ Next, run the [wizard command](https://shipthis.cc/docs/reference/game/wizard) t
60
73
  shipthis game wizard android
61
74
  ```
62
75
 
76
+ <details>
77
+ <summary>Using the wizard for a published Google Play game</summary>
78
+
79
+ ### Published game
80
+
81
+ If you have already published your game to Google Play then you will be able to skip manually creating the game in the Play Console and uploading the initial build. Once you have connected your Google Account, the wizard will be able to determine if the game exists in Google Play. Below is a recording of the wizard being run to configure a game called **ShipThis Godot Demo Game** which was previously published manually in the Play Console.
82
+
83
+ <p align="center">
84
+ <picture>
85
+ <img height="862" width="1344" alt="ShipThis Home" src="docs/assets/wizard-android-existing.gif">
86
+ </picture>
87
+ </p>
88
+
89
+ </details>
90
+
63
91
  ### Set up an iOS game
64
92
 
65
93
  ```bash
@@ -68,22 +96,31 @@ shipthis game wizard ios
68
96
 
69
97
  ### 4. Ship
70
98
 
71
- Now you can publish new versions your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipthis.cc/docs/reference/game/ship) command:
99
+ Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipthis.cc/docs/reference/game/ship) command:
72
100
 
73
101
  ```bash
74
102
  shipthis game ship
75
103
  ```
76
104
 
105
+ - 💡 Having issues? Check the [Troubleshooting](https://shipthis.cc/docs/troubleshooting) or [join our Discord](https://discord.gg/gPjn3S99k4)
106
+ - 📚 For detailed documentation, visit [shipthis.cc/docs](https://shipthis.cc/docs)
107
+
77
108
  ## 📖 Command Reference
78
109
 
79
- ### Topics
110
+ ### 🗂 Topics
111
+
112
+ - [apple](https://shipthis.cc/docs/reference/apple) – Commands that relate to linking your ShipThis account with your Apple Developer Account
113
+ - [game](https://shipthis.cc/docs/reference/game) – Commands that relate to configuring the specific game in the current working directory.
114
+
115
+ ### 🔧 Commands
80
116
 
81
- - [apple](https://shipthis.cc/docs/reference/apple) - Commands that relate to linking your ShipThis account with your Apple Developer Account
82
- - [game](https://shipthis.cc/docs/reference/game) - Commands that relate to configuring the specific game in the current working directory.
117
+ - [dashboard](https://shipthis.cc/docs/reference/dashboard) Opens the web browser to your shipthis.cc dashboard
118
+ - [login](https://shipthis.cc/docs/reference/login) Sign in or create a new account
119
+ - [status](https://shipthis.cc/docs/reference/status) – Display your overall ShipThis account status
120
+ - [help](https://shipthis.cc/docs/reference/help) – Display help for a specific topic or command
83
121
 
84
- ### Commands
122
+ ## 🌍 Community
85
123
 
86
- - [dashboard](https://shipthis.cc/docs/reference/dashboard) - Opens the web browser to your shipthis.cc dashboard
87
- - [login](https://shipthis.cc/docs/reference/login) - Signin or create a new account
88
- - [status](https://shipthis.cc/docs/reference/status) - Display your overall ShipThis account status
89
- - [help](https://shipthis.cc/docs/reference/help) - Display help for a specific topic or command
124
+ - 💬 [Join us on Discord](https://discord.gg/gPjn3S99k4)
125
+ - 🐛 [Report an issue](https://github.com/shipth-is/cli/issues)
126
+ - 📣 Feature ideas? Feedback? We’d love to hear from you – email support@shipthis.cc
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "shipthis",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "shipthis",
9
- "version": "0.1.17",
9
+ "version": "0.1.19",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@expo/apple-utils": "2.0.3",
@@ -156,110 +156,6 @@
156
156
  "status.js"
157
157
  ]
158
158
  },
159
- "internal:fastlane": {
160
- "aliases": [],
161
- "args": {
162
- "username": {
163
- "description": "Your Apple email address",
164
- "name": "username",
165
- "required": true
166
- },
167
- "file": {
168
- "description": "Path where the fastlane session will be written",
169
- "name": "file",
170
- "required": true
171
- }
172
- },
173
- "description": "Output a fastlane session file which can be used with xcodes",
174
- "examples": [
175
- "<%= config.bin %> <%= command.id %>",
176
- "<%= config.bin %> <%= command.id %> --force --username me@email.nowhere"
177
- ],
178
- "flags": {
179
- "force": {
180
- "char": "f",
181
- "name": "force",
182
- "allowNo": false,
183
- "type": "boolean"
184
- }
185
- },
186
- "hasDynamicHelp": false,
187
- "hiddenAliases": [],
188
- "id": "internal:fastlane",
189
- "pluginAlias": "shipthis",
190
- "pluginName": "shipthis",
191
- "pluginType": "core",
192
- "strict": true,
193
- "enableJsonFlag": false,
194
- "isESM": true,
195
- "relativePath": [
196
- "dist",
197
- "commands",
198
- "internal",
199
- "fastlane.js"
200
- ]
201
- },
202
- "internal:readme": {
203
- "aliases": [],
204
- "args": {
205
- "outputDir": {
206
- "description": "The directory where the readme files will be written",
207
- "name": "outputDir",
208
- "required": true
209
- }
210
- },
211
- "description": "Generate the readme files for the commands",
212
- "examples": [
213
- "<%= config.bin %> <%= command.id %>"
214
- ],
215
- "flags": {
216
- "notDryRun": {
217
- "char": "n",
218
- "description": "Set to actually write the files (will not overwrite)",
219
- "name": "notDryRun",
220
- "allowNo": false,
221
- "type": "boolean"
222
- },
223
- "overWrite": {
224
- "char": "o",
225
- "description": "Overwrite existing files",
226
- "name": "overWrite",
227
- "allowNo": false,
228
- "type": "boolean"
229
- },
230
- "depth": {
231
- "char": "d",
232
- "description": "The depth of the topic tree to render as separate files",
233
- "name": "depth",
234
- "hasDynamicHelp": false,
235
- "multiple": false,
236
- "type": "option"
237
- },
238
- "only": {
239
- "char": "l",
240
- "description": "Glob pattern - will only write the files which match",
241
- "name": "only",
242
- "hasDynamicHelp": false,
243
- "multiple": false,
244
- "type": "option"
245
- }
246
- },
247
- "hasDynamicHelp": false,
248
- "hiddenAliases": [],
249
- "id": "internal:readme",
250
- "pluginAlias": "shipthis",
251
- "pluginName": "shipthis",
252
- "pluginType": "core",
253
- "strict": true,
254
- "enableJsonFlag": false,
255
- "isESM": true,
256
- "relativePath": [
257
- "dist",
258
- "commands",
259
- "internal",
260
- "readme.js"
261
- ]
262
- },
263
159
  "game:create": {
264
160
  "aliases": [],
265
161
  "args": {},
@@ -695,62 +591,28 @@
695
591
  "wizard.js"
696
592
  ]
697
593
  },
698
- "apple:apiKey:create": {
699
- "aliases": [],
700
- "args": {},
701
- "description": "Creates an App Store Connect API Key in your Apple Developer account.\nSaves the private key in your ShipThis account.",
702
- "examples": [
703
- "<%= config.bin %> <%= command.id %>",
704
- "<%= config.bin %> <%= command.id %> --force"
705
- ],
706
- "flags": {
707
- "force": {
708
- "char": "f",
709
- "name": "force",
710
- "allowNo": false,
711
- "type": "boolean"
712
- },
713
- "quiet": {
714
- "char": "q",
715
- "description": "Avoid output except for interactions and errors",
716
- "name": "quiet",
717
- "allowNo": false,
718
- "type": "boolean"
719
- }
720
- },
721
- "hasDynamicHelp": false,
722
- "hiddenAliases": [],
723
- "id": "apple:apiKey:create",
724
- "pluginAlias": "shipthis",
725
- "pluginName": "shipthis",
726
- "pluginType": "core",
727
- "strict": true,
728
- "isESM": true,
729
- "relativePath": [
730
- "dist",
731
- "commands",
732
- "apple",
733
- "apiKey",
734
- "create.js"
735
- ]
736
- },
737
- "apple:apiKey:export": {
594
+ "internal:fastlane": {
738
595
  "aliases": [],
739
596
  "args": {
597
+ "username": {
598
+ "description": "Your Apple email address",
599
+ "name": "username",
600
+ "required": true
601
+ },
740
602
  "file": {
741
- "description": "Name of the ZIP file to create",
603
+ "description": "Path where the fastlane session will be written",
742
604
  "name": "file",
743
605
  "required": true
744
606
  }
745
607
  },
746
- "description": "Saves the current App Store Connect API Key to a ZIP file",
608
+ "description": "Output a fastlane session file which can be used with xcodes",
747
609
  "examples": [
748
- "<%= config.bin %> <%= command.id %> userApiKey.zip"
610
+ "<%= config.bin %> <%= command.id %>",
611
+ "<%= config.bin %> <%= command.id %> --force --username me@email.nowhere"
749
612
  ],
750
613
  "flags": {
751
614
  "force": {
752
615
  "char": "f",
753
- "description": "Overwrite the file if it already exists",
754
616
  "name": "force",
755
617
  "allowNo": false,
756
618
  "type": "boolean"
@@ -758,7 +620,7 @@
758
620
  },
759
621
  "hasDynamicHelp": false,
760
622
  "hiddenAliases": [],
761
- "id": "apple:apiKey:export",
623
+ "id": "internal:fastlane",
762
624
  "pluginAlias": "shipthis",
763
625
  "pluginName": "shipthis",
764
626
  "pluginType": "core",
@@ -768,68 +630,58 @@
768
630
  "relativePath": [
769
631
  "dist",
770
632
  "commands",
771
- "apple",
772
- "apiKey",
773
- "export.js"
633
+ "internal",
634
+ "fastlane.js"
774
635
  ]
775
636
  },
776
- "apple:apiKey:import": {
637
+ "internal:readme": {
777
638
  "aliases": [],
778
639
  "args": {
779
- "file": {
780
- "description": "Name of the ZIP file to import (must be in the same format as the export)",
781
- "name": "file",
640
+ "outputDir": {
641
+ "description": "The directory where the readme files will be written",
642
+ "name": "outputDir",
782
643
  "required": true
783
644
  }
784
645
  },
785
- "description": "Imports an App Store Connect API Key ZIP file into your ShipThis account",
646
+ "description": "Generate the readme files for the commands",
786
647
  "examples": [
787
- "<%= config.bin %> <%= command.id %> userApiKey.zip"
648
+ "<%= config.bin %> <%= command.id %>"
788
649
  ],
789
650
  "flags": {
790
- "force": {
791
- "char": "f",
792
- "name": "force",
651
+ "notDryRun": {
652
+ "char": "n",
653
+ "description": "Set to actually write the files (will not overwrite)",
654
+ "name": "notDryRun",
793
655
  "allowNo": false,
794
656
  "type": "boolean"
795
- }
796
- },
797
- "hasDynamicHelp": false,
798
- "hiddenAliases": [],
799
- "id": "apple:apiKey:import",
800
- "pluginAlias": "shipthis",
801
- "pluginName": "shipthis",
802
- "pluginType": "core",
803
- "strict": true,
804
- "enableJsonFlag": false,
805
- "isESM": true,
806
- "relativePath": [
807
- "dist",
808
- "commands",
809
- "apple",
810
- "apiKey",
811
- "import.js"
812
- ]
813
- },
814
- "apple:apiKey:status": {
815
- "aliases": [],
816
- "args": {},
817
- "description": "Displays the status of App Store Connect API Keys in your Apple and ShipThis accounts.\nThis API key is used to automatically publish your games to the App Store.",
818
- "examples": [
819
- "<%= config.bin %> <%= command.id %>",
820
- "<%= config.bin %> <%= command.id %> --noAppleAuth"
821
- ],
822
- "flags": {
823
- "noAppleAuth": {
824
- "char": "f",
825
- "name": "noAppleAuth",
657
+ },
658
+ "overWrite": {
659
+ "char": "o",
660
+ "description": "Overwrite existing files",
661
+ "name": "overWrite",
826
662
  "allowNo": false,
827
663
  "type": "boolean"
664
+ },
665
+ "depth": {
666
+ "char": "d",
667
+ "description": "The depth of the topic tree to render as separate files",
668
+ "name": "depth",
669
+ "hasDynamicHelp": false,
670
+ "multiple": false,
671
+ "type": "option"
672
+ },
673
+ "only": {
674
+ "char": "l",
675
+ "description": "Glob pattern - will only write the files which match",
676
+ "name": "only",
677
+ "hasDynamicHelp": false,
678
+ "multiple": false,
679
+ "type": "option"
828
680
  }
829
681
  },
830
682
  "hasDynamicHelp": false,
831
683
  "hiddenAliases": [],
832
- "id": "apple:apiKey:status",
684
+ "id": "internal:readme",
833
685
  "pluginAlias": "shipthis",
834
686
  "pluginName": "shipthis",
835
687
  "pluginType": "core",
@@ -839,9 +691,8 @@
839
691
  "relativePath": [
840
692
  "dist",
841
693
  "commands",
842
- "apple",
843
- "apiKey",
844
- "status.js"
694
+ "internal",
695
+ "readme.js"
845
696
  ]
846
697
  },
847
698
  "apple:certificate:create": {
@@ -993,19 +844,203 @@
993
844
  "status.js"
994
845
  ]
995
846
  },
996
- "game:build:download": {
847
+ "apple:apiKey:create": {
997
848
  "aliases": [],
998
- "args": {
999
- "build_id": {
1000
- "description": "The ID of the build to download",
1001
- "name": "build_id",
1002
- "required": true
1003
- },
1004
- "file": {
1005
- "description": "Name of the file to output",
1006
- "name": "file",
1007
- "required": true
1008
- }
849
+ "args": {},
850
+ "description": "Creates an App Store Connect API Key in your Apple Developer account.\nSaves the private key in your ShipThis account.",
851
+ "examples": [
852
+ "<%= config.bin %> <%= command.id %>",
853
+ "<%= config.bin %> <%= command.id %> --force"
854
+ ],
855
+ "flags": {
856
+ "force": {
857
+ "char": "f",
858
+ "name": "force",
859
+ "allowNo": false,
860
+ "type": "boolean"
861
+ },
862
+ "quiet": {
863
+ "char": "q",
864
+ "description": "Avoid output except for interactions and errors",
865
+ "name": "quiet",
866
+ "allowNo": false,
867
+ "type": "boolean"
868
+ }
869
+ },
870
+ "hasDynamicHelp": false,
871
+ "hiddenAliases": [],
872
+ "id": "apple:apiKey:create",
873
+ "pluginAlias": "shipthis",
874
+ "pluginName": "shipthis",
875
+ "pluginType": "core",
876
+ "strict": true,
877
+ "isESM": true,
878
+ "relativePath": [
879
+ "dist",
880
+ "commands",
881
+ "apple",
882
+ "apiKey",
883
+ "create.js"
884
+ ]
885
+ },
886
+ "apple:apiKey:export": {
887
+ "aliases": [],
888
+ "args": {
889
+ "file": {
890
+ "description": "Name of the ZIP file to create",
891
+ "name": "file",
892
+ "required": true
893
+ }
894
+ },
895
+ "description": "Saves the current App Store Connect API Key to a ZIP file",
896
+ "examples": [
897
+ "<%= config.bin %> <%= command.id %> userApiKey.zip"
898
+ ],
899
+ "flags": {
900
+ "force": {
901
+ "char": "f",
902
+ "description": "Overwrite the file if it already exists",
903
+ "name": "force",
904
+ "allowNo": false,
905
+ "type": "boolean"
906
+ }
907
+ },
908
+ "hasDynamicHelp": false,
909
+ "hiddenAliases": [],
910
+ "id": "apple:apiKey:export",
911
+ "pluginAlias": "shipthis",
912
+ "pluginName": "shipthis",
913
+ "pluginType": "core",
914
+ "strict": true,
915
+ "enableJsonFlag": false,
916
+ "isESM": true,
917
+ "relativePath": [
918
+ "dist",
919
+ "commands",
920
+ "apple",
921
+ "apiKey",
922
+ "export.js"
923
+ ]
924
+ },
925
+ "apple:apiKey:import": {
926
+ "aliases": [],
927
+ "args": {
928
+ "file": {
929
+ "description": "Name of the ZIP file to import (must be in the same format as the export)",
930
+ "name": "file",
931
+ "required": true
932
+ }
933
+ },
934
+ "description": "Imports an App Store Connect API Key ZIP file into your ShipThis account",
935
+ "examples": [
936
+ "<%= config.bin %> <%= command.id %> userApiKey.zip"
937
+ ],
938
+ "flags": {
939
+ "force": {
940
+ "char": "f",
941
+ "name": "force",
942
+ "allowNo": false,
943
+ "type": "boolean"
944
+ }
945
+ },
946
+ "hasDynamicHelp": false,
947
+ "hiddenAliases": [],
948
+ "id": "apple:apiKey:import",
949
+ "pluginAlias": "shipthis",
950
+ "pluginName": "shipthis",
951
+ "pluginType": "core",
952
+ "strict": true,
953
+ "enableJsonFlag": false,
954
+ "isESM": true,
955
+ "relativePath": [
956
+ "dist",
957
+ "commands",
958
+ "apple",
959
+ "apiKey",
960
+ "import.js"
961
+ ]
962
+ },
963
+ "apple:apiKey:status": {
964
+ "aliases": [],
965
+ "args": {},
966
+ "description": "Displays the status of App Store Connect API Keys in your Apple and ShipThis accounts.\nThis API key is used to automatically publish your games to the App Store.",
967
+ "examples": [
968
+ "<%= config.bin %> <%= command.id %>",
969
+ "<%= config.bin %> <%= command.id %> --noAppleAuth"
970
+ ],
971
+ "flags": {
972
+ "noAppleAuth": {
973
+ "char": "f",
974
+ "name": "noAppleAuth",
975
+ "allowNo": false,
976
+ "type": "boolean"
977
+ }
978
+ },
979
+ "hasDynamicHelp": false,
980
+ "hiddenAliases": [],
981
+ "id": "apple:apiKey:status",
982
+ "pluginAlias": "shipthis",
983
+ "pluginName": "shipthis",
984
+ "pluginType": "core",
985
+ "strict": true,
986
+ "enableJsonFlag": false,
987
+ "isESM": true,
988
+ "relativePath": [
989
+ "dist",
990
+ "commands",
991
+ "apple",
992
+ "apiKey",
993
+ "status.js"
994
+ ]
995
+ },
996
+ "game:android:status": {
997
+ "aliases": [],
998
+ "args": {},
999
+ "description": "Shows the status of the setup for the Android platform for a specific game.",
1000
+ "examples": [
1001
+ "<%= config.bin %> <%= command.id %>",
1002
+ "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
1003
+ ],
1004
+ "flags": {
1005
+ "gameId": {
1006
+ "char": "g",
1007
+ "description": "The ID of the game",
1008
+ "name": "gameId",
1009
+ "hasDynamicHelp": false,
1010
+ "multiple": false,
1011
+ "type": "option"
1012
+ }
1013
+ },
1014
+ "hasDynamicHelp": false,
1015
+ "hiddenAliases": [],
1016
+ "id": "game:android:status",
1017
+ "pluginAlias": "shipthis",
1018
+ "pluginName": "shipthis",
1019
+ "pluginType": "core",
1020
+ "strict": true,
1021
+ "enableJsonFlag": false,
1022
+ "isESM": true,
1023
+ "relativePath": [
1024
+ "dist",
1025
+ "commands",
1026
+ "game",
1027
+ "android",
1028
+ "status.js"
1029
+ ]
1030
+ },
1031
+ "game:build:download": {
1032
+ "aliases": [],
1033
+ "args": {
1034
+ "build_id": {
1035
+ "description": "The ID of the build to download",
1036
+ "name": "build_id",
1037
+ "required": true
1038
+ },
1039
+ "file": {
1040
+ "description": "Name of the file to output",
1041
+ "name": "file",
1042
+ "required": true
1043
+ }
1009
1044
  },
1010
1045
  "description": "Downloads the given build artifact to the specified file",
1011
1046
  "examples": [
@@ -1126,41 +1161,6 @@
1126
1161
  "list.js"
1127
1162
  ]
1128
1163
  },
1129
- "game:android:status": {
1130
- "aliases": [],
1131
- "args": {},
1132
- "description": "Shows the status of the setup for the Android platform for a specific game.",
1133
- "examples": [
1134
- "<%= config.bin %> <%= command.id %>",
1135
- "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
1136
- ],
1137
- "flags": {
1138
- "gameId": {
1139
- "char": "g",
1140
- "description": "The ID of the game",
1141
- "name": "gameId",
1142
- "hasDynamicHelp": false,
1143
- "multiple": false,
1144
- "type": "option"
1145
- }
1146
- },
1147
- "hasDynamicHelp": false,
1148
- "hiddenAliases": [],
1149
- "id": "game:android:status",
1150
- "pluginAlias": "shipthis",
1151
- "pluginName": "shipthis",
1152
- "pluginType": "core",
1153
- "strict": true,
1154
- "enableJsonFlag": false,
1155
- "isESM": true,
1156
- "relativePath": [
1157
- "dist",
1158
- "commands",
1159
- "game",
1160
- "android",
1161
- "status.js"
1162
- ]
1163
- },
1164
1164
  "game:ios:status": {
1165
1165
  "aliases": [],
1166
1166
  "args": {},
@@ -1367,13 +1367,14 @@
1367
1367
  "status.js"
1368
1368
  ]
1369
1369
  },
1370
- "game:android:keyStore:create": {
1370
+ "game:android:apiKey:connect": {
1371
1371
  "aliases": [],
1372
1372
  "args": {},
1373
- "description": "Creates a new Android Keystore for a game",
1373
+ "description": "Connects ShipThis with Google for managing Service Account API Keys for an Android game",
1374
1374
  "examples": [
1375
1375
  "<%= config.bin %> <%= command.id %>",
1376
- "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
1376
+ "<%= config.bin %> <%= command.id %> --force",
1377
+ "<%= config.bin %> <%= command.id %> --disconnect"
1377
1378
  ],
1378
1379
  "flags": {
1379
1380
  "gameId": {
@@ -1389,11 +1390,17 @@
1389
1390
  "name": "force",
1390
1391
  "allowNo": false,
1391
1392
  "type": "boolean"
1393
+ },
1394
+ "disconnect": {
1395
+ "char": "d",
1396
+ "name": "disconnect",
1397
+ "allowNo": false,
1398
+ "type": "boolean"
1392
1399
  }
1393
1400
  },
1394
1401
  "hasDynamicHelp": false,
1395
1402
  "hiddenAliases": [],
1396
- "id": "game:android:keyStore:create",
1403
+ "id": "game:android:apiKey:connect",
1397
1404
  "pluginAlias": "shipthis",
1398
1405
  "pluginName": "shipthis",
1399
1406
  "pluginType": "core",
@@ -1404,22 +1411,17 @@
1404
1411
  "commands",
1405
1412
  "game",
1406
1413
  "android",
1407
- "keyStore",
1408
- "create.js"
1414
+ "apiKey",
1415
+ "connect.js"
1409
1416
  ]
1410
1417
  },
1411
- "game:android:keyStore:export": {
1418
+ "game:android:apiKey:create": {
1412
1419
  "aliases": [],
1413
- "args": {
1414
- "file": {
1415
- "description": "Name of the ZIP file to create",
1416
- "name": "file",
1417
- "required": true
1418
- }
1419
- },
1420
- "description": "Saves the current Android Keystore to a ZIP file",
1420
+ "args": {},
1421
+ "description": "Creates a new Android Service Account API Key for a game",
1421
1422
  "examples": [
1422
- "<%= config.bin %> <%= command.id %> keyStore.zip"
1423
+ "<%= config.bin %> <%= command.id %>",
1424
+ "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
1423
1425
  ],
1424
1426
  "flags": {
1425
1427
  "gameId": {
@@ -1430,9 +1432,15 @@
1430
1432
  "multiple": false,
1431
1433
  "type": "option"
1432
1434
  },
1435
+ "waitForAuth": {
1436
+ "char": "w",
1437
+ "description": "Wait for Google Authentication (10 mins).",
1438
+ "name": "waitForAuth",
1439
+ "allowNo": false,
1440
+ "type": "boolean"
1441
+ },
1433
1442
  "force": {
1434
1443
  "char": "f",
1435
- "description": "Overwrite the file if it already exists",
1436
1444
  "name": "force",
1437
1445
  "allowNo": false,
1438
1446
  "type": "boolean"
@@ -1440,35 +1448,33 @@
1440
1448
  },
1441
1449
  "hasDynamicHelp": false,
1442
1450
  "hiddenAliases": [],
1443
- "id": "game:android:keyStore:export",
1451
+ "id": "game:android:apiKey:create",
1444
1452
  "pluginAlias": "shipthis",
1445
1453
  "pluginName": "shipthis",
1446
1454
  "pluginType": "core",
1447
1455
  "strict": true,
1448
- "enableJsonFlag": false,
1449
1456
  "isESM": true,
1450
1457
  "relativePath": [
1451
1458
  "dist",
1452
1459
  "commands",
1453
1460
  "game",
1454
1461
  "android",
1455
- "keyStore",
1456
- "export.js"
1462
+ "apiKey",
1463
+ "create.js"
1457
1464
  ]
1458
1465
  },
1459
- "game:android:keyStore:import": {
1466
+ "game:android:apiKey:export": {
1460
1467
  "aliases": [],
1461
1468
  "args": {
1462
1469
  "file": {
1463
- "description": "Path to the ZIP file to import (must be in the same format as the export)",
1470
+ "description": "Name of the ZIP file to create",
1464
1471
  "name": "file",
1465
- "required": false
1472
+ "required": true
1466
1473
  }
1467
1474
  },
1468
- "description": "Imports an Android Keystore to your ShipThis account for the specified game.",
1475
+ "description": "Saves the current Android Service Account API Key to a ZIP file",
1469
1476
  "examples": [
1470
- "<%= config.bin %> <%= command.id %> path/to/import.zip -g abfd5b00",
1471
- "<%= config.bin %> <%= command.id %> --jksFile path/to/file.jks --keystorePassword yourpass --keyPassword yourkeypass"
1477
+ "<%= config.bin %> <%= command.id %> keyStore.zip"
1472
1478
  ],
1473
1479
  "flags": {
1474
1480
  "gameId": {
@@ -1479,30 +1485,9 @@
1479
1485
  "multiple": false,
1480
1486
  "type": "option"
1481
1487
  },
1482
- "jksFile": {
1483
- "description": "Path to the JKS file to import (requires passwords)",
1484
- "name": "jksFile",
1485
- "hasDynamicHelp": false,
1486
- "multiple": false,
1487
- "type": "option"
1488
- },
1489
- "keystorePassword": {
1490
- "description": "Keystore password (required when using --jksFile)",
1491
- "name": "keystorePassword",
1492
- "hasDynamicHelp": false,
1493
- "multiple": false,
1494
- "type": "option"
1495
- },
1496
- "keyPassword": {
1497
- "description": "Key alias password (required when using --jksFile)",
1498
- "name": "keyPassword",
1499
- "hasDynamicHelp": false,
1500
- "multiple": false,
1501
- "type": "option"
1502
- },
1503
1488
  "force": {
1504
1489
  "char": "f",
1505
- "description": "Overwrite any existing keystore without confirmation",
1490
+ "description": "Overwrite the file if it already exists",
1506
1491
  "name": "force",
1507
1492
  "allowNo": false,
1508
1493
  "type": "boolean"
@@ -1510,29 +1495,33 @@
1510
1495
  },
1511
1496
  "hasDynamicHelp": false,
1512
1497
  "hiddenAliases": [],
1513
- "id": "game:android:keyStore:import",
1498
+ "id": "game:android:apiKey:export",
1514
1499
  "pluginAlias": "shipthis",
1515
1500
  "pluginName": "shipthis",
1516
1501
  "pluginType": "core",
1517
1502
  "strict": true,
1518
- "enableJsonFlag": false,
1519
1503
  "isESM": true,
1520
1504
  "relativePath": [
1521
1505
  "dist",
1522
1506
  "commands",
1523
1507
  "game",
1524
1508
  "android",
1525
- "keyStore",
1526
- "import.js"
1509
+ "apiKey",
1510
+ "export.js"
1527
1511
  ]
1528
1512
  },
1529
- "game:android:keyStore:status": {
1513
+ "game:android:apiKey:import": {
1530
1514
  "aliases": [],
1531
- "args": {},
1532
- "description": "Displays the status of the Android Keystore for a specific game.",
1515
+ "args": {
1516
+ "file": {
1517
+ "description": "Name of the ZIP file to import (must be in the same format as the export)",
1518
+ "name": "file",
1519
+ "required": true
1520
+ }
1521
+ },
1522
+ "description": "Imports an Android Service Account API Key to your ShipThis account for the specified game.",
1533
1523
  "examples": [
1534
- "<%= config.bin %> <%= command.id %>",
1535
- "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
1524
+ "<%= config.bin %> <%= command.id %>"
1536
1525
  ],
1537
1526
  "flags": {
1538
1527
  "gameId": {
@@ -1542,34 +1531,43 @@
1542
1531
  "hasDynamicHelp": false,
1543
1532
  "multiple": false,
1544
1533
  "type": "option"
1534
+ },
1535
+ "force": {
1536
+ "char": "f",
1537
+ "name": "force",
1538
+ "allowNo": false,
1539
+ "type": "boolean"
1545
1540
  }
1546
1541
  },
1547
1542
  "hasDynamicHelp": false,
1548
1543
  "hiddenAliases": [],
1549
- "id": "game:android:keyStore:status",
1544
+ "id": "game:android:apiKey:import",
1550
1545
  "pluginAlias": "shipthis",
1551
1546
  "pluginName": "shipthis",
1552
1547
  "pluginType": "core",
1553
1548
  "strict": true,
1554
- "enableJsonFlag": false,
1555
1549
  "isESM": true,
1556
1550
  "relativePath": [
1557
1551
  "dist",
1558
1552
  "commands",
1559
1553
  "game",
1560
1554
  "android",
1561
- "keyStore",
1562
- "status.js"
1555
+ "apiKey",
1556
+ "import.js"
1563
1557
  ]
1564
1558
  },
1565
- "game:android:apiKey:connect": {
1559
+ "game:android:apiKey:invite": {
1566
1560
  "aliases": [],
1567
- "args": {},
1568
- "description": "Connects ShipThis with Google for managing Service Account API Keys for an Android game",
1561
+ "args": {
1562
+ "accountId": {
1563
+ "description": "The Google Play Account ID",
1564
+ "name": "accountId",
1565
+ "required": false
1566
+ }
1567
+ },
1568
+ "description": "Invites the Service Account to your Google Play Account.",
1569
1569
  "examples": [
1570
- "<%= config.bin %> <%= command.id %>",
1571
- "<%= config.bin %> <%= command.id %> --force",
1572
- "<%= config.bin %> <%= command.id %> --disconnect"
1570
+ "<%= config.bin %> <%= command.id %>"
1573
1571
  ],
1574
1572
  "flags": {
1575
1573
  "gameId": {
@@ -1580,22 +1578,31 @@
1580
1578
  "multiple": false,
1581
1579
  "type": "option"
1582
1580
  },
1583
- "force": {
1584
- "char": "f",
1585
- "name": "force",
1581
+ "prompt": {
1582
+ "char": "p",
1583
+ "description": "Prompt for the Google Play Account ID",
1584
+ "name": "prompt",
1586
1585
  "allowNo": false,
1587
1586
  "type": "boolean"
1588
1587
  },
1589
- "disconnect": {
1590
- "char": "d",
1591
- "name": "disconnect",
1588
+ "waitForGoogleApp": {
1589
+ "char": "p",
1590
+ "description": "Waits for the Google Play app to be created (10 mins).",
1591
+ "name": "waitForGoogleApp",
1592
+ "allowNo": false,
1593
+ "type": "boolean"
1594
+ },
1595
+ "waitForAuth": {
1596
+ "char": "w",
1597
+ "description": "Wait for Google Authentication (10 mins).",
1598
+ "name": "waitForAuth",
1592
1599
  "allowNo": false,
1593
1600
  "type": "boolean"
1594
1601
  }
1595
1602
  },
1596
1603
  "hasDynamicHelp": false,
1597
1604
  "hiddenAliases": [],
1598
- "id": "game:android:apiKey:connect",
1605
+ "id": "game:android:apiKey:invite",
1599
1606
  "pluginAlias": "shipthis",
1600
1607
  "pluginName": "shipthis",
1601
1608
  "pluginType": "core",
@@ -1607,13 +1614,13 @@
1607
1614
  "game",
1608
1615
  "android",
1609
1616
  "apiKey",
1610
- "connect.js"
1617
+ "invite.js"
1611
1618
  ]
1612
1619
  },
1613
- "game:android:apiKey:create": {
1620
+ "game:android:apiKey:status": {
1614
1621
  "aliases": [],
1615
1622
  "args": {},
1616
- "description": "Creates a new Android Service Account API Key for a game",
1623
+ "description": "Displays the status of the Android Service Account API Key for a specific game.",
1617
1624
  "examples": [
1618
1625
  "<%= config.bin %> <%= command.id %>",
1619
1626
  "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
@@ -1626,24 +1633,11 @@
1626
1633
  "hasDynamicHelp": false,
1627
1634
  "multiple": false,
1628
1635
  "type": "option"
1629
- },
1630
- "waitForAuth": {
1631
- "char": "w",
1632
- "description": "Wait for Google Authentication (10 mins).",
1633
- "name": "waitForAuth",
1634
- "allowNo": false,
1635
- "type": "boolean"
1636
- },
1637
- "force": {
1638
- "char": "f",
1639
- "name": "force",
1640
- "allowNo": false,
1641
- "type": "boolean"
1642
1636
  }
1643
1637
  },
1644
1638
  "hasDynamicHelp": false,
1645
1639
  "hiddenAliases": [],
1646
- "id": "game:android:apiKey:create",
1640
+ "id": "game:android:apiKey:status",
1647
1641
  "pluginAlias": "shipthis",
1648
1642
  "pluginName": "shipthis",
1649
1643
  "pluginType": "core",
@@ -1655,21 +1649,16 @@
1655
1649
  "game",
1656
1650
  "android",
1657
1651
  "apiKey",
1658
- "create.js"
1652
+ "status.js"
1659
1653
  ]
1660
1654
  },
1661
- "game:android:apiKey:export": {
1655
+ "game:android:keyStore:create": {
1662
1656
  "aliases": [],
1663
- "args": {
1664
- "file": {
1665
- "description": "Name of the ZIP file to create",
1666
- "name": "file",
1667
- "required": true
1668
- }
1669
- },
1670
- "description": "Saves the current Android Service Account API Key to a ZIP file",
1657
+ "args": {},
1658
+ "description": "Creates a new Android Keystore for a game",
1671
1659
  "examples": [
1672
- "<%= config.bin %> <%= command.id %> keyStore.zip"
1660
+ "<%= config.bin %> <%= command.id %>",
1661
+ "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
1673
1662
  ],
1674
1663
  "flags": {
1675
1664
  "gameId": {
@@ -1682,7 +1671,6 @@
1682
1671
  },
1683
1672
  "force": {
1684
1673
  "char": "f",
1685
- "description": "Overwrite the file if it already exists",
1686
1674
  "name": "force",
1687
1675
  "allowNo": false,
1688
1676
  "type": "boolean"
@@ -1690,7 +1678,7 @@
1690
1678
  },
1691
1679
  "hasDynamicHelp": false,
1692
1680
  "hiddenAliases": [],
1693
- "id": "game:android:apiKey:export",
1681
+ "id": "game:android:keyStore:create",
1694
1682
  "pluginAlias": "shipthis",
1695
1683
  "pluginName": "shipthis",
1696
1684
  "pluginType": "core",
@@ -1701,22 +1689,22 @@
1701
1689
  "commands",
1702
1690
  "game",
1703
1691
  "android",
1704
- "apiKey",
1705
- "export.js"
1692
+ "keyStore",
1693
+ "create.js"
1706
1694
  ]
1707
1695
  },
1708
- "game:android:apiKey:import": {
1696
+ "game:android:keyStore:export": {
1709
1697
  "aliases": [],
1710
1698
  "args": {
1711
1699
  "file": {
1712
- "description": "Name of the ZIP file to import (must be in the same format as the export)",
1700
+ "description": "Name of the ZIP file to create",
1713
1701
  "name": "file",
1714
1702
  "required": true
1715
1703
  }
1716
1704
  },
1717
- "description": "Imports an Android Service Account API Key to your ShipThis account for the specified game.",
1705
+ "description": "Saves the current Android Keystore to a ZIP file",
1718
1706
  "examples": [
1719
- "<%= config.bin %> <%= command.id %>"
1707
+ "<%= config.bin %> <%= command.id %> keyStore.zip"
1720
1708
  ],
1721
1709
  "flags": {
1722
1710
  "gameId": {
@@ -1729,6 +1717,7 @@
1729
1717
  },
1730
1718
  "force": {
1731
1719
  "char": "f",
1720
+ "description": "Overwrite the file if it already exists",
1732
1721
  "name": "force",
1733
1722
  "allowNo": false,
1734
1723
  "type": "boolean"
@@ -1736,33 +1725,35 @@
1736
1725
  },
1737
1726
  "hasDynamicHelp": false,
1738
1727
  "hiddenAliases": [],
1739
- "id": "game:android:apiKey:import",
1728
+ "id": "game:android:keyStore:export",
1740
1729
  "pluginAlias": "shipthis",
1741
1730
  "pluginName": "shipthis",
1742
1731
  "pluginType": "core",
1743
1732
  "strict": true,
1733
+ "enableJsonFlag": false,
1744
1734
  "isESM": true,
1745
1735
  "relativePath": [
1746
1736
  "dist",
1747
1737
  "commands",
1748
1738
  "game",
1749
1739
  "android",
1750
- "apiKey",
1751
- "import.js"
1740
+ "keyStore",
1741
+ "export.js"
1752
1742
  ]
1753
1743
  },
1754
- "game:android:apiKey:invite": {
1744
+ "game:android:keyStore:import": {
1755
1745
  "aliases": [],
1756
1746
  "args": {
1757
- "accountId": {
1758
- "description": "The Google Play Account ID",
1759
- "name": "accountId",
1747
+ "file": {
1748
+ "description": "Path to the ZIP file to import (must be in the same format as the export)",
1749
+ "name": "file",
1760
1750
  "required": false
1761
1751
  }
1762
1752
  },
1763
- "description": "Invites the Service Account to your Google Play Account.",
1753
+ "description": "Imports an Android Keystore to your ShipThis account for the specified game.",
1764
1754
  "examples": [
1765
- "<%= config.bin %> <%= command.id %>"
1755
+ "<%= config.bin %> <%= command.id %> path/to/import.zip -g abfd5b00",
1756
+ "<%= config.bin %> <%= command.id %> --jksFile path/to/file.jks --keystorePassword yourpass --keyPassword yourkeypass"
1766
1757
  ],
1767
1758
  "flags": {
1768
1759
  "gameId": {
@@ -1773,49 +1764,57 @@
1773
1764
  "multiple": false,
1774
1765
  "type": "option"
1775
1766
  },
1776
- "prompt": {
1777
- "char": "p",
1778
- "description": "Prompt for the Google Play Account ID",
1779
- "name": "prompt",
1780
- "allowNo": false,
1781
- "type": "boolean"
1767
+ "jksFile": {
1768
+ "description": "Path to the JKS file to import (requires passwords)",
1769
+ "name": "jksFile",
1770
+ "hasDynamicHelp": false,
1771
+ "multiple": false,
1772
+ "type": "option"
1782
1773
  },
1783
- "waitForGoogleApp": {
1784
- "char": "p",
1785
- "description": "Waits for the Google Play app to be created (10 mins).",
1786
- "name": "waitForGoogleApp",
1787
- "allowNo": false,
1788
- "type": "boolean"
1774
+ "keystorePassword": {
1775
+ "description": "Keystore password (required when using --jksFile)",
1776
+ "name": "keystorePassword",
1777
+ "hasDynamicHelp": false,
1778
+ "multiple": false,
1779
+ "type": "option"
1789
1780
  },
1790
- "waitForAuth": {
1791
- "char": "w",
1792
- "description": "Wait for Google Authentication (10 mins).",
1793
- "name": "waitForAuth",
1781
+ "keyPassword": {
1782
+ "description": "Key alias password (required when using --jksFile)",
1783
+ "name": "keyPassword",
1784
+ "hasDynamicHelp": false,
1785
+ "multiple": false,
1786
+ "type": "option"
1787
+ },
1788
+ "force": {
1789
+ "char": "f",
1790
+ "description": "Overwrite any existing keystore without confirmation",
1791
+ "name": "force",
1794
1792
  "allowNo": false,
1795
1793
  "type": "boolean"
1796
1794
  }
1797
1795
  },
1798
1796
  "hasDynamicHelp": false,
1799
1797
  "hiddenAliases": [],
1800
- "id": "game:android:apiKey:invite",
1798
+ "id": "game:android:keyStore:import",
1801
1799
  "pluginAlias": "shipthis",
1802
1800
  "pluginName": "shipthis",
1803
1801
  "pluginType": "core",
1804
1802
  "strict": true,
1803
+ "enableJsonFlag": false,
1805
1804
  "isESM": true,
1806
1805
  "relativePath": [
1807
1806
  "dist",
1808
1807
  "commands",
1809
1808
  "game",
1810
1809
  "android",
1811
- "apiKey",
1812
- "invite.js"
1810
+ "keyStore",
1811
+ "import.js"
1813
1812
  ]
1814
1813
  },
1815
- "game:android:apiKey:status": {
1814
+ "game:android:keyStore:status": {
1816
1815
  "aliases": [],
1817
1816
  "args": {},
1818
- "description": "Displays the status of the Android Service Account API Key for a specific game.",
1817
+ "description": "Displays the status of the Android Keystore for a specific game.",
1819
1818
  "examples": [
1820
1819
  "<%= config.bin %> <%= command.id %>",
1821
1820
  "<%= config.bin %> <%= command.id %> --gameId 0c179fc4"
@@ -1832,18 +1831,19 @@
1832
1831
  },
1833
1832
  "hasDynamicHelp": false,
1834
1833
  "hiddenAliases": [],
1835
- "id": "game:android:apiKey:status",
1834
+ "id": "game:android:keyStore:status",
1836
1835
  "pluginAlias": "shipthis",
1837
1836
  "pluginName": "shipthis",
1838
1837
  "pluginType": "core",
1839
1838
  "strict": true,
1839
+ "enableJsonFlag": false,
1840
1840
  "isESM": true,
1841
1841
  "relativePath": [
1842
1842
  "dist",
1843
1843
  "commands",
1844
1844
  "game",
1845
1845
  "android",
1846
- "apiKey",
1846
+ "keyStore",
1847
1847
  "status.js"
1848
1848
  ]
1849
1849
  },
@@ -2238,5 +2238,5 @@
2238
2238
  ]
2239
2239
  }
2240
2240
  },
2241
- "version": "0.1.17"
2241
+ "version": "0.1.19"
2242
2242
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shipthis",
3
3
  "description": "ShipThis manages building and uploading your Godot games to the App Store and Google Play.",
4
- "version": "0.1.17",
4
+ "version": "0.1.19",
5
5
  "author": "Hello Invent Ltd",
6
6
  "bin": {
7
7
  "shipthis": "./bin/run.js"