shipthis 0.1.38 → 0.1.41

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 (90) hide show
  1. package/README.md +62 -5
  2. package/dist/{AppleBundleIdDetails-CgleH2pl.js → AppleBundleIdDetails-BJC7GCx_.js} +4 -3
  3. package/dist/{Command-7dCv1F9p.js → Command-Cj6F5B5a.js} +2 -1
  4. package/dist/{CommandGame-er5Ql6hq.js → CommandGame-CuvuH-z6.js} +2 -2
  5. package/dist/{Create-pLXESvEq.js → Create-pfGYcKu4.js} +2 -1
  6. package/dist/{GameStatus-B_Iw9tYr.js → GameStatus-ZSe-qG3y.js} +2 -1
  7. package/dist/{Import-fIsrfsmr.js → Import-D046HBaF.js} +3 -2
  8. package/dist/{JobLogTail-BPcQ8ghI.js → JobLogTail-Da8GuReK.js} +3 -2
  9. package/dist/{JobProgress-CpEatVPs.js → JobProgress-DltCQpzA.js} +9 -6
  10. package/dist/{JobStatusTable-BmJLzsUN.js → JobStatusTable-DVJjHw97.js} +3 -2
  11. package/dist/{ProjectCredentialsTable-DvPDhi7C.js → ProjectCredentialsTable-BJJz7W1P.js} +2 -2
  12. package/dist/{UserCredentialsTable-MBm1vAP3.js → UserCredentialsTable-CSynIVHU.js} +2 -1
  13. package/dist/{baseAppleCommand-uL0Gnav4.js → baseAppleCommand-Aq-Eaw_K.js} +1 -1
  14. package/dist/baseCommand-CTn3KGH3.js +787 -0
  15. package/dist/{baseGameAndroidCommand-CKTSQyZV.js → baseGameAndroidCommand-DRzVMKuG.js} +2 -1
  16. package/dist/{index-DHioYOIm.js → baseGameCommand-8VL7xe-O.js} +18 -749
  17. package/dist/commands/apiKey/create.js +6 -5
  18. package/dist/commands/apiKey/list.js +6 -5
  19. package/dist/commands/apiKey/revoke.js +6 -5
  20. package/dist/commands/apple/apiKey/create.js +13 -12
  21. package/dist/commands/apple/apiKey/delete.js +7 -6
  22. package/dist/commands/apple/apiKey/export.js +14 -13
  23. package/dist/commands/apple/apiKey/import.js +14 -13
  24. package/dist/commands/apple/apiKey/status.js +13 -12
  25. package/dist/commands/apple/certificate/create.js +13 -12
  26. package/dist/commands/apple/certificate/delete.js +7 -6
  27. package/dist/commands/apple/certificate/export.js +14 -13
  28. package/dist/commands/apple/certificate/import.js +14 -13
  29. package/dist/commands/apple/certificate/status.js +13 -12
  30. package/dist/commands/apple/login.js +4 -3
  31. package/dist/commands/apple/status.js +13 -12
  32. package/dist/commands/dashboard.js +9 -8
  33. package/dist/commands/game/android/apiKey/connect.js +11 -10
  34. package/dist/commands/game/android/apiKey/create.js +13 -12
  35. package/dist/commands/game/android/apiKey/delete.js +6 -5
  36. package/dist/commands/game/android/apiKey/export.js +13 -12
  37. package/dist/commands/game/android/apiKey/import.js +13 -12
  38. package/dist/commands/game/android/apiKey/invite.js +21 -20
  39. package/dist/commands/game/android/apiKey/policy.js +8 -7
  40. package/dist/commands/game/android/apiKey/status.js +13 -12
  41. package/dist/commands/game/android/keyStore/create.js +10 -9
  42. package/dist/commands/game/android/keyStore/delete.js +6 -5
  43. package/dist/commands/game/android/keyStore/export.js +12 -11
  44. package/dist/commands/game/android/keyStore/import.js +15 -14
  45. package/dist/commands/game/android/keyStore/status.js +15 -14
  46. package/dist/commands/game/android/status.js +7 -6
  47. package/dist/commands/game/build/download.js +6 -5
  48. package/dist/commands/game/build/list.js +11 -10
  49. package/dist/commands/game/create.js +5 -3
  50. package/dist/commands/game/details.js +15 -11
  51. package/dist/commands/game/export.js +4 -3
  52. package/dist/commands/game/ios/app/addTester.js +8 -7
  53. package/dist/commands/game/ios/app/create.js +7 -6
  54. package/dist/commands/game/ios/app/status.js +13 -12
  55. package/dist/commands/game/ios/app/sync.js +11 -10
  56. package/dist/commands/game/ios/profile/create.js +9 -8
  57. package/dist/commands/game/ios/profile/delete.js +9 -8
  58. package/dist/commands/game/ios/profile/export.js +12 -11
  59. package/dist/commands/game/ios/profile/import.js +12 -11
  60. package/dist/commands/game/ios/profile/status.js +13 -12
  61. package/dist/commands/game/ios/status.js +17 -16
  62. package/dist/commands/game/ios/wizard.js +13 -11
  63. package/dist/commands/game/job/list.js +6 -5
  64. package/dist/commands/game/job/status.js +11 -10
  65. package/dist/commands/game/list.js +6 -5
  66. package/dist/commands/game/ship.js +15 -9
  67. package/dist/commands/game/status.js +14 -13
  68. package/dist/commands/game/wizard.js +30 -28
  69. package/dist/commands/internal/fastlane.js +14 -13
  70. package/dist/commands/internal/readme.js +18 -17
  71. package/dist/commands/login.js +20 -19
  72. package/dist/commands/status.js +9 -8
  73. package/dist/commands/util/glass.js +119 -0
  74. package/dist/{export-BwwAjG_F.js → export-DtATljiz.js} +1 -1
  75. package/dist/{import-OgFrUsqw.js → import-Dk2ywOVU.js} +1 -1
  76. package/dist/{index-C2omlhEs.js → index-BW7z-5sB.js} +1 -1
  77. package/dist/{index-DVEYxVsH.js → index-CuyVBHWc.js} +4 -3
  78. package/dist/{index-C1XpCT_9.js → index-cRnjcGxV.js} +5 -4
  79. package/dist/{upload-5s3sy2jF.js → upload-CHaDSvvi.js} +1 -1
  80. package/dist/{useAppleApp-szQ_Kg5S.js → useAppleApp-CR847GWc.js} +1 -1
  81. package/dist/{useAppleBundleId-BarLcidd.js → useAppleBundleId-BnwPmVEu.js} +1 -1
  82. package/dist/{useAppleProfiles-C2U4NzC3.js → useAppleProfiles-DY-H0420.js} +1 -1
  83. package/dist/{useGoogleStatus-zfnjhtNB.js → useGoogleStatus-WqPgHteE.js} +2 -1
  84. package/dist/{useProjectCredentials-DbynNY96.js → useProjectCredentials-TvlolkId.js} +2 -1
  85. package/dist/{useWebSocket-h7smqhZQ.js → useWebSocket-MXDbQHcu.js} +1 -1
  86. package/docs/README.md +1 -0
  87. package/docs/game/ship.md +36 -13
  88. package/docs/util/glass.md +47 -0
  89. package/docs/util.md +11 -0
  90. package/package.json +3 -1
package/README.md CHANGED
@@ -106,13 +106,13 @@ We support **all stable Godot versions since 3.6**, including:
106
106
 
107
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
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) | | | |
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-28eb575) | [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-ca113b3) | |
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-d33f443) | | | |
112
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) | | | | |
113
+ | | [4.0.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.0.5-df6989b) | [4.1.5 *](https://github.com/shipth-is/godot-android-sdk-upgrade/releases/tag/4.1.5-b68debd) | | | | |
114
114
 
115
- **\* Custom builds** - [maintained by us](https://github.com/shipth-is/godot-android-sdk-upgrade/) to support **Android SDK 35**.
115
+ **\* Custom builds** - [maintained by us](https://github.com/shipth-is/godot-android-sdk-upgrade/) to support **[Android SDK 35](https://support.google.com/googleplay/android-developer/answer/11926878?hl=en)** and **[16 KB Google Play compatibility requirement](https://developer.android.com/guide/practices/page-sizes)**.
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
 
@@ -334,6 +334,17 @@ For GitHub users, we provide an official **GitHub Action** for easy integration:
334
334
 
335
335
  See the [API Keys documentation](https://shipth.is/docs/reference/apiKey/?ref=github_readme) for more information.
336
336
 
337
+ ### Can I use a Liquid Glass icon with my game on iOS?
338
+
339
+ ShipThis enables the use of Liquid Glass icons with your game. These can be applied in two ways:
340
+
341
+ - To a local iOS export of a Godot project
342
+ - using the command `shipthis util glass ios/output.xcodeproj MyIcon.icon`
343
+ - To a game built using the ShipThis build servers
344
+ - using the command `shipthis game details --liquidGlassIconPath ./Example.icon`
345
+
346
+ You can read more in our [Liquid Glass icons guide](https://shipth.is/docs/guides/liquid-glass?ref=github_readme).
347
+
337
348
  ### How are my credentials stored and secured?
338
349
 
339
350
  ShipThis uses short-lived, signed URLs and ephemeral build environments.
@@ -351,6 +362,52 @@ We store:
351
362
  - App Store Connect API keys
352
363
  - iOS distribution certificates
353
364
 
365
+ ### What happens to my files when I run the command `shipthis game ship`?
366
+
367
+ #### 1. Uploading your game files
368
+
369
+ When you run the command, the CLI asks the ShipThis backend for a secure (HTTPS) temporary upload URL.
370
+ Your game files are packaged locally on your machine:
371
+
372
+ - Files matching `shippedFilesGlobs` in `shipthis.json` are included
373
+ - Files matching `ignoredFilesGlobs` are excluded
374
+
375
+ The zip file is then uploaded directly from your computer to a private DigitalOcean Space using the temporary upload URL.
376
+
377
+ #### 2. Where the files are stored
378
+
379
+ The uploaded zip lives in a private DigitalOcean Space. The space is not public and cannot be browsed.
380
+
381
+ Files in this storage can only be accessed using signed URLs that expire after a short time. Those URLs are generated only when they are needed.
382
+
383
+ This storage is used for:
384
+
385
+ - Providing a build machine access to your game files
386
+ - Storing the resulting build outputs (APK/AAB/IPA)
387
+
388
+ #### 3. How build machines access your code
389
+
390
+ Build machines do not have general access to storage of game files or credentials.
391
+
392
+ When a machine is ready to run a job, it asks the backend for work. The job it receives includes a temporary, signed download URL for the zip containing the game files. The machine downloads the zip, extracts it, runs the build, and uploads the results using signed upload URLs provided in the job metadata.
393
+
394
+ Build machines cannot browse files or access anything outside the job that they are currently running.
395
+
396
+ #### 4. Cleanup after the build
397
+
398
+ After a build machine has completed a job, a cleanup routine is run which deletes:
399
+
400
+ - Downloaded and extracted game files
401
+ - Build intermediates
402
+ - Temporary files
403
+
404
+ The build machines do not keep user files after a job completes.
405
+
406
+ #### 5. Retention and deletion
407
+
408
+ - Uploaded game file zips and build outputs (APK/AAB/IPA) are retained for **30 days**
409
+ - A lifecycle policy set on the storage automatically deletes them after that period
410
+
354
411
  ## 📖 Command Reference
355
412
 
356
413
  ### 🗂 Topics
@@ -11,13 +11,13 @@ import 'readline-sync';
11
11
  import 'luxon';
12
12
  import 'axios';
13
13
  import 'isomorphic-git';
14
- import './index-DHioYOIm.js';
14
+ import './baseCommand-CTn3KGH3.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-szQ_Kg5S.js';
20
+ import { u as useAppleApp } from './useAppleApp-CR847GWc.js';
21
21
  import 'fast-glob';
22
22
  import 'yazl';
23
23
  import 'socket.io-client';
@@ -27,10 +27,11 @@ import { T as Title } from './Title-BCQtayg6.js';
27
27
  import 'string-length';
28
28
  import 'strip-ansi';
29
29
  import 'open';
30
+ import './baseGameCommand-8VL7xe-O.js';
30
31
  import 'marked';
31
32
  import 'marked-terminal';
32
33
  import 'qrcode';
33
- import { u as useAppleBundleId } from './useAppleBundleId-BarLcidd.js';
34
+ import { u as useAppleBundleId } from './useAppleBundleId-BnwPmVEu.js';
34
35
 
35
36
  const AppleAppDetails = (props) => {
36
37
  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-DHioYOIm.js';
5
+ import { H as queryClient } from './baseCommand-CTn3KGH3.js';
6
6
  import 'axios';
7
7
  import 'node:fs';
8
8
  import 'crypto-js';
@@ -19,6 +19,7 @@ import 'react';
19
19
  import 'socket.io-client';
20
20
  import 'fast-glob';
21
21
  import 'yazl';
22
+ import { i as CommandProvider } from './baseGameCommand-8VL7xe-O.js';
22
23
 
23
24
  const Command = ({ children, command }) => {
24
25
  const { width } = useScreenSize();
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { Z as GameProvider } from './index-DHioYOIm.js';
3
- import { C as Command } from './Command-7dCv1F9p.js';
2
+ import { j as GameProvider } from './baseGameCommand-8VL7xe-O.js';
3
+ import { C as Command } from './Command-Cj6F5B5a.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-DHioYOIm.js';
6
+ import { p as getAuthedHeaders, o as API_URL } from './baseCommand-CTn3KGH3.js';
7
7
  import 'ink-spinner';
8
8
  import 'node:crypto';
9
9
  import 'node:fs';
@@ -14,6 +14,7 @@ import 'readline-sync';
14
14
  import 'luxon';
15
15
  import 'isomorphic-git';
16
16
  import '@oclif/core';
17
+ import { G as GameContext, k as cacheKeys } from './baseGameCommand-8VL7xe-O.js';
17
18
  import 'fast-glob';
18
19
  import 'uuid';
19
20
  import 'yazl';
@@ -1,8 +1,9 @@
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-DHioYOIm.js';
4
+ import { c as getShortDate, P as Platform, k as getProject, E as getProjectPlatformProgress } from './baseCommand-CTn3KGH3.js';
5
5
  import 'ink-spinner';
6
+ import { g as getShortUUID, m as makeHumanReadable, G as GameContext, C as CommandContext } from './baseGameCommand-8VL7xe-O.js';
6
7
  import '@tanstack/react-query';
7
8
  import 'axios';
8
9
  import 'luxon';
@@ -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-DHioYOIm.js';
14
+ import { H as queryClient, P as Platform, C as CredentialsType } from './baseCommand-CTn3KGH3.js';
15
15
  import '@oclif/core';
16
16
  import { useMutation } from '@tanstack/react-query';
17
17
  import 'crypto-js';
@@ -24,10 +24,11 @@ import 'string-length';
24
24
  import 'strip-ansi';
25
25
  import 'open';
26
26
  import '@inkjs/ui';
27
+ import { k as cacheKeys, G as GameContext } from './baseGameCommand-8VL7xe-O.js';
27
28
  import 'marked';
28
29
  import 'marked-terminal';
29
30
  import 'qrcode';
30
- import { i as importCredential } from './import-OgFrUsqw.js';
31
+ import { i as importCredential } from './import-Dk2ywOVU.js';
31
32
 
32
33
  async function importKeystore({ log = () => {
33
34
  }, ...opt }) {
@@ -7,7 +7,8 @@ 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-DHioYOIm.js';
10
+ import { p as getAuthedHeaders, o as API_URL, F as castArrayObjectDates, J as JobStatus, a6 as castJobDates, a4 as castObjectDates, a7 as getShortTime } from './baseCommand-CTn3KGH3.js';
11
+ import { k as cacheKeys, x as useJob, h as getStageColor, y as getMessageColor } from './baseGameCommand-8VL7xe-O.js';
11
12
  import 'luxon';
12
13
  import 'fast-glob';
13
14
  import 'yazl';
@@ -20,7 +21,7 @@ import 'readline-sync';
20
21
  import 'isomorphic-git';
21
22
  import '@oclif/core';
22
23
  import 'fullscreen-ink';
23
- import { u as useWebSocket } from './useWebSocket-h7smqhZQ.js';
24
+ import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
24
25
  import { T as Title } from './Title-BCQtayg6.js';
25
26
  import stringLength from 'string-length';
26
27
  import stripAnsi from 'strip-ansi';
@@ -4,7 +4,8 @@ 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-DHioYOIm.js';
7
+ import { H as queryClient, k as getProject, v as DEFAULT_SHIPPED_FILES_GLOBS, w as DEFAULT_IGNORED_FILES_GLOBS, a0 as getNewUploadTicket, a1 as startJobsFromUpload } from './baseCommand-CTn3KGH3.js';
8
+ import { k as cacheKeys, s as getFileHash, t as getPlatformName } from './baseGameCommand-8VL7xe-O.js';
8
9
  import { g as getCWDGitInfo } from './git-BpsfNFZ_.js';
9
10
  import { jsx, Fragment } from 'react/jsx-runtime';
10
11
  import 'ink';
@@ -13,7 +14,7 @@ import 'react';
13
14
  import 'crypto-js';
14
15
  import 'luxon';
15
16
  import 'socket.io-client';
16
- import { u as useJobWatching } from './JobLogTail-BPcQ8ghI.js';
17
+ import { u as useJobWatching } from './JobLogTail-Da8GuReK.js';
17
18
  import 'fullscreen-ink';
18
19
  import 'string-length';
19
20
  import 'strip-ansi';
@@ -33,10 +34,11 @@ async function ship({ command, log = () => {
33
34
  verbose && log("Fetching game config...");
34
35
  const projectConfig = await command.getProjectConfig();
35
36
  if (!projectConfig.project) throw new Error("No project found in project config");
36
- const projectUsesDemoCredentials = Boolean(projectConfig.project.details?.useDemoCredentials);
37
+ const project = await getProject(projectConfig.project.id);
38
+ const projectUsesDemoCredentials = Boolean(project.details?.useDemoCredentials);
37
39
  const isUsingDemoCredentials = useDemoCredentials ?? projectUsesDemoCredentials ?? false;
38
- const hasConfiguredIos = Boolean(projectConfig.project.details?.iosBundleId);
39
- const hasConfiguredAndroid = Boolean(projectConfig.project.details?.androidPackageName);
40
+ const hasConfiguredIos = Boolean(project.details?.iosBundleId);
41
+ const hasConfiguredAndroid = Boolean(project.details?.androidPackageName);
40
42
  if (!isUsingDemoCredentials && !hasConfiguredAndroid && !hasConfiguredIos) {
41
43
  throw new Error(
42
44
  "No Android or iOS configuration found. Please run `shipthis game wizard android` or `shipthis game wizard ios` to configure your game."
@@ -86,7 +88,8 @@ async function ship({ command, log = () => {
86
88
  platform: finalFlags.platform?.toUpperCase(),
87
89
  skipPublish: finalFlags.skipPublish,
88
90
  verbose: finalFlags.verbose,
89
- useDemoCredentials: isUsingDemoCredentials
91
+ useDemoCredentials: isUsingDemoCredentials,
92
+ gameEngineVersion: finalFlags.gameEngineVersion
90
93
  };
91
94
  const jobs = await startJobsFromUpload(uploadTicket.id, startJobsOptions);
92
95
  verbose && log("Cleaning up temporary zip file...");
@@ -3,16 +3,17 @@ 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-DHioYOIm.js';
6
+ import { J as JobStatus } from './baseCommand-CTn3KGH3.js';
7
7
  import '@tanstack/react-query';
8
8
  import 'axios';
9
9
  import 'node:fs';
10
10
  import 'crypto-js';
11
11
  import 'uuid';
12
+ import { e as getJobSummary, h as getStageColor, f as getJobStatusColor } from './baseGameCommand-8VL7xe-O.js';
12
13
  import 'fast-glob';
13
14
  import 'yazl';
14
15
  import 'socket.io-client';
15
- import { u as useJobWatching } from './JobLogTail-BPcQ8ghI.js';
16
+ import { u as useJobWatching } from './JobLogTail-Da8GuReK.js';
16
17
  import 'fullscreen-ink';
17
18
  import { a as StatusRow, b as StatusRowLabel } from './StatusTable-DzRWcMr4.js';
18
19
  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-DHioYOIm.js';
13
+ import './baseCommand-CTn3KGH3.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-DbynNY96.js';
19
+ import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-TvlolkId.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-DHioYOIm.js';
13
+ import { c as getShortDate, p as getAuthedHeaders, o as API_URL, F as castArrayObjectDates } from './baseCommand-CTn3KGH3.js';
14
14
  import '@oclif/core';
15
15
  import { useQuery } from '@tanstack/react-query';
16
16
  import 'react';
@@ -18,6 +18,7 @@ import 'crypto-js';
18
18
  import 'uuid';
19
19
  import 'fast-glob';
20
20
  import 'yazl';
21
+ import { k as cacheKeys, g as getShortUUID } from './baseGameCommand-8VL7xe-O.js';
21
22
  import 'socket.io-client';
22
23
  import 'fullscreen-ink';
23
24
  import { T as Table } from './Table-FaNgpyeq.js';
@@ -1,4 +1,4 @@
1
- import { B as BaseAuthenticatedCommand } from './index-DHioYOIm.js';
1
+ import { B as BaseAuthenticatedCommand } from './baseGameCommand-8VL7xe-O.js';
2
2
 
3
3
  class BaseAppleCommand extends BaseAuthenticatedCommand {
4
4
  async init() {