shipthis 0.1.52 → 0.1.54

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 (97) hide show
  1. package/README.md +7 -8
  2. package/dist/{AppleBundleIdDetails-BUJnAu52.js → AppleBundleIdDetails-CJuXU0MW.js} +4 -4
  3. package/dist/{Command-B-MWAVPL.js → Command-U8TqM6Zs.js} +2 -2
  4. package/dist/{CommandGame-DPJEVhuw.js → CommandGame-hqY43vRo.js} +3 -3
  5. package/dist/{Create-CmEndHAZ.js → Create-C--pV63B.js} +2 -2
  6. package/dist/{CredentialDetailsView-B7Y9sj8K.js → CredentialDetailsView-DUpRMBiJ.js} +1 -1
  7. package/dist/{ErrorBox-DS5e6VmF.js → ErrorBox-DLRncz8K.js} +1 -1
  8. package/dist/{GameStatus-XFGHRbVP.js → GameStatus-DRheSF2O.js} +2 -2
  9. package/dist/{Import-ea-wsQt-.js → Import-CTgEEj_f.js} +3 -3
  10. package/dist/{JobLogTail-BwFUt8LB.js → JobLogTail-7oEEQxIO.js} +3 -3
  11. package/dist/{JobProgress-_cIUK7Ho.js → JobProgress-DwvTh5rS.js} +4 -4
  12. package/dist/{JobStatusTable-CyDhk3lr.js → JobStatusTable-DBM_PBPQ.js} +3 -3
  13. package/dist/{ProjectCredentialsTable-0DY-GdfY.js → ProjectCredentialsTable-BamSpb5B.js} +2 -2
  14. package/dist/{UserCredentialsTable-CTJMS9Kc.js → UserCredentialsTable-N_fIOf8N.js} +2 -2
  15. package/dist/{baseAppleCommand-9xmssZ7g.js → baseAppleCommand-oekzwny6.js} +1 -1
  16. package/dist/{baseCommand-CpAJaJoG.js → baseCommand-ByzFMr-B.js} +11 -1
  17. package/dist/{baseGameAndroidCommand-HO8as-RL.js → baseGameAndroidCommand-GvH1QAja.js} +2 -2
  18. package/dist/{baseGameCommand-Cbx4ywHl.js → baseGameCommand-D8Z3SaiJ.js} +1 -1
  19. package/dist/commands/apiKey/create.js +3 -3
  20. package/dist/commands/apiKey/list.js +3 -3
  21. package/dist/commands/apiKey/revoke.js +3 -3
  22. package/dist/commands/apple/apiKey/create.js +6 -6
  23. package/dist/commands/apple/apiKey/delete.js +4 -4
  24. package/dist/commands/apple/apiKey/export.js +5 -5
  25. package/dist/commands/apple/apiKey/import.js +5 -5
  26. package/dist/commands/apple/apiKey/status.js +4 -4
  27. package/dist/commands/apple/certificate/create.js +6 -6
  28. package/dist/commands/apple/certificate/delete.js +4 -4
  29. package/dist/commands/apple/certificate/export.js +5 -5
  30. package/dist/commands/apple/certificate/import.js +5 -5
  31. package/dist/commands/apple/certificate/show.js +5 -5
  32. package/dist/commands/apple/certificate/status.js +4 -4
  33. package/dist/commands/apple/login.js +2 -2
  34. package/dist/commands/apple/status.js +3 -3
  35. package/dist/commands/dashboard.js +2 -2
  36. package/dist/commands/game/android/apiKey/connect.js +9 -9
  37. package/dist/commands/game/android/apiKey/create.js +11 -11
  38. package/dist/commands/game/android/apiKey/delete.js +4 -4
  39. package/dist/commands/game/android/apiKey/export.js +6 -6
  40. package/dist/commands/game/android/apiKey/import.js +6 -6
  41. package/dist/commands/game/android/apiKey/invite.js +3 -3
  42. package/dist/commands/game/android/apiKey/policy.js +3 -3
  43. package/dist/commands/game/android/apiKey/show.js +8 -8
  44. package/dist/commands/game/android/apiKey/status.js +6 -6
  45. package/dist/commands/game/android/keyStore/create.js +8 -8
  46. package/dist/commands/game/android/keyStore/delete.js +4 -4
  47. package/dist/commands/game/android/keyStore/export.js +5 -5
  48. package/dist/commands/game/android/keyStore/import.js +9 -9
  49. package/dist/commands/game/android/keyStore/status.js +5 -5
  50. package/dist/commands/game/android/status.js +2 -2
  51. package/dist/commands/game/build/download.js +3 -3
  52. package/dist/commands/game/build/list.js +5 -5
  53. package/dist/commands/game/create.js +2 -2
  54. package/dist/commands/game/details.js +3 -3
  55. package/dist/commands/game/export.js +2 -2
  56. package/dist/commands/game/ios/app/addTester.js +4 -4
  57. package/dist/commands/game/ios/app/create.js +3 -3
  58. package/dist/commands/game/ios/app/status.js +6 -6
  59. package/dist/commands/game/ios/app/sync.js +4 -4
  60. package/dist/commands/game/ios/profile/create.js +6 -6
  61. package/dist/commands/game/ios/profile/delete.js +4 -4
  62. package/dist/commands/game/ios/profile/export.js +5 -5
  63. package/dist/commands/game/ios/profile/import.js +5 -5
  64. package/dist/commands/game/ios/profile/show.js +7 -7
  65. package/dist/commands/game/ios/profile/status.js +6 -6
  66. package/dist/commands/game/ios/status.js +9 -9
  67. package/dist/commands/game/ios/wizard.js +3 -3
  68. package/dist/commands/game/job/list.js +3 -3
  69. package/dist/commands/game/job/logs.js +82 -0
  70. package/dist/commands/game/job/status.js +6 -6
  71. package/dist/commands/game/list.js +3 -3
  72. package/dist/commands/game/ship.js +10 -10
  73. package/dist/commands/game/status.js +6 -6
  74. package/dist/commands/game/wizard.js +31 -28
  75. package/dist/commands/internal/fastlane.js +2 -2
  76. package/dist/commands/internal/readme.js +2 -2
  77. package/dist/commands/login.js +2 -2
  78. package/dist/commands/status.js +3 -3
  79. package/dist/commands/util/android-build-method.js +2 -2
  80. package/dist/commands/util/glass.js +1 -1
  81. package/dist/{export-Blt3BR-u.js → export-DQ2Qh09K.js} +1 -1
  82. package/dist/{import-IVcS8WFM.js → import-sVng7ksa.js} +1 -1
  83. package/dist/{index-KJtngKaE.js → index-DwEIHNF1.js} +4 -4
  84. package/dist/{index-B5s20dhm.js → index-Dz17cbww.js} +5 -5
  85. package/dist/{index-By3xdL8c.js → index-N3S598Wc.js} +1 -1
  86. package/dist/{upload-B56rRpZW.js → upload-DoiCgi3a.js} +1 -1
  87. package/dist/{useAppleApp-BHUjGmw0.js → useAppleApp-J4dx2Wyz.js} +1 -1
  88. package/dist/{useAppleBundleId-Cv5maswG.js → useAppleBundleId-DUdnv1T0.js} +1 -1
  89. package/dist/{useAppleProfiles-kDiUOXiX.js → useAppleProfiles-DDdAtArV.js} +1 -1
  90. package/dist/{useGoogleStatus-BHd_Wp59.js → useGoogleStatus-DciPkOMu.js} +2 -2
  91. package/dist/{useProjectCredentials-ADtDLDmx.js → useProjectCredentials-B4cjpmpB.js} +2 -2
  92. package/dist/{useWebSocket-DlNe_zDR.js → useWebSocket-B1hQm8Ak.js} +1 -1
  93. package/docs/game/job/logs.md +30 -0
  94. package/docs/game/job.md +31 -0
  95. package/npm-shrinkwrap.json +193 -672
  96. package/oclif.manifest.json +241 -198
  97. package/package.json +4 -2
@@ -0,0 +1,82 @@
1
+ import { Args } from '@oclif/core';
2
+ import { N as getJob, O as getJobLogsDownloadStream } from '../../../baseCommand-ByzFMr-B.js';
3
+ import 'react/jsx-runtime';
4
+ import 'ink';
5
+ import 'ink-spinner';
6
+ import 'node:crypto';
7
+ import 'node:fs';
8
+ import 'node:path';
9
+ import 'node:readline';
10
+ import 'node:url';
11
+ import 'readline-sync';
12
+ import 'luxon';
13
+ import 'axios';
14
+ import 'isomorphic-git';
15
+ import '@tanstack/react-query';
16
+ import 'react';
17
+ import 'uuid';
18
+ import 'fast-glob';
19
+ import 'stream';
20
+ import 'yazl';
21
+ import 'socket.io-client';
22
+ import 'fullscreen-ink';
23
+ import 'string-length';
24
+ import 'strip-ansi';
25
+ import 'open';
26
+ import '@inkjs/ui';
27
+ import { b as BaseGameCommand } from '../../../baseGameCommand-D8Z3SaiJ.js';
28
+ import 'marked';
29
+ import 'marked-terminal';
30
+ import 'qrcode';
31
+ import 'godot-export-presets';
32
+ import 'chalk';
33
+ import '@expo/apple-utils/build/index.js';
34
+ import 'fs';
35
+ import 'path';
36
+
37
+ class GameJobLogs extends BaseGameCommand {
38
+ static args = {
39
+ job_id: Args.string({ description: "The id of the job to get the logs for", required: true })
40
+ };
41
+ static description = "Downloads the full plain-text logs for a job and writes them to stdout.";
42
+ static examples = [
43
+ "<%= config.bin %> <%= command.id %> 4d32239e",
44
+ "<%= config.bin %> <%= command.id %> 4d32239e > job.log",
45
+ "<%= config.bin %> <%= command.id %> 4d32239e | grep -i error",
46
+ "<%= config.bin %> <%= command.id %> --gameId 0c179fc4 4d32239e | less"
47
+ ];
48
+ static flags = {
49
+ ...super.flags
50
+ };
51
+ async getJob() {
52
+ try {
53
+ const game = await this.getGame();
54
+ const job = await getJob(this.args.job_id, game.id);
55
+ return job;
56
+ } catch (error) {
57
+ if (error?.response?.status === 404) {
58
+ this.error("Job not found - please check you have access", { exit: 1 });
59
+ }
60
+ throw error;
61
+ }
62
+ }
63
+ async run() {
64
+ const job = await this.getJob();
65
+ const handleStdoutError = (err) => {
66
+ if (err.code === "EPIPE") process.exit(0);
67
+ };
68
+ process.stdout.on("error", handleStdoutError);
69
+ try {
70
+ const stream = await getJobLogsDownloadStream(job.id, job.project.id);
71
+ for await (const chunk of stream) {
72
+ if (!process.stdout.write(chunk)) {
73
+ await new Promise((resolve) => process.stdout.once("drain", resolve));
74
+ }
75
+ }
76
+ } finally {
77
+ process.stdout.removeListener("error", handleStdoutError);
78
+ }
79
+ }
80
+ }
81
+
82
+ export { GameJobLogs as default };
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { Args, Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { N as getJob, J as JobStatus } from '../../../baseCommand-CpAJaJoG.js';
4
+ import { N as getJob, J as JobStatus } from '../../../baseCommand-ByzFMr-B.js';
5
5
  import 'ink-spinner';
6
6
  import 'node:crypto';
7
7
  import 'node:fs';
@@ -22,20 +22,20 @@ import 'socket.io-client';
22
22
  import 'fullscreen-ink';
23
23
  import 'string-length';
24
24
  import 'strip-ansi';
25
- import { J as JobLogTail } from '../../../JobLogTail-BwFUt8LB.js';
26
- import { J as JobStatusTable } from '../../../JobStatusTable-CyDhk3lr.js';
25
+ import { J as JobLogTail } from '../../../JobLogTail-7oEEQxIO.js';
26
+ import { J as JobStatusTable } from '../../../JobStatusTable-DBM_PBPQ.js';
27
27
  import 'open';
28
28
  import '@inkjs/ui';
29
- import { b as BaseGameCommand } from '../../../baseGameCommand-Cbx4ywHl.js';
29
+ import { b as BaseGameCommand } from '../../../baseGameCommand-D8Z3SaiJ.js';
30
30
  import 'marked';
31
31
  import 'marked-terminal';
32
32
  import { N as NextSteps } from '../../../NextSteps-DbJHmscQ.js';
33
33
  import 'qrcode';
34
34
  import 'godot-export-presets';
35
- import { C as Command } from '../../../Command-B-MWAVPL.js';
35
+ import { C as Command } from '../../../Command-U8TqM6Zs.js';
36
36
  import 'chalk';
37
37
  import '@expo/apple-utils/build/index.js';
38
- import '../../../useWebSocket-DlNe_zDR.js';
38
+ import '../../../useWebSocket-B1hQm8Ak.js';
39
39
  import '../../../TruncatedText-DhEXCrnE.js';
40
40
  import '../../../Title-BCQtayg6.js';
41
41
  import '../../../StatusTable-DzRWcMr4.js';
@@ -1,8 +1,8 @@
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 { c as getProjects, g as getShortUUID, d as getShortDate } from '../../baseCommand-CpAJaJoG.js';
5
- import { B as BaseAuthenticatedCommand } from '../../baseGameCommand-Cbx4ywHl.js';
4
+ import { c as getProjects, g as getShortUUID, d as getShortDate } from '../../baseCommand-ByzFMr-B.js';
5
+ import { B as BaseAuthenticatedCommand } from '../../baseGameCommand-D8Z3SaiJ.js';
6
6
  import 'node:fs';
7
7
  import 'node:path';
8
8
  import 'chalk';
@@ -31,7 +31,7 @@ import 'marked';
31
31
  import 'marked-terminal';
32
32
  import 'qrcode';
33
33
  import 'godot-export-presets';
34
- import { C as Command } from '../../Command-B-MWAVPL.js';
34
+ import { C as Command } from '../../Command-U8TqM6Zs.js';
35
35
  import '@expo/apple-utils/build/index.js';
36
36
  import 'fs';
37
37
  import 'path';
@@ -1,8 +1,8 @@
1
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { useStdout, useStderr, Box, Text, render } from 'ink';
4
- import { a3 as LogLevel, W as WEB_URL, g as getShortUUID, a4 as getShortAuthRequiredUrl, N as getJob, O as downloadBuildById, a5 as getErrorMessage } from '../../baseCommand-CpAJaJoG.js';
5
- import { j as CommandContext, d as GameContext, s as useSafeInput, M as Markdown, b as BaseGameCommand } from '../../baseGameCommand-Cbx4ywHl.js';
4
+ import { a4 as LogLevel, W as WEB_URL, g as getShortUUID, a5 as getShortAuthRequiredUrl, N as getJob, Q as downloadBuildById, a6 as getErrorMessage } from '../../baseCommand-ByzFMr-B.js';
5
+ import { j as CommandContext, d as GameContext, s as useSafeInput, M as Markdown, b as BaseGameCommand } from '../../baseGameCommand-D8Z3SaiJ.js';
6
6
  import 'ink-spinner';
7
7
  import 'node:crypto';
8
8
  import 'node:fs';
@@ -24,28 +24,28 @@ import 'fullscreen-ink';
24
24
  import 'string-length';
25
25
  import 'strip-ansi';
26
26
  import open from 'open';
27
- import { u as useShip, J as JobProgress } from '../../JobProgress-_cIUK7Ho.js';
28
- import { u as useJobWatching, J as JobLogTail } from '../../JobLogTail-BwFUt8LB.js';
29
- import { J as JobStatusTable } from '../../JobStatusTable-CyDhk3lr.js';
27
+ import { u as useShip, J as JobProgress } from '../../JobProgress-DwvTh5rS.js';
28
+ import { u as useJobWatching, J as JobLogTail } from '../../JobLogTail-7oEEQxIO.js';
29
+ import { J as JobStatusTable } from '../../JobStatusTable-DBM_PBPQ.js';
30
30
  import '@inkjs/ui';
31
31
  import 'qrcode';
32
32
  import 'godot-export-presets';
33
33
  import 'marked';
34
34
  import 'marked-terminal';
35
- import { C as CommandGame } from '../../CommandGame-DPJEVhuw.js';
35
+ import { C as CommandGame } from '../../CommandGame-hqY43vRo.js';
36
36
  import 'chalk';
37
37
  import '@expo/apple-utils/build/index.js';
38
38
  import 'fs';
39
39
  import 'path';
40
- import '../../useProjectCredentials-ADtDLDmx.js';
40
+ import '../../useProjectCredentials-B4cjpmpB.js';
41
41
  import '../../git-BpsfNFZ_.js';
42
42
  import '../../ProgressSpinner-Um6ARKlk.js';
43
- import '../../useWebSocket-DlNe_zDR.js';
43
+ import '../../useWebSocket-B1hQm8Ak.js';
44
44
  import '../../TruncatedText-DhEXCrnE.js';
45
45
  import '../../Title-BCQtayg6.js';
46
46
  import '../../StatusTable-DzRWcMr4.js';
47
- import '../../ErrorBox-DS5e6VmF.js';
48
- import '../../Command-B-MWAVPL.js';
47
+ import '../../ErrorBox-DLRncz8K.js';
48
+ import '../../Command-U8TqM6Zs.js';
49
49
 
50
50
  const JobFollow = ({
51
51
  jobId,
@@ -1,12 +1,12 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Flags } from '@oclif/core';
3
3
  import { render } from 'ink';
4
- import { B as BaseAuthenticatedCommand } from '../../baseGameCommand-Cbx4ywHl.js';
4
+ import { B as BaseAuthenticatedCommand } from '../../baseGameCommand-D8Z3SaiJ.js';
5
5
  import 'node:fs';
6
6
  import 'node:path';
7
7
  import 'chalk';
8
8
  import 'axios';
9
- import '../../baseCommand-CpAJaJoG.js';
9
+ import '../../baseCommand-ByzFMr-B.js';
10
10
  import 'luxon';
11
11
  import 'node:crypto';
12
12
  import 'node:readline';
@@ -24,22 +24,22 @@ import 'fullscreen-ink';
24
24
  import 'ink-spinner';
25
25
  import 'string-length';
26
26
  import 'strip-ansi';
27
- import { a as GameStatus$1 } from '../../GameStatus-XFGHRbVP.js';
27
+ import { a as GameStatus$1 } from '../../GameStatus-DRheSF2O.js';
28
28
  import 'open';
29
29
  import '@inkjs/ui';
30
30
  import 'marked';
31
31
  import 'marked-terminal';
32
32
  import 'qrcode';
33
33
  import 'godot-export-presets';
34
- import { C as CommandGame } from '../../CommandGame-DPJEVhuw.js';
34
+ import { C as CommandGame } from '../../CommandGame-hqY43vRo.js';
35
35
  import 'fs';
36
36
  import 'path';
37
37
  import '@expo/apple-utils/build/index.js';
38
38
  import '../../StatusTable-DzRWcMr4.js';
39
39
  import '../../Title-BCQtayg6.js';
40
40
  import '../../NextSteps-DbJHmscQ.js';
41
- import '../../ErrorBox-DS5e6VmF.js';
42
- import '../../Command-B-MWAVPL.js';
41
+ import '../../ErrorBox-DLRncz8K.js';
42
+ import '../../Command-U8TqM6Zs.js';
43
43
 
44
44
  class GameStatus extends BaseAuthenticatedCommand {
45
45
  static args = {};
@@ -1,12 +1,12 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { Args } from '@oclif/core';
3
3
  import { useScreenSize, withFullScreen } from 'fullscreen-ink';
4
- import { i as cacheKeys, j as CommandContext, d as GameContext, s as useSafeInput, M as Markdown, u as useBuilds, y as queryBuilds, l as fetchKeyTestResult, K as KeyTestStatus, o as KeyTestError, G as GameProvider, z as CreateGooglePlayGame, B as BaseAuthenticatedCommand } from '../../baseGameCommand-Cbx4ywHl.js';
4
+ import { i as cacheKeys, j as CommandContext, d as GameContext, s as useSafeInput, M as Markdown, u as useBuilds, y as queryBuilds, l as fetchKeyTestResult, K as KeyTestStatus, o as KeyTestError, G as GameProvider, z as CreateGooglePlayGame, B as BaseAuthenticatedCommand } from '../../baseGameCommand-D8Z3SaiJ.js';
5
5
  import fs__default from 'node:fs';
6
6
  import 'node:path';
7
7
  import 'chalk';
8
8
  import axios from 'axios';
9
- import { F as queryClient, r as getAuthedHeaders, q as API_URL, E as castArrayObjectDates, m as getProject, ae as updateProject, w as getGodotVersion, v as GameEngine, x as createProject, y as DEFAULT_PLATFORM_GLOBS, W as WEB_URL, af as getGradleBuildOptionKey, P as Platform, ag as BuildType, J as JobStatus, g as getShortUUID, i as isGradleBuildEnabled, s as setGradleBuildEnabled, C as CredentialsType, Q as getGoogleStatus, l as isCWDGodotGame } from '../../baseCommand-CpAJaJoG.js';
9
+ import { F as queryClient, r as getAuthedHeaders, q as API_URL, E as castArrayObjectDates, m as getProject, af as updateProject, w as getGodotVersion, v as GameEngine, x as createProject, y as DEFAULT_PLATFORM_GLOBS, W as WEB_URL, ag as getGradleBuildOptionKey, P as Platform, ah as BuildType, J as JobStatus, g as getShortUUID, i as isGradleBuildEnabled, s as setGradleBuildEnabled, C as CredentialsType, R as getGoogleStatus, l as isCWDGodotGame } from '../../baseCommand-ByzFMr-B.js';
10
10
  import 'luxon';
11
11
  import 'node:crypto';
12
12
  import 'node:readline';
@@ -25,32 +25,32 @@ import Spinner from 'ink-spinner';
25
25
  import 'string-length';
26
26
  import 'strip-ansi';
27
27
  import 'open';
28
- import { C as ConnectGoogle } from '../../index-KJtngKaE.js';
28
+ import { C as ConnectGoogle } from '../../index-DwEIHNF1.js';
29
29
  import { TextInput, Alert } from '@inkjs/ui';
30
30
  import 'marked';
31
31
  import 'marked-terminal';
32
32
  import 'qrcode';
33
33
  import { getMajorVersion } from 'godot-export-presets';
34
- import { u as useShip, J as JobProgress } from '../../JobProgress-_cIUK7Ho.js';
35
- import { J as JobLogTail } from '../../JobLogTail-BwFUt8LB.js';
36
- import { C as CreateServiceAccountKey } from '../../index-B5s20dhm.js';
37
- import { C as CreateKeystore } from '../../Create-CmEndHAZ.js';
38
- import { I as ImportKeystore } from '../../Import-ea-wsQt-.js';
39
- import { a as getProjectCredentials } from '../../index-By3xdL8c.js';
34
+ import { u as useShip, J as JobProgress } from '../../JobProgress-DwvTh5rS.js';
35
+ import { J as JobLogTail } from '../../JobLogTail-7oEEQxIO.js';
36
+ import { C as CreateServiceAccountKey } from '../../index-Dz17cbww.js';
37
+ import { C as CreateKeystore } from '../../Create-C--pV63B.js';
38
+ import { I as ImportKeystore } from '../../Import-CTgEEj_f.js';
39
+ import { a as getProjectCredentials } from '../../index-N3S598Wc.js';
40
40
  import { T as Title } from '../../Title-BCQtayg6.js';
41
- import { E as ErrorBox } from '../../ErrorBox-DS5e6VmF.js';
42
- import { C as Command } from '../../Command-B-MWAVPL.js';
41
+ import { E as ErrorBox } from '../../ErrorBox-DLRncz8K.js';
42
+ import { C as Command } from '../../Command-U8TqM6Zs.js';
43
43
  import 'fs';
44
44
  import 'path';
45
45
  import '@expo/apple-utils/build/index.js';
46
- import '../../useWebSocket-DlNe_zDR.js';
47
- import '../../useGoogleStatus-BHd_Wp59.js';
48
- import '../../useProjectCredentials-ADtDLDmx.js';
46
+ import '../../useWebSocket-B1hQm8Ak.js';
47
+ import '../../useGoogleStatus-DciPkOMu.js';
48
+ import '../../useProjectCredentials-B4cjpmpB.js';
49
49
  import '../../git-BpsfNFZ_.js';
50
50
  import '../../ProgressSpinner-Um6ARKlk.js';
51
51
  import '../../TruncatedText-DhEXCrnE.js';
52
52
  import '../../RunWithSpinner-DucRnFp6.js';
53
- import '../../import-IVcS8WFM.js';
53
+ import '../../import-sVng7ksa.js';
54
54
 
55
55
  const useInviteServiceAccount = () => useMutation({
56
56
  async mutationFn({ developerId, projectId }) {
@@ -313,20 +313,23 @@ const InitialAndroidBuild = ({ gameId, onComplete, onError, ...boxProps }) => {
313
313
  /* @__PURE__ */ jsx(Text, { children: "Create an initial build..." }),
314
314
  (isLoadingBuilds || isLoadingJobs || shipMutation.isPending) && /* @__PURE__ */ jsx(Spinner, { type: "dots" })
315
315
  ] }),
316
- androidJob === null && /* @__PURE__ */ jsx(Text, { children: shipLog }),
317
- androidJob && /* @__PURE__ */ jsx(
318
- JobProgress,
319
- {
320
- job: androidJob,
321
- onComplete,
322
- onFailure: (j) => {
323
- setFailedJob(j);
324
- setTimeout(() => {
325
- onError(new Error(`Job ${j.id} failed`));
326
- }, 1e3);
316
+ androidJob == null && shipLog && /* @__PURE__ */ jsx(Text, { children: shipLog }),
317
+ androidJob && /* @__PURE__ */ jsxs(Fragment, { children: [
318
+ /* @__PURE__ */ jsx(
319
+ JobProgress,
320
+ {
321
+ job: androidJob,
322
+ onComplete,
323
+ onFailure: (j) => {
324
+ setFailedJob(j);
325
+ setTimeout(() => {
326
+ onError(new Error(`Job ${j.id} failed`));
327
+ }, 1e3);
328
+ }
327
329
  }
328
- }
329
- ),
330
+ ),
331
+ /* @__PURE__ */ jsx(JobLogTail, { isWatching: true, jobId: androidJob.id, length: 10, projectId: gameId })
332
+ ] }),
330
333
  failedJob && /* @__PURE__ */ jsxs(Fragment, { children: [
331
334
  /* @__PURE__ */ jsx(
332
335
  Markdown,
@@ -2,7 +2,7 @@ import fs__default, { promises } from 'node:fs';
2
2
  import path__default from 'node:path';
3
3
  import { Args, Flags } from '@oclif/core';
4
4
  import 'axios';
5
- import { B as BaseCommand } from '../../baseCommand-CpAJaJoG.js';
5
+ import { B as BaseCommand } from '../../baseCommand-ByzFMr-B.js';
6
6
  import 'luxon';
7
7
  import 'node:crypto';
8
8
  import 'node:readline';
@@ -24,7 +24,7 @@ import 'string-length';
24
24
  import 'strip-ansi';
25
25
  import 'open';
26
26
  import '@inkjs/ui';
27
- import '../../baseGameCommand-Cbx4ywHl.js';
27
+ import '../../baseGameCommand-D8Z3SaiJ.js';
28
28
  import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
@@ -1,9 +1,9 @@
1
1
  import fs__default from 'node:fs';
2
2
  import path__default from 'node:path';
3
3
  import { Args, Flags } from '@oclif/core';
4
- import { p as ejs } from '../../baseGameCommand-Cbx4ywHl.js';
4
+ import { p as ejs } from '../../baseGameCommand-D8Z3SaiJ.js';
5
5
  import 'axios';
6
- import { B as BaseCommand } from '../../baseCommand-CpAJaJoG.js';
6
+ import { B as BaseCommand } from '../../baseCommand-ByzFMr-B.js';
7
7
  import 'luxon';
8
8
  import 'node:crypto';
9
9
  import 'node:readline';
@@ -1,10 +1,10 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import axios from 'axios';
3
- import { W as WEB_URL, B as BaseCommand, a0 as acceptTerms, q as API_URL, a1 as setAuthToken } from '../baseCommand-CpAJaJoG.js';
3
+ import { W as WEB_URL, B as BaseCommand, a1 as acceptTerms, q as API_URL, a2 as setAuthToken } from '../baseCommand-ByzFMr-B.js';
4
4
  import 'react/jsx-runtime';
5
5
  import 'ink';
6
6
  import 'ink-spinner';
7
- import { a as getInput } from '../baseGameCommand-Cbx4ywHl.js';
7
+ import { a as getInput } from '../baseGameCommand-D8Z3SaiJ.js';
8
8
  import 'react';
9
9
  import 'luxon';
10
10
  import 'string-length';
@@ -3,7 +3,7 @@ import chalk from 'chalk';
3
3
  import { render } from 'ink';
4
4
  import 'node:fs';
5
5
  import 'axios';
6
- import { B as BaseCommand, l as isCWDGodotGame } from '../baseCommand-CpAJaJoG.js';
6
+ import { B as BaseCommand, l as isCWDGodotGame } from '../baseCommand-ByzFMr-B.js';
7
7
  import 'luxon';
8
8
  import 'node:crypto';
9
9
  import 'node:path';
@@ -26,13 +26,13 @@ import 'strip-ansi';
26
26
  import { S as StatusTable } from '../StatusTable-DzRWcMr4.js';
27
27
  import 'open';
28
28
  import '@inkjs/ui';
29
- import '../baseGameCommand-Cbx4ywHl.js';
29
+ import '../baseGameCommand-D8Z3SaiJ.js';
30
30
  import 'marked';
31
31
  import 'marked-terminal';
32
32
  import { N as NextSteps } from '../NextSteps-DbJHmscQ.js';
33
33
  import 'qrcode';
34
34
  import 'godot-export-presets';
35
- import { C as Command } from '../Command-B-MWAVPL.js';
35
+ import { C as Command } from '../Command-U8TqM6Zs.js';
36
36
  import 'isomorphic-git';
37
37
  import '@expo/apple-utils/build/index.js';
38
38
  import '../Title-BCQtayg6.js';
@@ -1,7 +1,7 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import 'node:fs';
3
3
  import 'axios';
4
- import { B as BaseCommand, i as isGradleBuildEnabled, s as setGradleBuildEnabled } from '../../baseCommand-CpAJaJoG.js';
4
+ import { B as BaseCommand, i as isGradleBuildEnabled, s as setGradleBuildEnabled } from '../../baseCommand-ByzFMr-B.js';
5
5
  import 'luxon';
6
6
  import 'node:crypto';
7
7
  import 'node:path';
@@ -24,7 +24,7 @@ import 'string-length';
24
24
  import 'strip-ansi';
25
25
  import 'open';
26
26
  import '@inkjs/ui';
27
- import '../../baseGameCommand-Cbx4ywHl.js';
27
+ import '../../baseGameCommand-D8Z3SaiJ.js';
28
28
  import 'marked';
29
29
  import 'marked-terminal';
30
30
  import 'qrcode';
@@ -2,7 +2,7 @@ import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import { Flags, Args } from '@oclif/core';
4
4
  import xcode from 'xcode';
5
- import { B as BaseCommand } from '../../baseCommand-CpAJaJoG.js';
5
+ import { B as BaseCommand } from '../../baseCommand-ByzFMr-B.js';
6
6
  import 'chalk';
7
7
  import 'axios';
8
8
  import 'luxon';
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'node:fs';
2
2
  import axios from 'axios';
3
- import { q as API_URL, r as getAuthedHeaders } from './baseCommand-CpAJaJoG.js';
3
+ import { q as API_URL, r as getAuthedHeaders } from './baseCommand-ByzFMr-B.js';
4
4
 
5
5
  async function exportCredential({ credentialId, projectId, zipPath }) {
6
6
  const headers = getAuthedHeaders();
@@ -1,6 +1,6 @@
1
1
  import { promises } from 'node:fs';
2
2
  import axios from 'axios';
3
- import { q as API_URL, r as getAuthedHeaders } from './baseCommand-CpAJaJoG.js';
3
+ import { q as API_URL, r as getAuthedHeaders } from './baseCommand-ByzFMr-B.js';
4
4
 
5
5
  async function getNewImportTicket(projectId) {
6
6
  const url = projectId ? `${API_URL}/projects/${projectId}/credentials/import/url` : `${API_URL}/credentials/import/url`;
@@ -12,7 +12,7 @@ import 'readline-sync';
12
12
  import 'luxon';
13
13
  import 'axios';
14
14
  import 'isomorphic-git';
15
- import { a4 as getShortAuthRequiredUrl, a7 as getGoogleAuthUrl, W as WEB_URL } from './baseCommand-CpAJaJoG.js';
15
+ import { a5 as getShortAuthRequiredUrl, a8 as getGoogleAuthUrl, W as WEB_URL } from './baseCommand-ByzFMr-B.js';
16
16
  import '@oclif/core';
17
17
  import '@tanstack/react-query';
18
18
  import 'uuid';
@@ -20,10 +20,10 @@ import 'fast-glob';
20
20
  import 'stream';
21
21
  import 'yazl';
22
22
  import 'socket.io-client';
23
- import { u as useWebSocket } from './useWebSocket-DlNe_zDR.js';
24
- import { u as useGoogleStatus } from './useGoogleStatus-BHd_Wp59.js';
23
+ import { u as useWebSocket } from './useWebSocket-B1hQm8Ak.js';
24
+ import { u as useGoogleStatus } from './useGoogleStatus-DciPkOMu.js';
25
25
  import 'fullscreen-ink';
26
- import { d as GameContext, s as useSafeInput, M as Markdown } from './baseGameCommand-Cbx4ywHl.js';
26
+ import { d as GameContext, s as useSafeInput, M as Markdown } from './baseGameCommand-D8Z3SaiJ.js';
27
27
  import 'string-length';
28
28
  import 'strip-ansi';
29
29
  import '@inkjs/ui';
@@ -8,22 +8,22 @@ import 'node:path';
8
8
  import 'node:readline';
9
9
  import 'node:url';
10
10
  import 'readline-sync';
11
- import { r as getAuthedHeaders, q as API_URL, a6 as castObjectDates, F as queryClient, T as revokePolicy, S as enforcePolicy, P as Platform, C as CredentialsType, Q as getGoogleStatus, d as getShortDate } from './baseCommand-CpAJaJoG.js';
11
+ import { r as getAuthedHeaders, q as API_URL, a7 as castObjectDates, F as queryClient, V as revokePolicy, T as enforcePolicy, P as Platform, C as CredentialsType, R as getGoogleStatus, d as getShortDate } from './baseCommand-ByzFMr-B.js';
12
12
  import axios from 'axios';
13
13
  import 'isomorphic-git';
14
14
  import '@oclif/core';
15
15
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
16
16
  import 'luxon';
17
- import { i as cacheKeys, d as GameContext, s as useSafeInput, M as Markdown } from './baseGameCommand-Cbx4ywHl.js';
17
+ import { i as cacheKeys, d as GameContext, s as useSafeInput, M as Markdown } from './baseGameCommand-D8Z3SaiJ.js';
18
18
  import 'uuid';
19
19
  import 'fast-glob';
20
20
  import 'stream';
21
21
  import 'yazl';
22
22
  import 'socket.io-client';
23
23
  import 'fullscreen-ink';
24
- import { u as useWebSocket } from './useWebSocket-DlNe_zDR.js';
25
- import { u as useProjectCredentials } from './useProjectCredentials-ADtDLDmx.js';
26
- import { u as useGoogleStatus } from './useGoogleStatus-BHd_Wp59.js';
24
+ import { u as useWebSocket } from './useWebSocket-B1hQm8Ak.js';
25
+ import { u as useProjectCredentials } from './useProjectCredentials-B4cjpmpB.js';
26
+ import { u as useGoogleStatus } from './useGoogleStatus-DciPkOMu.js';
27
27
  import 'string-length';
28
28
  import 'strip-ansi';
29
29
  import 'open';
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { q as API_URL, E as castArrayObjectDates, r as getAuthedHeaders } from './baseCommand-CpAJaJoG.js';
2
+ import { q as API_URL, E as castArrayObjectDates, r as getAuthedHeaders } from './baseCommand-ByzFMr-B.js';
3
3
  import 'node:fs';
4
4
 
5
5
  async function getUserCredentials(pageSize = 100) {
@@ -1,5 +1,5 @@
1
1
  import axios from 'axios';
2
- import { q as API_URL, r as getAuthedHeaders } from './baseCommand-CpAJaJoG.js';
2
+ import { q as API_URL, r as getAuthedHeaders } from './baseCommand-ByzFMr-B.js';
3
3
 
4
4
  async function getNewUploadTicket(projectId = null) {
5
5
  const url = projectId ? `${API_URL}/projects/${projectId}/credentials/url` : `${API_URL}/credentials/url`;
@@ -1,5 +1,5 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import { h as App } from './baseCommand-CpAJaJoG.js';
2
+ import { h as App } from './baseCommand-ByzFMr-B.js';
3
3
 
4
4
  const queryAppleApp = async ({ ctx, iosBundleId }) => {
5
5
  if (!iosBundleId) {
@@ -1,5 +1,5 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import { f as BundleId, t as getGodotProjectCapabilities, P as Platform, G as GODOT_CAPABILITIES, u as CapabilityType } from './baseCommand-CpAJaJoG.js';
2
+ import { f as BundleId, t as getGodotProjectCapabilities, P as Platform, G as GODOT_CAPABILITIES, u as CapabilityType } from './baseCommand-ByzFMr-B.js';
3
3
 
4
4
  async function getBundleIdCapabilities(bundleId) {
5
5
  const current = await bundleId.getBundleIdCapabilitiesAsync();
@@ -1,6 +1,6 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
2
  import { DateTime } from 'luxon';
3
- import { d as getShortDate, o as Profile, p as ProfileType } from './baseCommand-CpAJaJoG.js';
3
+ import { d as getShortDate, o as Profile, p as ProfileType } from './baseCommand-ByzFMr-B.js';
4
4
  import 'node:crypto';
5
5
  import 'node:fs';
6
6
  import 'node:path';
@@ -1,6 +1,6 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import { Q as getGoogleStatus } from './baseCommand-CpAJaJoG.js';
3
- import { i as cacheKeys } from './baseGameCommand-Cbx4ywHl.js';
2
+ import { R as getGoogleStatus } from './baseCommand-ByzFMr-B.js';
3
+ import { i as cacheKeys } from './baseGameCommand-D8Z3SaiJ.js';
4
4
 
5
5
  const useGoogleStatus = () => useQuery({
6
6
  queryFn: getGoogleStatus,
@@ -1,6 +1,6 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
2
  import axios from 'axios';
3
- import { r as getAuthedHeaders, q as API_URL, E as castArrayObjectDates, g as getShortUUID, d as getShortDate } from './baseCommand-CpAJaJoG.js';
3
+ import { r as getAuthedHeaders, q as API_URL, E as castArrayObjectDates, g as getShortUUID, d as getShortDate } from './baseCommand-ByzFMr-B.js';
4
4
  import 'node:crypto';
5
5
  import 'node:fs';
6
6
  import 'node:path';
@@ -11,7 +11,7 @@ import 'isomorphic-git';
11
11
  import '@oclif/core';
12
12
  import 'react';
13
13
  import 'luxon';
14
- import { i as cacheKeys } from './baseGameCommand-Cbx4ywHl.js';
14
+ import { i as cacheKeys } from './baseGameCommand-D8Z3SaiJ.js';
15
15
  import 'uuid';
16
16
  import 'fast-glob';
17
17
  import 'stream';
@@ -1,6 +1,6 @@
1
1
  import { useEffect } from 'react';
2
2
  import { io } from 'socket.io-client';
3
- import { I as WS_URL, K as getAuthToken } from './baseCommand-CpAJaJoG.js';
3
+ import { I as WS_URL, K as getAuthToken } from './baseCommand-ByzFMr-B.js';
4
4
 
5
5
  function useWebSocket(listeners = []) {
6
6
  const log = () => {
@@ -0,0 +1,30 @@
1
+ # Command: `game job logs`
2
+
3
+ ## Description
4
+
5
+ Downloads the full plain-text logs for a job and writes them to stdout.
6
+
7
+ ## Help Output
8
+
9
+ ```help
10
+ USAGE
11
+ $ shipthis game job logs JOB_ID [-g <value>]
12
+
13
+ ARGUMENTS
14
+ JOB_ID The id of the job to get the logs for
15
+
16
+ FLAGS
17
+ -g, --gameId=<value> The ID of the game
18
+
19
+ DESCRIPTION
20
+ Downloads the full plain-text logs for a job and writes them to stdout.
21
+
22
+ EXAMPLES
23
+ $ shipthis game job logs 4d32239e
24
+
25
+ $ shipthis game job logs 4d32239e > job.log
26
+
27
+ $ shipthis game job logs 4d32239e | grep -i error
28
+
29
+ $ shipthis game job logs --gameId 0c179fc4 4d32239e | less
30
+ ```