shipthis 0.1.37 → 0.1.38

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 (87) hide show
  1. package/README.md +37 -32
  2. package/assets/markdown/ship-success.md.ejs +4 -0
  3. package/dist/{AppleBundleIdDetails-KMzyex1H.js → AppleBundleIdDetails-CgleH2pl.js} +3 -3
  4. package/dist/{Command-CHh8RDXK.js → Command-7dCv1F9p.js} +1 -1
  5. package/dist/{CommandGame-Rvmsa7b0.js → CommandGame-er5Ql6hq.js} +2 -2
  6. package/dist/{Create-DInZ_pw-.js → Create-pLXESvEq.js} +1 -1
  7. package/dist/{GameStatus-D7ID10tS.js → GameStatus-B_Iw9tYr.js} +1 -1
  8. package/dist/{Import-BmO8EYKj.js → Import-fIsrfsmr.js} +2 -2
  9. package/dist/{JobLogTail-CYdceTKL.js → JobLogTail-BPcQ8ghI.js} +2 -2
  10. package/dist/{JobProgress-DBCYbWrO.js → JobProgress-CpEatVPs.js} +10 -6
  11. package/dist/{JobStatusTable-DhnhY1_i.js → JobStatusTable-BmJLzsUN.js} +2 -2
  12. package/dist/{ProjectCredentialsTable-BDYVYqAq.js → ProjectCredentialsTable-DvPDhi7C.js} +2 -2
  13. package/dist/{UserCredentialsTable-cDPvjF-F.js → UserCredentialsTable-MBm1vAP3.js} +1 -1
  14. package/dist/{baseAppleCommand-CQ5dOna7.js → baseAppleCommand-uL0Gnav4.js} +1 -1
  15. package/dist/{baseGameAndroidCommand-D4ryZS6A.js → baseGameAndroidCommand-CKTSQyZV.js} +1 -1
  16. package/dist/commands/apiKey/create.js +2 -2
  17. package/dist/commands/apiKey/list.js +2 -2
  18. package/dist/commands/apiKey/revoke.js +2 -2
  19. package/dist/commands/apple/apiKey/create.js +5 -5
  20. package/dist/commands/apple/apiKey/delete.js +3 -3
  21. package/dist/commands/apple/apiKey/export.js +4 -4
  22. package/dist/commands/apple/apiKey/import.js +4 -4
  23. package/dist/commands/apple/apiKey/status.js +3 -3
  24. package/dist/commands/apple/certificate/create.js +5 -5
  25. package/dist/commands/apple/certificate/delete.js +3 -3
  26. package/dist/commands/apple/certificate/export.js +4 -4
  27. package/dist/commands/apple/certificate/import.js +4 -4
  28. package/dist/commands/apple/certificate/status.js +3 -3
  29. package/dist/commands/apple/login.js +1 -1
  30. package/dist/commands/apple/status.js +2 -2
  31. package/dist/commands/dashboard.js +1 -1
  32. package/dist/commands/game/android/apiKey/connect.js +7 -7
  33. package/dist/commands/game/android/apiKey/create.js +9 -9
  34. package/dist/commands/game/android/apiKey/delete.js +3 -3
  35. package/dist/commands/game/android/apiKey/export.js +5 -5
  36. package/dist/commands/game/android/apiKey/import.js +5 -5
  37. package/dist/commands/game/android/apiKey/invite.js +2 -2
  38. package/dist/commands/game/android/apiKey/policy.js +2 -2
  39. package/dist/commands/game/android/apiKey/status.js +5 -5
  40. package/dist/commands/game/android/keyStore/create.js +6 -6
  41. package/dist/commands/game/android/keyStore/delete.js +3 -3
  42. package/dist/commands/game/android/keyStore/export.js +4 -4
  43. package/dist/commands/game/android/keyStore/import.js +7 -7
  44. package/dist/commands/game/android/keyStore/status.js +4 -4
  45. package/dist/commands/game/android/status.js +1 -1
  46. package/dist/commands/game/build/download.js +2 -2
  47. package/dist/commands/game/build/list.js +3 -3
  48. package/dist/commands/game/create.js +1 -1
  49. package/dist/commands/game/details.js +8 -5
  50. package/dist/commands/game/export.js +1 -1
  51. package/dist/commands/game/ios/app/addTester.js +3 -3
  52. package/dist/commands/game/ios/app/create.js +2 -2
  53. package/dist/commands/game/ios/app/status.js +5 -5
  54. package/dist/commands/game/ios/app/sync.js +3 -3
  55. package/dist/commands/game/ios/profile/create.js +5 -5
  56. package/dist/commands/game/ios/profile/delete.js +3 -3
  57. package/dist/commands/game/ios/profile/export.js +4 -4
  58. package/dist/commands/game/ios/profile/import.js +4 -4
  59. package/dist/commands/game/ios/profile/status.js +5 -5
  60. package/dist/commands/game/ios/status.js +7 -7
  61. package/dist/commands/game/ios/wizard.js +2 -2
  62. package/dist/commands/game/job/list.js +2 -2
  63. package/dist/commands/game/job/status.js +5 -5
  64. package/dist/commands/game/list.js +2 -2
  65. package/dist/commands/game/ship.js +17 -10
  66. package/dist/commands/game/status.js +4 -4
  67. package/dist/commands/game/wizard.js +13 -13
  68. package/dist/commands/internal/fastlane.js +1 -1
  69. package/dist/commands/internal/readme.js +1 -1
  70. package/dist/commands/login.js +1 -1
  71. package/dist/commands/status.js +2 -2
  72. package/dist/{export-DujIwhJw.js → export-BwwAjG_F.js} +1 -1
  73. package/dist/{import-DGCqCAcC.js → import-OgFrUsqw.js} +1 -1
  74. package/dist/{index-BPh_qt7t.js → index-C1XpCT_9.js} +4 -4
  75. package/dist/{index-CNsmEDXi.js → index-C2omlhEs.js} +1 -1
  76. package/dist/{index-CmuXyPed.js → index-DHioYOIm.js} +2 -1
  77. package/dist/{index-9LxGafAo.js → index-DVEYxVsH.js} +3 -3
  78. package/dist/{upload-D4x4yCia.js → upload-5s3sy2jF.js} +1 -1
  79. package/dist/{useAppleApp-taaewPSf.js → useAppleApp-szQ_Kg5S.js} +1 -1
  80. package/dist/{useAppleBundleId-BeGViMe7.js → useAppleBundleId-BarLcidd.js} +1 -1
  81. package/dist/{useAppleProfiles-1TtO0aO6.js → useAppleProfiles-C2U4NzC3.js} +1 -1
  82. package/dist/{useGoogleStatus-CSsxEvX7.js → useGoogleStatus-zfnjhtNB.js} +1 -1
  83. package/dist/{useProjectCredentials-Cm50WMZU.js → useProjectCredentials-DbynNY96.js} +1 -1
  84. package/dist/{useWebSocket-BVfn36be.js → useWebSocket-h7smqhZQ.js} +1 -1
  85. package/docs/game/details.md +13 -10
  86. package/docs/game/ship.md +5 -4
  87. package/package.json +1 -1
package/README.md CHANGED
@@ -1,8 +1,9 @@
1
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
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
3
+ * Build iOS and Android binaries (APK, AAB, IPA) for your **Godot** game
4
+ * Publish to the **App Store** and **Google Play** when you are ready
5
+ * Automatically manages **certificates**, **keystores**, **API keys**, and **provisioning profiles**
6
+ * **Free cloud builds** for most solo devs
6
7
 
7
8
  <p align="center">
8
9
  <a href="https://shipth.is/docs/reference/game/ship?ref=github_readme">
@@ -20,13 +21,12 @@
20
21
  ### Requirements
21
22
 
22
23
  - A Godot 3.6 or 4.x game
23
- - [Node.js](https://nodejs.org/en/download/) version 18.0 or above
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)
25
- - **To build an iOS game** - an [Apple Developer account](https://developer.apple.com)
24
+ - [Node.js](https://nodejs.org/en/download/) version 18 or above
25
+ - **To publish an Android game** - a [Play Console Developer account](https://play.google.com/apps/publish/signup) (not required for building an APK/AAB)
26
+ - **To publish an iOS game** - an [Apple Developer account](https://developer.apple.com) (not required for building an IPA)
26
27
 
27
28
  ### 1. Install ShipThis
28
29
 
29
-
30
30
  Install via the [NPM package manager](https://www.npmjs.com/):
31
31
 
32
32
  ```bash
@@ -37,14 +37,15 @@ npm install -g shipthis
37
37
 
38
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.
39
39
 
40
-
41
40
  ```bash
42
41
  shipthis login
43
42
  ```
44
43
 
45
44
  ### 3. Set up your game
46
45
 
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):
46
+ Run the [wizard command](https://shipth.is/docs/reference/game/wizard?ref=github_readme) to configure your game on ShipThis; it will set up everything needed to automatically build and publish your Godot game.
47
+
48
+ The wizard command takes a platform parameter: either **android** or **ios**. Run the command from within a Godot game directory (with a **project.godot** file):
48
49
 
49
50
  #### Set up an Android game
50
51
 
@@ -91,12 +92,11 @@ shipthis game ship
91
92
  - Having issues? Check the [Troubleshooting](https://shipth.is/docs/troubleshooting?ref=github_readme) or [join our Discord](https://discord.gg/gPjn3S99k4)
92
93
  - For detailed documentation, visit [shipth.is/docs](https://shipth.is/docs?ref=github_readme)
93
94
 
94
-
95
95
  ## FAQ
96
96
 
97
97
  ### Do I need a Mac to build for iOS?
98
98
 
99
- No, you do not need a Mac, but you will need an Apple Developer Account.
99
+ No, you do not need a Mac, but if you want to publish to TestFlight or the Apple App Store then you will need an Apple Developer account.
100
100
 
101
101
  ShipThis handles iOS builds on managed macOS cloud servers. The CLI connects to the Apple Developer Portal and sets everything up for you.
102
102
 
@@ -104,35 +104,38 @@ ShipThis handles iOS builds on managed macOS cloud servers. The CLI connects to
104
104
 
105
105
  We support **all stable Godot versions since 3.6**, including:
106
106
 
107
- | [3.6](https://github.com/godotengine/godot/releases/tag/3.6-stable) | [4.0](https://github.com/godotengine/godot/releases/tag/4.0-stable) | [4.1](https://github.com/godotengine/godot/releases/tag/4.1-stable) | [4.2](https://github.com/godotengine/godot/releases/tag/4.2-stable) | [4.3](https://github.com/godotengine/godot/releases/tag/4.3-stable) | [4.4](https://github.com/godotengine/godot/releases/tag/4.4-stable) | [4.5](https://github.com/godotengine/godot/releases/tag/4.5-stable) |
108
- |---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|---------------------------------------------------------------------|
109
- | [3.6.1](https://github.com/godotengine/godot/releases/tag/3.6.1-stable) | [4.0.1](https://github.com/godotengine/godot/releases/tag/4.0.1-stable) | [4.1.1](https://github.com/godotengine/godot/releases/tag/4.1.1-stable) | [4.2.1](https://github.com/godotengine/godot/releases/tag/4.2.1-stable) | [4.3.1 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.3.1) | [4.4.1](https://github.com/godotengine/godot/releases/tag/4.4.1-stable) | |
110
- | [3.7-dev *](https://github.com/shipth-is/godot-3.x-builds/releases/tag/godot-3.x-8c10cd6) | [4.0.2](https://github.com/godotengine/godot/releases/tag/4.0.2-stable) | [4.1.2](https://github.com/godotengine/godot/releases/tag/4.1.2-stable) | [4.2.2](https://github.com/godotengine/godot/releases/tag/4.2.2-stable) | | [4.4.2 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.4.2) | |
111
- | | [4.0.3](https://github.com/godotengine/godot/releases/tag/4.0.3-stable) | [4.1.3](https://github.com/godotengine/godot/releases/tag/4.1.3-stable) | [4.2.3 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.2.3) | | | |
112
- | | [4.0.4](https://github.com/godotengine/godot/releases/tag/4.0.4-stable) | [4.1.4](https://github.com/godotengine/godot/releases/tag/4.1.4-stable) | | | | |
113
- | | [4.0.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.0.5) | [4.1.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.1.5) | | | | |
107
+ | [3.6](https://github.com/godotengine/godot/releases/tag/3.6-stable) | [4.0](https://github.com/godotengine/godot/releases/tag/4.0-stable) | [4.1](https://github.com/godotengine/godot/releases/tag/4.1-stable) | [4.2](https://github.com/godotengine/godot/releases/tag/4.2-stable) | [4.3](https://github.com/godotengine/godot/releases/tag/4.3-stable) | [4.4](https://github.com/godotengine/godot/releases/tag/4.4-stable) | [4.5](https://github.com/godotengine/godot/releases/tag/4.5-stable) |
108
+ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |
109
+ | [3.6.1](https://github.com/godotengine/godot/releases/tag/3.6.1-stable) | [4.0.1](https://github.com/godotengine/godot/releases/tag/4.0.1-stable) | [4.1.1](https://github.com/godotengine/godot/releases/tag/4.1.1-stable) | [4.2.1](https://github.com/godotengine/godot/releases/tag/4.2.1-stable) | [4.3.1 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.3.1) | [4.4.1](https://github.com/godotengine/godot/releases/tag/4.4.1-stable) | [4.5.1](https://github.com/godotengine/godot/releases/tag/4.5.1-stable) |
110
+ | [3.6.2](https://github.com/godotengine/godot/releases/tag/3.6.2-stable) | [4.0.2](https://github.com/godotengine/godot/releases/tag/4.0.2-stable) | [4.1.2](https://github.com/godotengine/godot/releases/tag/4.1.2-stable) | [4.2.2](https://github.com/godotengine/godot/releases/tag/4.2.2-stable) | | [4.4.2 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.4.2) | |
111
+ | | [4.0.3](https://github.com/godotengine/godot/releases/tag/4.0.3-stable) | [4.1.3](https://github.com/godotengine/godot/releases/tag/4.1.3-stable) | [4.2.3 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.2.3) | | | |
112
+ | | [4.0.4](https://github.com/godotengine/godot/releases/tag/4.0.4-stable) | [4.1.4](https://github.com/godotengine/godot/releases/tag/4.1.4-stable) | | | | |
113
+ | | [4.0.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.0.5) | [4.1.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.1.5) | | | | |
114
114
 
115
115
  **\* Custom builds** - [maintained by us](https://github.com/shipth-is/godot-android-sdk-upgrade/) to support **Android SDK 35**.
116
116
 
117
117
  You can read more in our [Godot versioning guide](https://shipth.is/docs/guides/godot-versioning?ref=github_readme).
118
118
 
119
- ### Can I build my game as APK/AAB without a Google Play account?
119
+ ### Can I build my game as APK/AAB/IPA without an Apple or Google account?
120
120
 
121
121
  Yes.
122
122
 
123
- Running the wizard command will create a Service Account Key for automatic publishing, but you might not need this when initially building your game.
123
+ The [wizard command](https://shipth.is/docs/reference/game/wizard?ref=github_readme) is designed to generate your own credentials for signing and publishing, but you might not need this when initially building your game.
124
124
 
125
- 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.
125
+ You can create a ShipThis account, create the game and then run the [ship command](https://shipth.is/docs/reference/game/ship?ref=github_readme) using demo credentials. Later, when you need to set up publishing, you can re-run the wizard command.
126
126
 
127
127
  ```bash
128
128
  # Create a ShipThis game - run this in a dir with a project.godot file
129
- shipthis game create --name "My Game" --androidPackageName "com.my.game"
129
+ shipthis game create --name "My Game"
130
+
131
+ # Run the build, use demo credentials, and download as game.apk
132
+ shipthis game ship --follow --platform android --useDemoCredentials --downloadAPK game.apk
130
133
 
131
- # Create a keystore for signing the APK
132
- shipthis game android keyStore create
134
+ # Run the build, use demo credentials, and download as game.aab
135
+ shipthis game ship --follow --platform android --useDemoCredentials --download game.aab
133
136
 
134
- # Run the build, skip the publish step, and download as game.apk
135
- shipthis game ship --follow --platform android --skipPublish --downloadAPK game.apk
137
+ # Run the build, use demo credentials, and download as game.ipa
138
+ shipthis game ship --follow --platform ios --useDemoCredentials --download game.ipa
136
139
  ```
137
140
 
138
141
  ### Do I need to create an export_presets.cfg file?
@@ -147,9 +150,11 @@ Currently free while in open beta. Planned pricing is on the [pricing page](http
147
150
 
148
151
  ### What does the `shipthis game wizard` do?
149
152
 
150
- 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.
153
+ The wizard is designed to set up everything you need to automatically build and publish your game to the Apple App Store or Google Play.
154
+
155
+ The [wizard command](https://shipth.is/docs/reference/game/wizard?ref=github_readme) 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.
151
156
 
152
- The Android steps are described in the [Android set-up guide](https://shipth.is/docs/android?ref=github_readme).
157
+ The Android steps are described in the [Android setup guide](https://shipth.is/docs/android?ref=github_readme).
153
158
  The iOS steps are described in the [iOS setup guide](https://shipth.is/docs/ios).
154
159
 
155
160
  <details>
@@ -199,7 +204,7 @@ The iOS steps are described in the [iOS setup guide](https://shipth.is/docs/ios)
199
204
 
200
205
  1. Invite the Service Account
201
206
 
202
- 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.
207
+ 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.
203
208
 
204
209
  ```bash
205
210
  shipthis game android apiKey invite XXXXXXXXX
@@ -310,7 +315,7 @@ If the issue persists, we can help you directly in our [Discord](https://discord
310
315
 
311
316
  Yes. ShipThis works with CI/CD pipelines, allowing you to run automated builds without an interactive shell.
312
317
 
313
- To get started, create an API key, for your pipeline environment:
318
+ To get started, create an API key for your pipeline environment:
314
319
 
315
320
  ```bash
316
321
  # API keys can have a maximum lifetime of 1 year
@@ -341,7 +346,7 @@ ShipThis uses short-lived, signed URLs and ephemeral build environments.
341
346
  We store:
342
347
 
343
348
  - Android Keystores
344
- - Google Play Service Account API keys
349
+ - Google Play Service account API keys
345
350
  - iOS provisioning profiles
346
351
  - App Store Connect API keys
347
352
  - iOS distribution certificates
@@ -351,7 +356,7 @@ We store:
351
356
  ### 🗂 Topics
352
357
 
353
358
  - [apiKey](https://shipth.is/docs/reference/apiKey?ref=github_readme) - Commands related to ShipThis API Keys
354
- - [apple](https://shipth.is/docs/reference/apple?ref=github_readme) - Commands that relate to linking your ShipThis account with your Apple Developer Account
359
+ - [apple](https://shipth.is/docs/reference/apple?ref=github_readme) - Commands that relate to linking your ShipThis account with your Apple Developer account
355
360
  - [game](https://shipth.is/docs/reference/game?ref=github_readme) - Commands that relate to configuring the specific game in the current working directory.
356
361
 
357
362
  ### 🔧 Commands
@@ -2,6 +2,10 @@
2
2
 
3
3
  **Your game has been successfully built<% if (wasPublished) { %> and published<% } %>.**
4
4
 
5
+ <% if (usedDemoCredentials) { %>
6
+ > **Note: Demo credentials were used for this build, so the game was not published.**
7
+ <% } %>
8
+
5
9
  ## Next Steps
6
10
 
7
11
  - See all builds in the **Dashboard** [<%= gameBuildsUrl %>](<%= gameBuildsUrl %>)
@@ -11,13 +11,13 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import './index-CmuXyPed.js';
14
+ import './index-DHioYOIm.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-taaewPSf.js';
20
+ import { u as useAppleApp } from './useAppleApp-szQ_Kg5S.js';
21
21
  import 'fast-glob';
22
22
  import 'yazl';
23
23
  import 'socket.io-client';
@@ -30,7 +30,7 @@ import 'open';
30
30
  import 'marked';
31
31
  import 'marked-terminal';
32
32
  import 'qrcode';
33
- import { u as useAppleBundleId } from './useAppleBundleId-BeGViMe7.js';
33
+ import { u as useAppleBundleId } from './useAppleBundleId-BarLcidd.js';
34
34
 
35
35
  const AppleAppDetails = (props) => {
36
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 { X as queryClient, Y as CommandProvider } from './index-CmuXyPed.js';
5
+ import { X as queryClient, Y as CommandProvider } from './index-DHioYOIm.js';
6
6
  import 'axios';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { Z as GameProvider } from './index-CmuXyPed.js';
3
- import { C as Command } from './Command-CHh8RDXK.js';
2
+ import { Z as GameProvider } from './index-DHioYOIm.js';
3
+ import { C as Command } from './Command-7dCv1F9p.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 { R as GameContext, t as getAuthedHeaders, s as API_URL, a0 as cacheKeys } from './index-CmuXyPed.js';
6
+ import { R as GameContext, t as getAuthedHeaders, s as API_URL, a0 as cacheKeys } from './index-DHioYOIm.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:fs';
@@ -1,7 +1,7 @@
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 { g as getShortUUID, f as getShortDate, P as Platform, N as makeHumanReadable, O as getProject, Q as getProjectPlatformProgress, R as GameContext, S as CommandContext } from './index-CmuXyPed.js';
4
+ import { g as getShortUUID, f as getShortDate, P as Platform, N as makeHumanReadable, O as getProject, Q as getProjectPlatformProgress, R as GameContext, S as CommandContext } from './index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import '@tanstack/react-query';
7
7
  import 'axios';
@@ -11,7 +11,7 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import { X as queryClient, a0 as cacheKeys, P as Platform, C as CredentialsType, R as GameContext } from './index-CmuXyPed.js';
14
+ import { X as queryClient, a0 as cacheKeys, P as Platform, C as CredentialsType, R as GameContext } from './index-DHioYOIm.js';
15
15
  import '@oclif/core';
16
16
  import { useMutation } from '@tanstack/react-query';
17
17
  import 'crypto-js';
@@ -27,7 +27,7 @@ import '@inkjs/ui';
27
27
  import 'marked';
28
28
  import 'marked-terminal';
29
29
  import 'qrcode';
30
- import { i as importCredential } from './import-DGCqCAcC.js';
30
+ import { i as importCredential } from './import-OgFrUsqw.js';
31
31
 
32
32
  async function importKeystore({ log = () => {
33
33
  }, ...opt }) {
@@ -7,7 +7,7 @@ import { useState, useRef, useEffect } from 'react';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
9
9
  import 'uuid';
10
- import { a0 as cacheKeys, t as getAuthedHeaders, s as API_URL, V 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-CmuXyPed.js';
10
+ import { a0 as cacheKeys, t as getAuthedHeaders, s as API_URL, V 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-DHioYOIm.js';
11
11
  import 'luxon';
12
12
  import 'fast-glob';
13
13
  import 'yazl';
@@ -20,7 +20,7 @@ import 'readline-sync';
20
20
  import 'isomorphic-git';
21
21
  import '@oclif/core';
22
22
  import 'fullscreen-ink';
23
- import { u as useWebSocket } from './useWebSocket-BVfn36be.js';
23
+ import { u as useWebSocket } from './useWebSocket-h7smqhZQ.js';
24
24
  import { T as Title } from './Title-BCQtayg6.js';
25
25
  import stringLength from 'string-length';
26
26
  import stripAnsi from 'strip-ansi';
@@ -4,7 +4,7 @@ import axios from 'axios';
4
4
  import fg from 'fast-glob';
5
5
  import { v4 } from 'uuid';
6
6
  import { ZipFile } from 'yazl';
7
- import { X as queryClient, a0 as cacheKeys, z as DEFAULT_SHIPPED_FILES_GLOBS, E as DEFAULT_IGNORED_FILES_GLOBS, am as getNewUploadTicket, an as getFileHash, ao as startJobsFromUpload, ap as getPlatformName } from './index-CmuXyPed.js';
7
+ import { X as queryClient, a0 as cacheKeys, z as DEFAULT_SHIPPED_FILES_GLOBS, E as DEFAULT_IGNORED_FILES_GLOBS, am as getNewUploadTicket, an as getFileHash, ao as startJobsFromUpload, ap as getPlatformName } from './index-DHioYOIm.js';
8
8
  import { g as getCWDGitInfo } from './git-BpsfNFZ_.js';
9
9
  import { jsx, Fragment } from 'react/jsx-runtime';
10
10
  import 'ink';
@@ -13,7 +13,7 @@ import 'react';
13
13
  import 'crypto-js';
14
14
  import 'luxon';
15
15
  import 'socket.io-client';
16
- import { u as useJobWatching } from './JobLogTail-CYdceTKL.js';
16
+ import { u as useJobWatching } from './JobLogTail-BPcQ8ghI.js';
17
17
  import 'fullscreen-ink';
18
18
  import 'string-length';
19
19
  import 'strip-ansi';
@@ -27,13 +27,17 @@ import 'qrcode';
27
27
 
28
28
  async function ship({ command, log = () => {
29
29
  }, shipFlags }) {
30
- const verbose = Boolean(shipFlags?.verbose || command.getFlags().verbose);
30
+ const commandFlags = command.getFlags();
31
+ const finalFlags = shipFlags || commandFlags;
32
+ const { verbose, useDemoCredentials } = finalFlags;
31
33
  verbose && log("Fetching game config...");
32
34
  const projectConfig = await command.getProjectConfig();
33
35
  if (!projectConfig.project) throw new Error("No project found in project config");
36
+ const projectUsesDemoCredentials = Boolean(projectConfig.project.details?.useDemoCredentials);
37
+ const isUsingDemoCredentials = useDemoCredentials ?? projectUsesDemoCredentials ?? false;
34
38
  const hasConfiguredIos = Boolean(projectConfig.project.details?.iosBundleId);
35
39
  const hasConfiguredAndroid = Boolean(projectConfig.project.details?.androidPackageName);
36
- if (!hasConfiguredAndroid && !hasConfiguredIos) {
40
+ if (!isUsingDemoCredentials && !hasConfiguredAndroid && !hasConfiguredIos) {
37
41
  throw new Error(
38
42
  "No Android or iOS configuration found. Please run `shipthis game wizard android` or `shipthis game wizard ios` to configure your game."
39
43
  );
@@ -77,12 +81,12 @@ async function ship({ command, log = () => {
77
81
  zipFileMd5
78
82
  };
79
83
  verbose && log("Starting jobs from upload...");
80
- const finalFlags = shipFlags || command.getFlags();
81
84
  const startJobsOptions = {
82
85
  ...uploadDetails,
83
86
  platform: finalFlags.platform?.toUpperCase(),
84
87
  skipPublish: finalFlags.skipPublish,
85
- verbose: finalFlags.verbose
88
+ verbose: finalFlags.verbose,
89
+ useDemoCredentials: isUsingDemoCredentials
86
90
  };
87
91
  const jobs = await startJobsFromUpload(uploadTicket.id, startJobsOptions);
88
92
  verbose && log("Cleaning up temporary zip file...");
@@ -3,7 +3,7 @@ import { Box, Text } from 'ink';
3
3
  import Spinner from 'ink-spinner';
4
4
  import { DateTime } from 'luxon';
5
5
  import { useState, useEffect } from 'react';
6
- import { L as JobStatus, I as getJobSummary, M as getStageColor, J as getJobStatusColor } from './index-CmuXyPed.js';
6
+ import { L as JobStatus, I as getJobSummary, M as getStageColor, J as getJobStatusColor } from './index-DHioYOIm.js';
7
7
  import '@tanstack/react-query';
8
8
  import 'axios';
9
9
  import 'node:fs';
@@ -12,7 +12,7 @@ import 'uuid';
12
12
  import 'fast-glob';
13
13
  import 'yazl';
14
14
  import 'socket.io-client';
15
- import { u as useJobWatching } from './JobLogTail-CYdceTKL.js';
15
+ import { u as useJobWatching } from './JobLogTail-BPcQ8ghI.js';
16
16
  import 'fullscreen-ink';
17
17
  import { a as StatusRow, b as StatusRowLabel } from './StatusTable-DzRWcMr4.js';
18
18
  import { T as Title } from './Title-BCQtayg6.js';
@@ -10,13 +10,13 @@ import 'readline-sync';
10
10
  import 'luxon';
11
11
  import 'axios';
12
12
  import 'isomorphic-git';
13
- import './index-CmuXyPed.js';
13
+ import './index-DHioYOIm.js';
14
14
  import '@oclif/core';
15
15
  import '@tanstack/react-query';
16
16
  import 'react';
17
17
  import 'crypto-js';
18
18
  import 'uuid';
19
- import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-Cm50WMZU.js';
19
+ import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-DbynNY96.js';
20
20
  import 'fast-glob';
21
21
  import 'yazl';
22
22
  import 'socket.io-client';
@@ -10,7 +10,7 @@ import 'readline-sync';
10
10
  import 'luxon';
11
11
  import axios from 'axios';
12
12
  import 'isomorphic-git';
13
- import { a0 as cacheKeys, g as getShortUUID, f as getShortDate, t as getAuthedHeaders, s as API_URL, V as castArrayObjectDates } from './index-CmuXyPed.js';
13
+ import { a0 as cacheKeys, g as getShortUUID, f as getShortDate, t as getAuthedHeaders, s as API_URL, V as castArrayObjectDates } from './index-DHioYOIm.js';
14
14
  import '@oclif/core';
15
15
  import { useQuery } from '@tanstack/react-query';
16
16
  import 'react';
@@ -1,4 +1,4 @@
1
- import { B as BaseAuthenticatedCommand } from './index-CmuXyPed.js';
1
+ import { B as BaseAuthenticatedCommand } from './index-DHioYOIm.js';
2
2
 
3
3
  class BaseAppleCommand extends BaseAuthenticatedCommand {
4
4
  async init() {
@@ -1,4 +1,4 @@
1
- import { h as BaseGameCommand, a2 as getGoogleStatus, i as generatePackageName, a3 as getGodotAndroidPackageName, c as getInput } from './index-CmuXyPed.js';
1
+ import { h as BaseGameCommand, a2 as getGoogleStatus, i as generatePackageName, a3 as getGodotAndroidPackageName, c as getInput } from './index-DHioYOIm.js';
2
2
 
3
3
  class BaseGameAndroidCommand extends BaseGameCommand {
4
4
  async checkGoogleAuth(waitForAuth = false) {
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
4
  import { v4 } from 'uuid';
5
- import { B as BaseAuthenticatedCommand, g as getShortUUID, af as createAPIKey, b as getRenderedMarkdown, f as getShortDate } from '../../index-CmuXyPed.js';
5
+ import { B as BaseAuthenticatedCommand, g as getShortUUID, af as createAPIKey, b as getRenderedMarkdown, f as getShortDate } from '../../index-DHioYOIm.js';
6
6
  import 'ink-spinner';
7
7
  import 'react';
8
8
  import '@tanstack/react-query';
@@ -19,7 +19,7 @@ import 'open';
19
19
  import '@inkjs/ui';
20
20
  import 'qrcode';
21
21
  import { R as RunWithSpinner } from '../../RunWithSpinner-DucRnFp6.js';
22
- import { C as Command } from '../../Command-CHh8RDXK.js';
22
+ import { C as Command } from '../../Command-7dCv1F9p.js';
23
23
  import 'crypto-js';
24
24
  import 'node:path';
25
25
  import 'chalk';
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render, Box, Text } from 'ink';
4
- import { B as BaseAuthenticatedCommand, ae as getAPIKeys, f as getShortDate, g as getShortUUID } from '../../index-CmuXyPed.js';
4
+ import { B as BaseAuthenticatedCommand, ae as getAPIKeys, f as getShortDate, g as getShortUUID } from '../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import { T as Table } from '../../Table-FaNgpyeq.js';
7
7
  import 'react';
@@ -22,7 +22,7 @@ import 'node:path';
22
22
  import 'marked';
23
23
  import 'marked-terminal';
24
24
  import 'qrcode';
25
- import { C as Command } from '../../Command-CHh8RDXK.js';
25
+ import { C as Command } from '../../Command-7dCv1F9p.js';
26
26
  import 'crypto-js';
27
27
  import 'chalk';
28
28
  import '@expo/apple-utils/build/index.js';
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Args, Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { B as BaseAuthenticatedCommand, ag as revokeAPIKey, g as getShortUUID } from '../../index-CmuXyPed.js';
4
+ import { B as BaseAuthenticatedCommand, ag as revokeAPIKey, g as getShortUUID } from '../../index-DHioYOIm.js';
5
5
  import 'ink-spinner';
6
6
  import 'react';
7
7
  import '@tanstack/react-query';
@@ -22,7 +22,7 @@ import 'marked';
22
22
  import 'marked-terminal';
23
23
  import 'qrcode';
24
24
  import { R as RunWithSpinner } from '../../RunWithSpinner-DucRnFp6.js';
25
- import { C as Command } from '../../Command-CHh8RDXK.js';
25
+ import { C as Command } from '../../Command-7dCv1F9p.js';
26
26
  import 'crypto-js';
27
27
  import 'chalk';
28
28
  import '@expo/apple-utils/build/index.js';
@@ -1,8 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
5
- import { P as Platform, C as CredentialsType, A as ApiKey, U as UserRole, a as ApiKeyType } from '../../../index-CmuXyPed.js';
4
+ import { g as getUserCredentials } from '../../../index-C2omlhEs.js';
5
+ import { P as Platform, C as CredentialsType, A as ApiKey, U as UserRole, a as ApiKeyType } from '../../../index-DHioYOIm.js';
6
6
  import 'ink-spinner';
7
7
  import 'node:crypto';
8
8
  import 'node:fs';
@@ -29,9 +29,9 @@ import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
32
- import { C as Command } from '../../../Command-CHh8RDXK.js';
33
- import { B as BaseAppleCommand } from '../../../baseAppleCommand-CQ5dOna7.js';
34
- import { u as uploadUserCredentials } from '../../../upload-D4x4yCia.js';
32
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
33
+ import { B as BaseAppleCommand } from '../../../baseAppleCommand-uL0Gnav4.js';
34
+ import { u as uploadUserCredentials } from '../../../upload-5s3sy2jF.js';
35
35
  import 'chalk';
36
36
  import '@expo/apple-utils/build/index.js';
37
37
  import 'deepmerge';
@@ -1,11 +1,11 @@
1
1
  import { Flags } from '@oclif/core';
2
- import { P as Platform, C as CredentialsType, A as ApiKey, g as getShortUUID, b as getRenderedMarkdown, c as getInput } from '../../../index-CmuXyPed.js';
2
+ import { P as Platform, C as CredentialsType, A as ApiKey, g as getShortUUID, b as getRenderedMarkdown, c as getInput } from '../../../index-DHioYOIm.js';
3
3
  import 'node:fs';
4
4
  import 'axios';
5
5
  import 'crypto-js';
6
6
  import 'uuid';
7
7
  import 'luxon';
8
- import { g as getUserCredentials, d as deleteUserCredential } from '../../../index-CNsmEDXi.js';
8
+ import { g as getUserCredentials, d as deleteUserCredential } from '../../../index-C2omlhEs.js';
9
9
  import 'react/jsx-runtime';
10
10
  import '@inkjs/ui';
11
11
  import 'ink';
@@ -20,7 +20,7 @@ import 'string-length';
20
20
  import 'strip-ansi';
21
21
  import 'open';
22
22
  import 'qrcode';
23
- import { B as BaseAppleCommand } from '../../../baseAppleCommand-CQ5dOna7.js';
23
+ import { B as BaseAppleCommand } from '../../../baseAppleCommand-uL0Gnav4.js';
24
24
  import 'node:path';
25
25
  import 'chalk';
26
26
  import '@expo/apple-utils/build/index.js';
@@ -2,8 +2,8 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import * as fs from 'node:fs';
3
3
  import { Args, Flags } from '@oclif/core';
4
4
  import { render } from 'ink';
5
- import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
6
- import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-CmuXyPed.js';
5
+ import { g as getUserCredentials } from '../../../index-C2omlhEs.js';
6
+ import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-DHioYOIm.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:path';
@@ -29,8 +29,8 @@ import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
32
- import { C as Command } from '../../../Command-CHh8RDXK.js';
33
- import { e as exportCredential } from '../../../export-DujIwhJw.js';
32
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
33
+ import { e as exportCredential } from '../../../export-BwwAjG_F.js';
34
34
  import 'chalk';
35
35
  import '@expo/apple-utils/build/index.js';
36
36
  import 'deepmerge';
@@ -2,8 +2,8 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import * as fs from 'node:fs';
3
3
  import { Args, Flags } from '@oclif/core';
4
4
  import { render } from 'ink';
5
- import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
6
- import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-CmuXyPed.js';
5
+ import { g as getUserCredentials } from '../../../index-C2omlhEs.js';
6
+ import { B as BaseAuthenticatedCommand, P as Platform, C as CredentialsType } from '../../../index-DHioYOIm.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:path';
@@ -29,8 +29,8 @@ import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
31
31
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
32
- import { C as Command } from '../../../Command-CHh8RDXK.js';
33
- import { i as importCredential } from '../../../import-DGCqCAcC.js';
32
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
33
+ import { i as importCredential } from '../../../import-OgFrUsqw.js';
34
34
  import 'chalk';
35
35
  import '@expo/apple-utils/build/index.js';
36
36
  import 'deepmerge';
@@ -1,7 +1,7 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { Box, Text, render } from 'ink';
4
- import { f as getShortDate, A as ApiKey, C as CredentialsType, P as Platform, B as BaseAuthenticatedCommand } from '../../../index-CmuXyPed.js';
4
+ import { f as getShortDate, A as ApiKey, C as CredentialsType, P as Platform, B as BaseAuthenticatedCommand } from '../../../index-DHioYOIm.js';
5
5
  import Spinner from 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -23,7 +23,7 @@ import 'fullscreen-ink';
23
23
  import 'string-length';
24
24
  import 'strip-ansi';
25
25
  import 'open';
26
- import { u as useUserCredentials, U as UserCredentialsTable } from '../../../UserCredentialsTable-cDPvjF-F.js';
26
+ import { u as useUserCredentials, U as UserCredentialsTable } from '../../../UserCredentialsTable-MBm1vAP3.js';
27
27
  import '@inkjs/ui';
28
28
  import 'marked';
29
29
  import 'marked-terminal';
@@ -31,7 +31,7 @@ import 'qrcode';
31
31
  import { T as Table } from '../../../Table-FaNgpyeq.js';
32
32
  import { T as Title } from '../../../Title-BCQtayg6.js';
33
33
  import { N as NextSteps } from '../../../NextSteps-DbJHmscQ.js';
34
- import { C as Command } from '../../../Command-CHh8RDXK.js';
34
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
35
35
  import 'chalk';
36
36
  import '@expo/apple-utils/build/index.js';
37
37
  import 'deepmerge';
@@ -1,9 +1,9 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { g as getUserCredentials } from '../../../index-CNsmEDXi.js';
4
+ import { g as getUserCredentials } from '../../../index-C2omlhEs.js';
5
5
  import forge from 'node-forge';
6
- import { p as CertificateType, d as Certificate, P as Platform, C as CredentialsType } from '../../../index-CmuXyPed.js';
6
+ import { p as CertificateType, d as Certificate, P as Platform, C as CredentialsType } from '../../../index-DHioYOIm.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:fs';
@@ -30,9 +30,9 @@ import 'marked';
30
30
  import 'marked-terminal';
31
31
  import 'qrcode';
32
32
  import { R as RunWithSpinner } from '../../../RunWithSpinner-DucRnFp6.js';
33
- import { C as Command } from '../../../Command-CHh8RDXK.js';
34
- import { B as BaseAppleCommand } from '../../../baseAppleCommand-CQ5dOna7.js';
35
- import { u as uploadUserCredentials } from '../../../upload-D4x4yCia.js';
33
+ import { C as Command } from '../../../Command-7dCv1F9p.js';
34
+ import { B as BaseAppleCommand } from '../../../baseAppleCommand-uL0Gnav4.js';
35
+ import { u as uploadUserCredentials } from '../../../upload-5s3sy2jF.js';
36
36
  import 'chalk';
37
37
  import '@expo/apple-utils/build/index.js';
38
38
  import 'deepmerge';