shipthis 0.1.35 → 0.1.36

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.
Files changed (88) hide show
  1. package/README.md +223 -80
  2. package/assets/markdown/agreement-update.md.ejs +12 -0
  3. package/dist/{AppleBundleIdDetails-N_j1wv6f.js → AppleBundleIdDetails-pEVOUXTQ.js} +3 -5
  4. package/dist/{Command-DN1j3tjt.js → Command-DhAVAdiI.js} +1 -2
  5. package/dist/{CommandGame-D2NqytWc.js → CommandGame-C-oV-hb4.js} +2 -2
  6. package/dist/{Create-BRdv5jXQ.js → Create-Dg9ZlwEd.js} +1 -4
  7. package/dist/{GameStatus-joyHPy0f.js → GameStatus-Dm9TqFfW.js} +1 -4
  8. package/dist/{Import-BNMHsJoM.js → Import-BFNNkN-I.js} +2 -5
  9. package/dist/{JobLogTail-D35FO5v-.js → JobLogTail-RTNIiAUk.js} +2 -5
  10. package/dist/{JobProgress-D-9KESaA.js → JobProgress-dFWcT0CQ.js} +16 -18
  11. package/dist/{JobStatusTable-DIJ_h-gi.js → JobStatusTable-BlvMuWF7.js} +2 -4
  12. package/dist/{ProjectCredentialsTable-BMKgv99h.js → ProjectCredentialsTable-CMBnYLou.js} +2 -2
  13. package/dist/{UserCredentialsTable-CUrTDzTK.js → UserCredentialsTable-oxE3mDmE.js} +1 -3
  14. package/dist/{baseAppleCommand-Cs9a52e5.js → baseAppleCommand-cnLvBz95.js} +1 -1
  15. package/dist/{baseGameAndroidCommand-BCB1SMCf.js → baseGameAndroidCommand-DUDYisYm.js} +1 -2
  16. package/dist/commands/apiKey/create.js +2 -6
  17. package/dist/commands/apiKey/list.js +2 -6
  18. package/dist/commands/apiKey/revoke.js +2 -6
  19. package/dist/commands/apple/apiKey/create.js +5 -9
  20. package/dist/commands/apple/apiKey/export.js +4 -8
  21. package/dist/commands/apple/apiKey/import.js +4 -8
  22. package/dist/commands/apple/apiKey/status.js +3 -7
  23. package/dist/commands/apple/certificate/create.js +5 -9
  24. package/dist/commands/apple/certificate/export.js +4 -8
  25. package/dist/commands/apple/certificate/import.js +4 -8
  26. package/dist/commands/apple/certificate/status.js +3 -7
  27. package/dist/commands/apple/login.js +12 -2
  28. package/dist/commands/apple/status.js +3 -7
  29. package/dist/commands/dashboard.js +11 -1
  30. package/dist/commands/game/android/apiKey/connect.js +7 -11
  31. package/dist/commands/game/android/apiKey/create.js +9 -13
  32. package/dist/commands/game/android/apiKey/export.js +5 -9
  33. package/dist/commands/game/android/apiKey/import.js +5 -9
  34. package/dist/commands/game/android/apiKey/invite.js +13 -4
  35. package/dist/commands/game/android/apiKey/policy.js +2 -6
  36. package/dist/commands/game/android/apiKey/status.js +5 -9
  37. package/dist/commands/game/android/keyStore/create.js +6 -10
  38. package/dist/commands/game/android/keyStore/export.js +4 -8
  39. package/dist/commands/game/android/keyStore/import.js +7 -11
  40. package/dist/commands/game/android/keyStore/status.js +6 -10
  41. package/dist/commands/game/android/status.js +12 -1
  42. package/dist/commands/game/build/download.js +2 -6
  43. package/dist/commands/game/build/list.js +3 -7
  44. package/dist/commands/game/create.js +12 -2
  45. package/dist/commands/game/details.js +3 -7
  46. package/dist/commands/game/export.js +12 -1
  47. package/dist/commands/game/ios/app/addTester.js +3 -7
  48. package/dist/commands/game/ios/app/create.js +2 -6
  49. package/dist/commands/game/ios/app/status.js +5 -9
  50. package/dist/commands/game/ios/app/sync.js +3 -7
  51. package/dist/commands/game/ios/profile/create.js +5 -9
  52. package/dist/commands/game/ios/profile/export.js +4 -8
  53. package/dist/commands/game/ios/profile/import.js +4 -8
  54. package/dist/commands/game/ios/profile/status.js +4 -8
  55. package/dist/commands/game/ios/status.js +9 -13
  56. package/dist/commands/game/ios/wizard.js +2 -6
  57. package/dist/commands/game/job/list.js +2 -6
  58. package/dist/commands/game/job/status.js +7 -11
  59. package/dist/commands/game/list.js +2 -6
  60. package/dist/commands/game/ship.js +16 -14
  61. package/dist/commands/game/status.js +6 -10
  62. package/dist/commands/game/wizard.js +13 -17
  63. package/dist/commands/internal/fastlane.js +12 -1
  64. package/dist/commands/internal/readme.js +12 -4
  65. package/dist/commands/login.js +26 -4
  66. package/dist/commands/status.js +6 -8
  67. package/dist/{export-DFCZKNQk.js → export-Bd552LBe.js} +1 -1
  68. package/dist/{import-BpGyif-m.js → import-D-EL9sQJ.js} +1 -1
  69. package/dist/{index-izrACZbC.js → index-1H48f5j2.js} +1 -1
  70. package/dist/index-BtPf4vzY.js +1903 -0
  71. package/dist/{index-DlE_SPt3.js → index-DCN43FhY.js} +3 -5
  72. package/dist/{index-BTXEUd8W.js → index-DwATmUTQ.js} +4 -6
  73. package/dist/{upload-D19OQsbn.js → upload-Dm38PqhN.js} +1 -1
  74. package/dist/{useAppleApp-BZc_cNa-.js → useAppleApp-BKPntZPm.js} +1 -1
  75. package/dist/{useAppleBundleId-DvMXAvWD.js → useAppleBundleId-DvQKEEy4.js} +1 -1
  76. package/dist/{useGoogleStatus-Cx_QIsXa.js → useGoogleStatus-D9jjGa--.js} +1 -2
  77. package/dist/{useProjectCredentials-DxdwJCfU.js → useProjectCredentials-BjsS28hP.js} +1 -3
  78. package/dist/{useWebSocket-cM5yOcDv.js → useWebSocket-CIeyHqxG.js} +1 -1
  79. package/docs/assets/st.png +0 -0
  80. package/docs/game/ship.md +4 -4
  81. package/docs/login.md +6 -2
  82. package/docs/status.md +1 -1
  83. package/package.json +8 -2
  84. package/dist/ejs-DirFZbza.js +0 -716
  85. package/dist/index-BwnzoldS.js +0 -784
  86. package/dist/index-CJWMt1s-.js +0 -153
  87. package/dist/index-hoHfGrjg.js +0 -221
  88. package/dist/useAndroidServiceAccountTestResult-CwKeW0ED.js +0 -50
package/README.md CHANGED
@@ -1,54 +1,33 @@
1
- <h1 align="center">
2
- <a href="https://shipth.is">
1
+ # ShipThis <a href="https://discord.gg/gPjn3S99k4"><img alt="discord" src="https://img.shields.io/discord/1304144717239554069?style=flat-square&label=%F0%9F%92%AC%20discord&color=00ACD7"></a><a href="https://shipth.is/?ref=github_readme"><img src="docs/assets/st.png" align="right" height="80" alt="ShipThis" /></a>
2
+
3
+ - Build and publish Godot mobile games to the **App Store** and **Google Play**
4
+ - Handles certificates, keystores, API keys, and provisioning profiles
5
+ - Cloud builds are free for most solo-devs
6
+
7
+ <p align="center">
8
+ <a href="https://shipth.is/docs/reference/game/ship?ref=github_readme">
3
9
  <picture>
4
- <source height="56" width="260" srcset="docs/assets/logo_dark.svg" media="(prefers-color-scheme: dark)">
5
- <img height="56" width="260" alt="ShipThis Home" src="docs/assets/logo_light.svg">
10
+ <img height="266" width="504" alt="ShipThis Command - ship output" src="docs/assets/ship-outputx0.8.gif">
6
11
  </picture>
7
12
  </a>
8
- <br>
9
- <a href="https://discord.gg/gPjn3S99k4">
10
- <img alt="discord" src="https://img.shields.io/discord/1304144717239554069?style=flat-square&label=%F0%9F%92%AC%20discord&color=00ACD7">
11
- </a>
12
- </h1>
13
- <p align="center">
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
- </p>
16
- <p align="center">
17
- ShipThis compiles your game on managed cloud servers. You do not need Xcode, Android Studio, or SDK installations. You can run it manually or from CI.
18
13
  </p>
19
14
 
20
- <p align="center">
21
- <picture>
22
- <img height="266" width="504" alt="ShipThis Command - ship output" src="docs/assets/ship-outputx0.8.gif">
23
- </picture>
24
- </p>
25
-
26
-
27
15
  > [!IMPORTANT]
28
- > ShipThis is in open beta. While in beta, it is completely free to use.
29
-
30
- ---
31
-
32
- ## Why use ShipThis?
33
-
34
- - **Always a free tier** - Enough build minutes for most solo devs
35
- - **One-command setup** - Use the interactive [`wizard`](https://shipth.is/docs/reference/game/wizard) to configure your game
36
- - **No additional tools** - No Xcode, Android Studio, or SDK installation required
37
- - **Simplified provisioning** - We handle iOS certificates, Android keystores, app signing, and API keys
38
- - **One-command deployment** - Publish to TestFlight or Google Play with a single command
16
+ > Currently in open beta and free to use. It will **always** be free for most solo devs.
39
17
 
40
18
  ## Quick start
41
19
 
42
20
  ### Requirements
43
21
 
44
- - A Godot 3.6 or 4.X game
22
+ - A Godot 3.6 or 4.x game
45
23
  - [Node.js](https://nodejs.org/en/download/) version 18.0 or above
46
24
  - **To publish an Android game** - a [Play Console developer account](https://play.google.com/apps/publish/signup) (not required for building an APK/AAB)
47
25
  - **To build an iOS game** - an [Apple Developer account](https://developer.apple.com)
48
26
 
49
27
  ### 1. Install ShipThis
50
28
 
51
- ShipThis can be installed as a package via the [NPM package manager](https://www.npmjs.com/). Run the following at the command line:
29
+
30
+ Install via the [NPM package manager](https://www.npmjs.com/):
52
31
 
53
32
  ```bash
54
33
  npm install -g shipthis
@@ -56,9 +35,8 @@ npm install -g shipthis
56
35
 
57
36
  ### 2. Create an account
58
37
 
59
- Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipth.is/docs/reference/login) command.
38
+ Set up an account with ShipThis by logging in for the first time using the [`shipthis login`](https://shipth.is/docs/reference/login?ref=github_readme) command.
60
39
 
61
- > 🛠 All builds run on managed cloud servers - no need to install Xcode or Android Studio locally.
62
40
 
63
41
  ```bash
64
42
  shipthis login
@@ -66,7 +44,7 @@ shipthis login
66
44
 
67
45
  ### 3. Set up your game
68
46
 
69
- Run the [wizard command](https://shipth.is/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):
47
+ Run the [wizard command](https://shipth.is/docs/reference/game/wizard?ref=github_readme) 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):
70
48
 
71
49
  #### Set up an Android game
72
50
 
@@ -104,34 +82,47 @@ shipthis game wizard ios
104
82
 
105
83
  ### 4. Ship
106
84
 
107
- Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipth.is/docs/reference/game/ship) command:
85
+ Now you can publish new versions of your game to TestFlight or Google Play with the [`shipthis game ship`](https://shipth.is/docs/reference/game/ship?ref=github_readme) command:
108
86
 
109
87
  ```bash
110
88
  shipthis game ship
111
89
  ```
112
90
 
113
- - Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting) or [join our Discord](https://discord.gg/gPjn3S99k4)
114
- - For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs)
91
+ - Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting?ref=github_readme) or [join our Discord](https://discord.gg/gPjn3S99k4)
92
+ - For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs?ref=github_readme)
115
93
 
116
94
 
117
95
  ## FAQ
118
96
 
119
- <details>
120
- <summary><strong>Can I build my game as APK without a Google Play account?</strong></summary>
97
+ ### Do I need a Mac to build for iOS?
121
98
 
122
- ---
99
+ No, you do not need a Mac, but you will need an Apple Developer Account.
123
100
 
124
- Yes.
101
+ ShipThis handles iOS builds on managed macOS cloud servers. The CLI connects to the Apple Developer Portal and sets everything up for you.
125
102
 
126
- Running the wizard command will create a Service Account Key for automatic publishing, you might not need this when initially building your game.
103
+ ### Which versions of Godot are supported?
127
104
 
128
- You can run the steps below to create a ShipThis account, create the game, create a keystore, and then run the ship command. Later, when you need to setup publishing you can re-run the wizard command.
105
+ We support **all stable Godot versions since 3.6**, including:
129
106
 
107
+ | 3.6 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 |
108
+ |---------|----------|----------|--------|-----|--------|
109
+ | 3.6.1 | 4.0.1 | 4.1.1 | 4.2.1 | | 4.4.1 |
110
+ | | 4.0.2 | 4.1.2 | 4.2.2 | | |
111
+ | | 4.0.3 | 4.1.3 | | | |
112
+ | | 4.0.4 | 4.1.4 | | | |
130
113
 
131
- ```bash
132
- # Create or login to your shipthis account (OTP based login)
133
- shipthis login --email me@email.com
114
+ You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning?ref=github_readme).
115
+
116
+
117
+ ### Can I build my game as APK without a Google Play account?
134
118
 
119
+ Yes.
120
+
121
+ Running the wizard command will create a Service Account Key for automatic publishing, but you might not need this when initially building your game.
122
+
123
+ You can create a ShipThis account, create the game, create a keystore, and then run the ship command. Later, when you need to set up publishing, you can re-run the wizard command.
124
+
125
+ ```bash
135
126
  # Create a ShipThis game - run this in a dir with a project.godot file
136
127
  shipthis game create --name "My Game" --androidPackageName "com.my.game"
137
128
 
@@ -142,73 +133,225 @@ shipthis game android keyStore create
142
133
  shipthis game ship --follow --platform android --skipPublish --downloadAPK game.apk
143
134
  ```
144
135
 
136
+ ### Do I need to create an export_presets.cfg file?
145
137
 
146
- </details>
138
+ No, the ShipThis build server will generate a valid **export_presets.cfg** for your game.
147
139
 
140
+ If you provide an **export_presets.cfg** file, the desired preset values will be merged with the generated file.
148
141
 
149
- <details>
150
- <summary><strong>Do I need a Mac to build for iOS?</strong></summary>
142
+ ### How much does it cost to use ShipThis?
151
143
 
152
- ---
144
+ Currently free while in open beta. Planned pricing is on the [pricing page](https://shipth.is/pricing?ref=github_readme).
153
145
 
154
- No, you do not need a Mac, but you will need an Apple Developer Account.
146
+ ### What does the `shipthis game wizard` do?
155
147
 
156
- ShipThis handles iOS builds on managed macOS cloud servers. The command-line tool communicates with the Apple Developer Portal to configure everything on your behalf.
148
+ The wizard command runs different steps for Android and iOS. Each "step" is another ShipThis command - meaning you can run each step by itself. The wizard can be re-run any number of times.
157
149
 
158
- </details>
150
+ The Android steps are described in the [Android set-up guide](https://shipth.is/docs/android?ref=github_readme).
151
+ The iOS steps are described in the [iOS setup guide](https://shipth.is/docs/ios).
159
152
 
160
153
  <details>
161
- <summary><strong>Which versions of Godot are supported?</strong></summary>
154
+ <summary><strong>The commands run for Android</strong></summary>
162
155
 
163
- ---
156
+ 1. Creating a new ShipThis game
164
157
 
165
- We support **all stable Godot versions since 3.6**, including:
158
+ ```bash
159
+ shipthis game create --name "Pay2Lose" --androidPackageName "com.pay.two.lose"
160
+ ```
166
161
 
167
- | 3.6 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 |
168
- |---------|----------|----------|--------|-----|--------|
169
- | 3.6.1 | 4.0.1 | 4.1.1 | 4.2.1 | | 4.4.1 |
170
- | | 4.0.2 | 4.1.2 | 4.2.2 | | |
171
- | | 4.0.3 | 4.1.3 | | | |
172
- | | 4.0.4 | 4.1.4 | | | |
162
+ 1. Creating or importing an Android Keystore
163
+
164
+ To create a new Keystore:
165
+
166
+ ```bash
167
+ shipthis game android keyStore create
168
+ ```
169
+
170
+ To import an existing Keystore see [the docs for the `shipthis game android keyStore import` command](https://shipth.is/docs/reference/game/android/keyStore?ref=github_readme#game-android-keystore-import)
171
+
172
+ 1. Connecting ShipThis with Google
173
+
174
+ Once connected, ShipThis can generate a Service Account API Key for automatic publishing.
175
+
176
+ ```bash
177
+ shipthis game android apiKey connect
178
+ ```
179
+
180
+ 1. Create a Service Account and API Key
181
+
182
+ ```bash
183
+ shipthis game android apiKey create
184
+ ```
185
+
186
+ 1. Create and download an initial build (AAB file)
187
+
188
+ When you first create your game in the Google Play Console, you will be asked to upload an initial build in AAB format.
189
+
190
+ ```bash
191
+ shipthis game ship --platform android --follow --skipPublish --download game.aab
192
+ ```
193
+
194
+ 1. Create an app in the Google Play Console
173
195
 
174
- You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning).
196
+ You will need to manually create the game itself in Google Play. This will involve entering the name, agreeing to Google Play's TOS and uploading an initial build.
197
+
198
+ 1. Invite the Service Account
199
+
200
+ Before the Service Account API Key can submit your games automatically, you will need to invite the Service Account to your Google Play account. To do this you will need your Google Play Account ID.
201
+
202
+ ```bash
203
+ shipthis game android apiKey invite XXXXXXXXX
204
+ ```
175
205
 
176
206
  </details>
177
207
 
178
208
  <details>
179
- <summary><strong>Do I need to create an export_presets.cfg file?</strong></summary>
209
+ <summary><strong>The commands run for iOS</strong></summary>
180
210
 
181
- ---
211
+ 1. Create a new ShipThis game
182
212
 
183
- No, the ShipThis build server will generate a valid **export_presets.cfg** for your game.
213
+ ```bash
214
+ shipthis game create --name "Tap to Win Nothing" --iosBundleId "com.tap.to.win.nothing"
215
+ ```
184
216
 
185
- If you provide an **export_presets.cfg** file, the desired preset values will be merged with the generated file.
217
+ 1. Connect ShipThis with Apple
218
+
219
+ We recommend enabling 2FA for your account. ShipThis generates a session cookie for communicating with the Apple Developer Portal.
220
+
221
+ ```bash
222
+ shipthis apple login
223
+ ```
224
+
225
+ 1. Create an App Store Connect API Key
226
+
227
+ ShipThis uses this API key to submit new versions of your game.
228
+
229
+ ```bash
230
+ shipthis apple apiKey create
231
+ ```
232
+
233
+ 1. Create an iOS Distribution Certificate
234
+
235
+ This certificate is used to sign your game on the ShipThis build servers.
236
+
237
+ ```bash
238
+ shipthis apple certificate create
239
+ ```
240
+
241
+ 1. Create an App Store App and BundleId
242
+
243
+ ```bash
244
+ shipthis game ios app create
245
+ ```
246
+
247
+ 1. Synchronize Permissions (Capabilities)
248
+
249
+ ShipThis reads `export_presets.cfg` and enables supported capabilities in the Apple Developer Portal (currently Access WiFi, Push Notifications).
250
+
251
+ ```bash
252
+ shipthis game ios app sync
253
+ ```
254
+
255
+ 1. Create a Provisioning Profile
256
+
257
+ Required to run on devices and for distribution. You can view profiles at Apple’s portal: https://developer.apple.com/account/resources/profiles/list
258
+
259
+ ```bash
260
+ shipthis game ios profile create
261
+ ```
186
262
 
187
263
  </details>
188
264
 
189
265
  <details>
190
- <summary><strong>How much does it cost to use ShipThis?</strong></summary>
266
+ <summary><strong>Watch: The wizard run for Android</strong></summary>
191
267
 
192
- ---
268
+ <p align="center">
269
+ <picture>
270
+ <img height="431" width="672" alt="ShipThis Command - Android Wizard - published game" src="docs/assets/wizard-android-existingx0.5.gif">
271
+ </picture>
272
+ </p>
273
+
274
+ </details>
275
+
276
+ <details>
277
+ <summary><strong>Watch: The wizard run for iOS</strong></summary>
193
278
 
194
- ShipThis is currently in open-beta as so it is completely free to use. You can see our planned pricing on the [pricing page](https://shipth.is/pricing).
279
+ <p align="center">
280
+ <a href="https://www.youtube.com/watch?v=ijTUFVk1duw" target="_blank">
281
+ <img src="https://img.youtube.com/vi/ijTUFVk1duw/0.jpg" alt="Watch the iOS setup video" width="640" height="480">
282
+ </a>
283
+ </p>
195
284
 
196
285
  </details>
197
286
 
287
+ ### How do I debug a failed build?
288
+
289
+ If a build fails, rerun it for only the failing platform with the `--follow` flag to view the logs in real time:
290
+
291
+ ```bash
292
+ shipthis game ship --platform android --follow
293
+ ```
294
+
295
+ You can also review logs at any time in the [dashboard](https://shipth.is/dashboard?ref=github_readme).
296
+
297
+ See the [Troubleshooting Guide](https://shipth.is/docs/troubleshooting?ref=github_readme) for common checks.
298
+
299
+ If the issue persists, we can help you directly in our [Discord](https://discord.gg/gPjn3S99k4).
300
+
301
+ ### Does ShipThis work with CI/CD pipelines?
302
+
303
+ Yes. ShipThis works with CI/CD pipelines, allowing you to run automated builds without an interactive shell.
304
+
305
+ To get started, create an API key, for your pipeline environment:
306
+
307
+ ```bash
308
+ # API keys can have a maximum lifetime of 1 year
309
+ shipthis apiKey create --durationDays 365 --name ci-key
310
+ ```
311
+
312
+ The secret value will only be displayed once and this can be used as an environment variable called `SHIPTHIS_TOKEN`.
313
+
314
+ ```bash
315
+ export SHIPTHIS_TOKEN=your_token_here
316
+ shipthis game ship --platform android --follow
317
+ shipthis game ship --platform ios --follow
318
+ ```
319
+
320
+ For GitHub users, we provide an official **GitHub Action** for easy integration: https://github.com/shipth-is/action
321
+
322
+ See the [API Keys documentation](https://shipth.is/docs/reference/apiKey/?ref=github_readme) for more information.
323
+
324
+ ### How are my credentials stored and secured?
325
+
326
+ ShipThis uses short-lived, signed URLs and ephemeral build environments.
327
+
328
+ - Credentials are stored in a private DigitalOcean Space.
329
+ - Every access is logged for a full audit trail.
330
+ - When a build starts, credentials are fetched on-demand and loaded as environment variables.
331
+ - Temporary files are created only if needed and cleaned up when the job finishes.
332
+
333
+ We store:
334
+
335
+ - Android Keystores
336
+ - Google Play Service Account API keys
337
+ - iOS provisioning profiles
338
+ - App Store Connect API keys
339
+ - iOS distribution certificates
340
+
198
341
  ## 📖 Command Reference
199
342
 
200
343
  ### 🗂 Topics
201
344
 
202
- - [apiKey](https://shipth.is/docs/reference/apiKey) - Commands related to ShipThis API Keys
203
- - [apple](https://shipth.is/docs/reference/apple) - Commands that relate to linking your ShipThis account with your Apple Developer Account
204
- - [game](https://shipth.is/docs/reference/game) - Commands that relate to configuring the specific game in the current working directory.
345
+ - [apiKey](https://shipth.is/docs/reference/apiKey?ref=github_readme) - Commands related to ShipThis API Keys
346
+ - [apple](https://shipth.is/docs/reference/apple?ref=github_readme) - Commands that relate to linking your ShipThis account with your Apple Developer Account
347
+ - [game](https://shipth.is/docs/reference/game?ref=github_readme) - Commands that relate to configuring the specific game in the current working directory.
205
348
 
206
349
  ### 🔧 Commands
207
350
 
208
- - [dashboard](https://shipth.is/docs/reference/dashboard) - Opens the web browser to your shipth.is dashboard
209
- - [login](https://shipth.is/docs/reference/login) - Sign in or create a new account
210
- - [status](https://shipth.is/docs/reference/status) - Display your overall ShipThis account status
211
- - [help](https://shipth.is/docs/reference/help) - Display help for a specific topic or command
351
+ - [dashboard](https://shipth.is/docs/reference/dashboard?ref=github_readme) - Opens the web browser to your shipth.is dashboard
352
+ - [login](https://shipth.is/docs/reference/login?ref=github_readme) - Sign in or create a new account
353
+ - [status](https://shipth.is/docs/reference/status?ref=github_readme) - Display your overall ShipThis account status
354
+ - [help](https://shipth.is/docs/reference/help?ref=github_readme) - Display help for a specific topic or command
212
355
 
213
356
  ## 🌍 Community
214
357
 
@@ -0,0 +1,12 @@
1
+ # Warning - there are changes to our agreements:
2
+
3
+ <% changes.forEach((agreement) => { %>
4
+ ## <%= agreement.agreementType === 'PRIVACY_POLICY' ? 'Privacy Policy' : 'Terms and Conditions' %> Update (<%= agreement.versionName %>)
5
+ **<%= agreement.description %>**
6
+ Read more: <%= agreement.url %>
7
+
8
+ <% }); %>
9
+
10
+ Hide this message by running: `shipthis login --acceptAgreements`
11
+
12
+ ---
@@ -11,13 +11,13 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import './index-BwnzoldS.js';
14
+ import './index-BtPf4vzY.js';
15
15
  import '@oclif/core';
16
16
  import '@tanstack/react-query';
17
17
  import 'react';
18
18
  import 'crypto-js';
19
19
  import 'uuid';
20
- import { u as useAppleApp } from './useAppleApp-BZc_cNa-.js';
20
+ import { u as useAppleApp } from './useAppleApp-BKPntZPm.js';
21
21
  import 'fast-glob';
22
22
  import 'yazl';
23
23
  import 'socket.io-client';
@@ -27,12 +27,10 @@ import { T as Title } from './Title-BCQtayg6.js';
27
27
  import 'string-length';
28
28
  import 'strip-ansi';
29
29
  import 'open';
30
- import './index-hoHfGrjg.js';
31
- import './ejs-DirFZbza.js';
32
30
  import 'marked';
33
31
  import 'marked-terminal';
34
32
  import 'qrcode';
35
- import { u as useAppleBundleId } from './useAppleBundleId-DvMXAvWD.js';
33
+ import { u as useAppleBundleId } from './useAppleBundleId-DvQKEEy4.js';
36
34
 
37
35
  const AppleAppDetails = (props) => {
38
36
  const { data, isLoading } = useAppleApp(props);
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { QueryClientProvider } from '@tanstack/react-query';
3
3
  import { useScreenSize } from 'fullscreen-ink';
4
4
  import { Box } from 'ink';
5
- import { K as queryClient } from './index-BwnzoldS.js';
5
+ import { Y as queryClient, Z as CommandProvider } from './index-BtPf4vzY.js';
6
6
  import 'axios';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
@@ -19,7 +19,6 @@ import 'react';
19
19
  import 'socket.io-client';
20
20
  import 'fast-glob';
21
21
  import 'yazl';
22
- import { b as CommandProvider } from './index-hoHfGrjg.js';
23
22
 
24
23
  const Command = ({ children, command }) => {
25
24
  const { width } = useScreenSize();
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { c as GameProvider } from './index-hoHfGrjg.js';
3
- import { C as Command } from './Command-DN1j3tjt.js';
2
+ import { _ as GameProvider } from './index-BtPf4vzY.js';
3
+ import { C as Command } from './Command-DhAVAdiI.js';
4
4
 
5
5
  const CommandGame = ({ children, command }) => /* @__PURE__ */ jsx(Command, { command, children: /* @__PURE__ */ jsx(GameProvider, { children }) });
6
6
 
@@ -3,7 +3,7 @@ import { useQueryClient } from '@tanstack/react-query';
3
3
  import axios from 'axios';
4
4
  import { Box } from 'ink';
5
5
  import { useContext } from 'react';
6
- import { p as getAuthedHeaders, o as API_URL } from './index-BwnzoldS.js';
6
+ import { R as GameContext, t as getAuthedHeaders, s as API_URL, a1 as cacheKeys } from './index-BtPf4vzY.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:fs';
@@ -14,7 +14,6 @@ import 'readline-sync';
14
14
  import 'luxon';
15
15
  import 'isomorphic-git';
16
16
  import '@oclif/core';
17
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-CwKeW0ED.js';
18
17
  import 'fast-glob';
19
18
  import 'uuid';
20
19
  import 'yazl';
@@ -24,12 +23,10 @@ import 'string-length';
24
23
  import 'strip-ansi';
25
24
  import 'open';
26
25
  import '@inkjs/ui';
27
- import './ejs-DirFZbza.js';
28
26
  import 'marked';
29
27
  import 'marked-terminal';
30
28
  import 'qrcode';
31
29
  import { R as RunWithSpinner } from './RunWithSpinner-DucRnFp6.js';
32
- import { G as GameContext } from './index-hoHfGrjg.js';
33
30
 
34
31
  const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
35
32
  const { gameId } = useContext(GameContext);
@@ -1,9 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Text, Box } from 'ink';
3
3
  import { useState, useEffect, useContext } from 'react';
4
- import { b as getShortDate, P as Platform, E as getProject, F as getProjectPlatformProgress } from './index-BwnzoldS.js';
4
+ import { b as getShortUUID, c as getShortDate, P as Platform, N as makeHumanReadable, O as getProject, Q as getProjectPlatformProgress, R as GameContext, S as CommandContext } from './index-BtPf4vzY.js';
5
5
  import 'ink-spinner';
6
- import { g as getShortUUID, m as makeHumanReadable } from './index-CJWMt1s-.js';
7
6
  import '@tanstack/react-query';
8
7
  import 'axios';
9
8
  import 'luxon';
@@ -19,12 +18,10 @@ import { S as StatusTable } from './StatusTable-DzRWcMr4.js';
19
18
  import 'open';
20
19
  import '@inkjs/ui';
21
20
  import 'node:path';
22
- import './ejs-DirFZbza.js';
23
21
  import 'marked';
24
22
  import 'marked-terminal';
25
23
  import { N as NextSteps } from './NextSteps-DbJHmscQ.js';
26
24
  import 'qrcode';
27
- import { G as GameContext, C as CommandContext } from './index-hoHfGrjg.js';
28
25
 
29
26
  function isPlatformConfigured(platform, progress) {
30
27
  if (!progress) return false;
@@ -11,7 +11,7 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import { K as queryClient, P as Platform, C as CredentialsType } from './index-BwnzoldS.js';
14
+ import { Y as queryClient, a1 as cacheKeys, P as Platform, C as CredentialsType, R as GameContext } from './index-BtPf4vzY.js';
15
15
  import '@oclif/core';
16
16
  import { useMutation } from '@tanstack/react-query';
17
17
  import 'crypto-js';
@@ -24,13 +24,10 @@ import 'string-length';
24
24
  import 'strip-ansi';
25
25
  import 'open';
26
26
  import '@inkjs/ui';
27
- import './ejs-DirFZbza.js';
28
27
  import 'marked';
29
28
  import 'marked-terminal';
30
29
  import 'qrcode';
31
- import { G as GameContext } from './index-hoHfGrjg.js';
32
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-CwKeW0ED.js';
33
- import { i as importCredential } from './import-BpGyif-m.js';
30
+ import { i as importCredential } from './import-D-EL9sQJ.js';
34
31
 
35
32
  async function importKeystore({ log = () => {
36
33
  }, ...opt }) {
@@ -7,13 +7,11 @@ import { useState, useRef, useEffect } from 'react';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
9
9
  import 'uuid';
10
- import { p as getAuthedHeaders, o as API_URL, I as castArrayObjectDates, J as JobStatus, a9 as castJobDates, a7 as castObjectDates, aa as getShortTime } from './index-BwnzoldS.js';
11
- import { d as getStageColor, j as getMessageColor } from './index-CJWMt1s-.js';
10
+ import { a1 as cacheKeys, t as getAuthedHeaders, s as API_URL, X as castArrayObjectDates, L as JobStatus, ay as useJob, az as castJobDates, aw as castObjectDates, M as getStageColor, aA as getMessageColor, aB as getShortTime } from './index-BtPf4vzY.js';
12
11
  import 'luxon';
13
12
  import 'fast-glob';
14
13
  import 'yazl';
15
14
  import 'socket.io-client';
16
- import { c as cacheKeys } from './useAndroidServiceAccountTestResult-CwKeW0ED.js';
17
15
  import 'node:crypto';
18
16
  import 'node:path';
19
17
  import 'node:readline';
@@ -22,8 +20,7 @@ import 'readline-sync';
22
20
  import 'isomorphic-git';
23
21
  import '@oclif/core';
24
22
  import 'fullscreen-ink';
25
- import { f as useJob } from './index-hoHfGrjg.js';
26
- import { u as useWebSocket } from './useWebSocket-cM5yOcDv.js';
23
+ import { u as useWebSocket } from './useWebSocket-CIeyHqxG.js';
27
24
  import { T as Title } from './Title-BCQtayg6.js';
28
25
  import stringLength from 'string-length';
29
26
  import stripAnsi from 'strip-ansi';