shipthis 0.1.39 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -0
- package/assets/markdown/confirm-change-android-build-method.md.ejs +13 -0
- package/dist/{AppleBundleIdDetails-Ck7iAjMb.js → AppleBundleIdDetails-jDq3gYbk.js} +7 -5
- package/dist/{Command-C84QiOWP.js → Command-cVo97lkQ.js} +2 -1
- package/dist/{CommandGame-CsM9GE5Q.js → CommandGame-BwudtYCO.js} +2 -2
- package/dist/{Create-Dx1nEKmS.js → Create-By4NsPEI.js} +3 -1
- package/dist/{GameStatus-B4WBgoLs.js → GameStatus-C59zQE1H.js} +3 -1
- package/dist/{Import-BC5XgwRT.js → Import-DTcVM-T-.js} +4 -2
- package/dist/{JobLogTail-mBXpeWMu.js → JobLogTail-BzisGkY8.js} +30 -16
- package/dist/{JobProgress-KZ6EkMFi.js → JobProgress-DAnhaTho.js} +21 -9
- package/dist/{JobStatusTable-BYIxTt0d.js → JobStatusTable-BYEi8dtD.js} +3 -2
- package/dist/{ProjectCredentialsTable-DSy1YIWX.js → ProjectCredentialsTable-NZf3V39z.js} +2 -2
- package/dist/{UserCredentialsTable-qNByRE84.js → UserCredentialsTable-Dp884nYO.js} +2 -1
- package/dist/{baseAppleCommand-CdROzhyU.js → baseAppleCommand-DewNWX3L.js} +1 -1
- package/dist/baseCommand-CscxrTMI.js +757 -0
- package/dist/{baseGameAndroidCommand-B21zS0MN.js → baseGameAndroidCommand-CEcDz5P2.js} +4 -2
- package/dist/{index-Cv-92xRd.js → baseGameCommand-BKvHM3h_.js} +19 -755
- package/dist/commands/apiKey/create.js +7 -7
- package/dist/commands/apiKey/list.js +7 -7
- package/dist/commands/apiKey/revoke.js +7 -7
- package/dist/commands/apple/apiKey/create.js +14 -14
- package/dist/commands/apple/apiKey/delete.js +8 -8
- package/dist/commands/apple/apiKey/export.js +14 -14
- package/dist/commands/apple/apiKey/import.js +14 -14
- package/dist/commands/apple/apiKey/status.js +13 -13
- package/dist/commands/apple/certificate/create.js +14 -14
- package/dist/commands/apple/certificate/delete.js +8 -8
- package/dist/commands/apple/certificate/export.js +14 -14
- package/dist/commands/apple/certificate/import.js +14 -14
- package/dist/commands/apple/certificate/status.js +13 -13
- package/dist/commands/apple/login.js +5 -5
- package/dist/commands/apple/status.js +13 -13
- package/dist/commands/dashboard.js +8 -8
- package/dist/commands/game/android/apiKey/connect.js +12 -12
- package/dist/commands/game/android/apiKey/create.js +14 -14
- package/dist/commands/game/android/apiKey/delete.js +7 -7
- package/dist/commands/game/android/apiKey/export.js +14 -14
- package/dist/commands/game/android/apiKey/import.js +14 -14
- package/dist/commands/game/android/apiKey/invite.js +20 -20
- package/dist/commands/game/android/apiKey/policy.js +9 -9
- package/dist/commands/game/android/apiKey/status.js +14 -14
- package/dist/commands/game/android/keyStore/create.js +11 -11
- package/dist/commands/game/android/keyStore/delete.js +7 -7
- package/dist/commands/game/android/keyStore/export.js +13 -13
- package/dist/commands/game/android/keyStore/import.js +16 -16
- package/dist/commands/game/android/keyStore/status.js +16 -16
- package/dist/commands/game/android/status.js +6 -6
- package/dist/commands/game/build/download.js +7 -7
- package/dist/commands/game/build/list.js +12 -12
- package/dist/commands/game/create.js +5 -5
- package/dist/commands/game/details.js +16 -13
- package/dist/commands/game/export.js +5 -5
- package/dist/commands/game/ios/app/addTester.js +9 -9
- package/dist/commands/game/ios/app/create.js +10 -9
- package/dist/commands/game/ios/app/status.js +14 -14
- package/dist/commands/game/ios/app/sync.js +12 -12
- package/dist/commands/game/ios/profile/create.js +10 -10
- package/dist/commands/game/ios/profile/delete.js +8 -8
- package/dist/commands/game/ios/profile/export.js +13 -13
- package/dist/commands/game/ios/profile/import.js +13 -13
- package/dist/commands/game/ios/profile/status.js +14 -14
- package/dist/commands/game/ios/status.js +18 -18
- package/dist/commands/game/ios/wizard.js +8 -8
- package/dist/commands/game/job/list.js +7 -7
- package/dist/commands/game/job/status.js +14 -14
- package/dist/commands/game/list.js +7 -7
- package/dist/commands/game/ship.js +30 -13
- package/dist/commands/game/status.js +14 -14
- package/dist/commands/game/wizard.js +87 -37
- package/dist/commands/internal/fastlane.js +13 -13
- package/dist/commands/internal/readme.js +17 -17
- package/dist/commands/login.js +21 -21
- package/dist/commands/status.js +10 -10
- package/dist/commands/util/android-build-method.js +66 -0
- package/dist/commands/util/glass.js +118 -0
- package/dist/{export-BtUjg3Tl.js → export-DBQHSKU-.js} +1 -1
- package/dist/{import-BYSkF-tX.js → import-Bk4w8kks.js} +1 -1
- package/dist/{index-CcGRePRU.js → index-WrVwh6le.js} +6 -4
- package/dist/{index-Du6l7ZyV.js → index-qOGviaGc.js} +1 -1
- package/dist/{index-CgGLBt2v.js → index-zdIBXHs2.js} +5 -3
- package/dist/{upload-LoVBuJbT.js → upload-CeRPHRCP.js} +1 -1
- package/dist/{useAppleApp-Bg0x6s97.js → useAppleApp-DgZH0CBS.js} +1 -1
- package/dist/{useAppleBundleId-CEOssLqN.js → useAppleBundleId-CA7Pg4Hi.js} +2 -2
- package/dist/{useAppleProfiles-CHf_gHdZ.js → useAppleProfiles-CUBTPbcC.js} +1 -1
- package/dist/{useGoogleStatus-Ch36GbVo.js → useGoogleStatus-DpPwKmw_.js} +2 -1
- package/dist/{useProjectCredentials-CsQWPdyo.js → useProjectCredentials-rQLm2O1J.js} +2 -1
- package/dist/{useWebSocket-CWeaaLqi.js → useWebSocket-PU55rRGt.js} +1 -1
- package/docs/README.md +1 -0
- package/docs/util/android-build-method.md +26 -0
- package/docs/util/glass.md +47 -0
- package/docs/util.md +12 -0
- package/npm-shrinkwrap.json +14181 -0
- package/oclif.manifest.json +2966 -0
- package/package.json +11 -6
package/README.md
CHANGED
|
@@ -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
|
|
@@ -358,6 +415,7 @@ We store:
|
|
|
358
415
|
- [apiKey](https://shipth.is/docs/reference/apiKey?ref=github_readme) - Commands related to ShipThis API Keys
|
|
359
416
|
- [apple](https://shipth.is/docs/reference/apple?ref=github_readme) - Commands that relate to linking your ShipThis account with your Apple Developer account
|
|
360
417
|
- [game](https://shipth.is/docs/reference/game?ref=github_readme) - Commands that relate to configuring the specific game in the current working directory.
|
|
418
|
+
- [util](https://shipth.is/docs/reference/util?ref=github_readme) - Utility commands that do not require authentication
|
|
361
419
|
|
|
362
420
|
### 🔧 Commands
|
|
363
421
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Confirm change to export_presets.cfg
|
|
2
|
+
|
|
3
|
+
**In order to publish your game on Google Play, an edit must be made to your `export_presets.cfg` file to enable the Gradle build method.**
|
|
4
|
+
|
|
5
|
+
This change is necessary because Google Play requires Android App Bundles (AAB files) for new apps, and the Gradle build method is needed to create AAB files.
|
|
6
|
+
|
|
7
|
+
You can read more about this in the **ShipThis Documentation** [<%= docsURL %>](<%= docsURL %>)
|
|
8
|
+
|
|
9
|
+
You are using Godot version **<%= godotVersion %>**, ShipThis will update the **<%= optionKey %>** option in your `export_presets.cfg` file to enable the Gradle build method.
|
|
10
|
+
|
|
11
|
+
## Do you want to proceed with this change?
|
|
12
|
+
|
|
13
|
+
Please press **Y** to confirm and proceed with the change or **N** to cancel the operation and exit the Android wizard.
|
|
@@ -11,26 +11,28 @@ import 'readline-sync';
|
|
|
11
11
|
import 'luxon';
|
|
12
12
|
import 'axios';
|
|
13
13
|
import 'isomorphic-git';
|
|
14
|
-
import './
|
|
14
|
+
import './baseCommand-CscxrTMI.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-
|
|
20
|
+
import { u as useAppleApp } from './useAppleApp-DgZH0CBS.js';
|
|
21
21
|
import 'fast-glob';
|
|
22
22
|
import 'yazl';
|
|
23
23
|
import 'socket.io-client';
|
|
24
24
|
import 'fullscreen-ink';
|
|
25
|
-
import { T as Table } from './Table-FaNgpyeq.js';
|
|
26
|
-
import { T as Title } from './Title-BCQtayg6.js';
|
|
27
25
|
import 'string-length';
|
|
28
26
|
import 'strip-ansi';
|
|
27
|
+
import { T as Table } from './Table-FaNgpyeq.js';
|
|
28
|
+
import { T as Title } from './Title-BCQtayg6.js';
|
|
29
29
|
import 'open';
|
|
30
|
+
import './baseGameCommand-BKvHM3h_.js';
|
|
31
|
+
import 'godot-export-presets';
|
|
30
32
|
import 'marked';
|
|
31
33
|
import 'marked-terminal';
|
|
32
34
|
import 'qrcode';
|
|
33
|
-
import { u as useAppleBundleId } from './useAppleBundleId-
|
|
35
|
+
import { u as useAppleBundleId } from './useAppleBundleId-CA7Pg4Hi.js';
|
|
34
36
|
|
|
35
37
|
const AppleAppDetails = (props) => {
|
|
36
38
|
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 {
|
|
5
|
+
import { I as queryClient } from './baseCommand-CscxrTMI.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 { C as CommandProvider } from './baseGameCommand-BKvHM3h_.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 {
|
|
3
|
-
import { C as Command } from './Command-
|
|
2
|
+
import { G as GameProvider } from './baseGameCommand-BKvHM3h_.js';
|
|
3
|
+
import { C as Command } from './Command-cVo97lkQ.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 {
|
|
6
|
+
import { q as getAuthedHeaders, p as API_URL } from './baseCommand-CscxrTMI.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 { i as GameContext, k as cacheKeys } from './baseGameCommand-BKvHM3h_.js';
|
|
17
18
|
import 'fast-glob';
|
|
18
19
|
import 'uuid';
|
|
19
20
|
import 'yazl';
|
|
@@ -27,6 +28,7 @@ import 'marked';
|
|
|
27
28
|
import 'marked-terminal';
|
|
28
29
|
import 'qrcode';
|
|
29
30
|
import { R as RunWithSpinner } from './RunWithSpinner-DucRnFp6.js';
|
|
31
|
+
import 'godot-export-presets';
|
|
30
32
|
|
|
31
33
|
const CreateKeystore = ({ onComplete, onError, ...boxProps }) => {
|
|
32
34
|
const { gameId } = useContext(GameContext);
|
|
@@ -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 {
|
|
4
|
+
import { c as getShortDate, P as Platform, l as getProject, M as getProjectPlatformProgress } from './baseCommand-CscxrTMI.js';
|
|
5
5
|
import 'ink-spinner';
|
|
6
|
+
import { g as getShortUUID, m as makeHumanReadable, i as GameContext, j as CommandContext } from './baseGameCommand-BKvHM3h_.js';
|
|
6
7
|
import '@tanstack/react-query';
|
|
7
8
|
import 'axios';
|
|
8
9
|
import 'luxon';
|
|
@@ -22,6 +23,7 @@ import 'marked';
|
|
|
22
23
|
import 'marked-terminal';
|
|
23
24
|
import { N as NextSteps } from './NextSteps-DbJHmscQ.js';
|
|
24
25
|
import 'qrcode';
|
|
26
|
+
import 'godot-export-presets';
|
|
25
27
|
|
|
26
28
|
function isPlatformConfigured(platform, progress) {
|
|
27
29
|
if (!progress) return false;
|
|
@@ -11,7 +11,7 @@ import 'readline-sync';
|
|
|
11
11
|
import 'luxon';
|
|
12
12
|
import 'axios';
|
|
13
13
|
import 'isomorphic-git';
|
|
14
|
-
import {
|
|
14
|
+
import { I as queryClient, P as Platform, C as CredentialsType } from './baseCommand-CscxrTMI.js';
|
|
15
15
|
import '@oclif/core';
|
|
16
16
|
import { useMutation } from '@tanstack/react-query';
|
|
17
17
|
import 'crypto-js';
|
|
@@ -24,10 +24,12 @@ import 'string-length';
|
|
|
24
24
|
import 'strip-ansi';
|
|
25
25
|
import 'open';
|
|
26
26
|
import '@inkjs/ui';
|
|
27
|
+
import { k as cacheKeys, i as GameContext } from './baseGameCommand-BKvHM3h_.js';
|
|
27
28
|
import 'marked';
|
|
28
29
|
import 'marked-terminal';
|
|
29
30
|
import 'qrcode';
|
|
30
|
-
import
|
|
31
|
+
import 'godot-export-presets';
|
|
32
|
+
import { i as importCredential } from './import-Bk4w8kks.js';
|
|
31
33
|
|
|
32
34
|
async function importKeystore({ log = () => {
|
|
33
35
|
}, ...opt }) {
|
|
@@ -7,11 +7,8 @@ import { useState, useRef, useEffect } from 'react';
|
|
|
7
7
|
import 'node:fs';
|
|
8
8
|
import 'crypto-js';
|
|
9
9
|
import 'uuid';
|
|
10
|
-
import {
|
|
10
|
+
import { q as getAuthedHeaders, p as API_URL, H as castArrayObjectDates, J as JobStatus, a8 as castJobDates, a6 as castObjectDates, a9 as getShortTime } from './baseCommand-CscxrTMI.js';
|
|
11
11
|
import 'luxon';
|
|
12
|
-
import 'fast-glob';
|
|
13
|
-
import 'yazl';
|
|
14
|
-
import 'socket.io-client';
|
|
15
12
|
import 'node:crypto';
|
|
16
13
|
import 'node:path';
|
|
17
14
|
import 'node:readline';
|
|
@@ -19,8 +16,12 @@ import 'node:url';
|
|
|
19
16
|
import 'readline-sync';
|
|
20
17
|
import 'isomorphic-git';
|
|
21
18
|
import '@oclif/core';
|
|
19
|
+
import 'fast-glob';
|
|
20
|
+
import 'yazl';
|
|
21
|
+
import 'socket.io-client';
|
|
22
|
+
import { k as cacheKeys, y as useJob, h as getStageColor, u as getMessageColor } from './baseGameCommand-BKvHM3h_.js';
|
|
22
23
|
import 'fullscreen-ink';
|
|
23
|
-
import { u as useWebSocket } from './useWebSocket-
|
|
24
|
+
import { u as useWebSocket } from './useWebSocket-PU55rRGt.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';
|
|
@@ -133,7 +134,18 @@ function useJobWatching({
|
|
|
133
134
|
}
|
|
134
135
|
|
|
135
136
|
function getSortedJobLogs(logs) {
|
|
136
|
-
return logs.sort((a, b) =>
|
|
137
|
+
return [...logs].sort((a, b) => {
|
|
138
|
+
if (a.sequence != null && b.sequence != null) {
|
|
139
|
+
return a.sequence - b.sequence;
|
|
140
|
+
}
|
|
141
|
+
if (a.sequence != null && b.sequence == null) {
|
|
142
|
+
return -1;
|
|
143
|
+
}
|
|
144
|
+
if (a.sequence == null && b.sequence != null) {
|
|
145
|
+
return 1;
|
|
146
|
+
}
|
|
147
|
+
return a.sentAt.toMillis() - b.sentAt.toMillis();
|
|
148
|
+
});
|
|
137
149
|
}
|
|
138
150
|
function useJobLogTail({ isWatching, jobId, length, projectId }) {
|
|
139
151
|
const [websocketLogs, setWebsocketLogs] = useState([]);
|
|
@@ -182,21 +194,23 @@ const TruncatedText = ({ children, wrap, ...textPropsWithoutWrap }) => {
|
|
|
182
194
|
return /* @__PURE__ */ jsx(Box, { ref, children: /* @__PURE__ */ jsx(Text, { ...textPropsWithoutWrap, children: getTruncated(children) + "\x1B[0m" }) });
|
|
183
195
|
};
|
|
184
196
|
|
|
197
|
+
const JobLogLine = ({ log, showTimestamp = true, showStage = true }) => {
|
|
198
|
+
const stageColor = getStageColor(log.stage);
|
|
199
|
+
const messageColor = getMessageColor(log.level);
|
|
200
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", height: 1, overflow: "hidden", gap: 1, children: [
|
|
201
|
+
showTimestamp && /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { children: getShortTime(log.sentAt) }) }),
|
|
202
|
+
showStage && /* @__PURE__ */ jsx(Box, { justifyContent: "flex-start", width: 9, children: /* @__PURE__ */ jsx(Text, { color: stageColor, children: log.stage }) }),
|
|
203
|
+
/* @__PURE__ */ jsx(Box, { height: 1, marginRight: 2, overflow: "hidden", children: /* @__PURE__ */ jsx(TruncatedText, { color: messageColor, children: log.message }) })
|
|
204
|
+
] }, log.id);
|
|
205
|
+
};
|
|
206
|
+
|
|
185
207
|
const JobLogTail = (props) => {
|
|
186
208
|
const { data, isLoading } = useJobLogTail(props);
|
|
187
209
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
|
|
188
210
|
/* @__PURE__ */ jsx(Title, { children: "Job Logs" }),
|
|
189
211
|
isLoading && /* @__PURE__ */ jsx(Spinner, { type: "dots" }),
|
|
190
|
-
/* @__PURE__ */ jsx(Box, { flexDirection: "column", children: data.map((log) => {
|
|
191
|
-
const stageColor = getStageColor(log.stage);
|
|
192
|
-
const messageColor = getMessageColor(log.level);
|
|
193
|
-
return /* @__PURE__ */ jsxs(Box, { flexDirection: "row", height: 1, overflow: "hidden", children: [
|
|
194
|
-
/* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { children: getShortTime(log.sentAt) }) }),
|
|
195
|
-
/* @__PURE__ */ jsx(Box, { justifyContent: "flex-start", marginLeft: 1, width: 9, children: /* @__PURE__ */ jsx(Text, { color: stageColor, children: log.stage }) }),
|
|
196
|
-
/* @__PURE__ */ jsx(Box, { height: 1, marginLeft: 1, marginRight: 2, overflow: "hidden", children: /* @__PURE__ */ jsx(TruncatedText, { color: messageColor, children: log.message }) })
|
|
197
|
-
] }, log.id);
|
|
198
|
-
}) })
|
|
212
|
+
/* @__PURE__ */ jsx(Box, { flexDirection: "column", children: data.map((log) => /* @__PURE__ */ jsx(JobLogLine, { log }, log.id)) })
|
|
199
213
|
] });
|
|
200
214
|
};
|
|
201
215
|
|
|
202
|
-
export { JobLogTail as J, useJobWatching as u };
|
|
216
|
+
export { JobLogTail as J, JobLogLine as a, useJobWatching as u };
|
|
@@ -4,19 +4,18 @@ 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 {
|
|
7
|
+
import { I as queryClient, l as getProject, x as DEFAULT_SHIPPED_FILES_GLOBS, y as DEFAULT_IGNORED_FILES_GLOBS, a2 as getNewUploadTicket, a3 as startJobsFromUpload, a4 as LogLevel } from './baseCommand-CscxrTMI.js';
|
|
8
|
+
import { k as cacheKeys, s as getFileHash, t as getPlatformName, u as getMessageColor } from './baseGameCommand-BKvHM3h_.js';
|
|
8
9
|
import { g as getCWDGitInfo } from './git-BpsfNFZ_.js';
|
|
9
|
-
import {
|
|
10
|
-
import 'ink';
|
|
10
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
11
|
+
import { Box, Text } from 'ink';
|
|
11
12
|
import 'ink-spinner';
|
|
12
|
-
import 'react';
|
|
13
|
+
import { useState } from 'react';
|
|
13
14
|
import 'crypto-js';
|
|
14
15
|
import 'luxon';
|
|
15
16
|
import 'socket.io-client';
|
|
16
|
-
import { u as useJobWatching } from './JobLogTail-
|
|
17
|
+
import { u as useJobWatching, a as JobLogLine } from './JobLogTail-BzisGkY8.js';
|
|
17
18
|
import 'fullscreen-ink';
|
|
18
|
-
import 'string-length';
|
|
19
|
-
import 'strip-ansi';
|
|
20
19
|
import 'open';
|
|
21
20
|
import '@inkjs/ui';
|
|
22
21
|
import 'node:path';
|
|
@@ -24,6 +23,9 @@ import 'marked';
|
|
|
24
23
|
import 'marked-terminal';
|
|
25
24
|
import { P as ProgressSpinner } from './ProgressSpinner-Um6ARKlk.js';
|
|
26
25
|
import 'qrcode';
|
|
26
|
+
import 'string-length';
|
|
27
|
+
import 'strip-ansi';
|
|
28
|
+
import 'godot-export-presets';
|
|
27
29
|
|
|
28
30
|
async function ship({ command, log = () => {
|
|
29
31
|
}, shipFlags }) {
|
|
@@ -112,15 +114,25 @@ const useShip = () => useMutation({
|
|
|
112
114
|
});
|
|
113
115
|
|
|
114
116
|
const JobProgress = (props) => {
|
|
117
|
+
const [lastWarningLog, setLastWarningLog] = useState(null);
|
|
115
118
|
const { progress } = useJobWatching({
|
|
116
119
|
isWatching: true,
|
|
117
120
|
jobId: props.job.id,
|
|
118
121
|
onComplete: props.onComplete,
|
|
119
122
|
onFailure: props.onFailure,
|
|
120
|
-
projectId: props.job.project.id
|
|
123
|
+
projectId: props.job.project.id,
|
|
124
|
+
onNewLogEntry: (logEntry) => {
|
|
125
|
+
if (logEntry.level == LogLevel.WARN) setLastWarningLog(logEntry);
|
|
126
|
+
}
|
|
121
127
|
});
|
|
122
128
|
const label = `${getPlatformName(props.job.type)} build progress...`;
|
|
123
|
-
return /* @__PURE__ */
|
|
129
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 0, children: [
|
|
130
|
+
/* @__PURE__ */ jsx(ProgressSpinner, { label, progress, spinnerType: "dots" }),
|
|
131
|
+
lastWarningLog && /* @__PURE__ */ jsxs(Box, { flexDirection: "row", gap: 1, marginLeft: 2, children: [
|
|
132
|
+
/* @__PURE__ */ jsx(Text, { color: getMessageColor(lastWarningLog.level), children: "WARNING" }),
|
|
133
|
+
/* @__PURE__ */ jsx(JobLogLine, { log: lastWarningLog, showTimestamp: false, showStage: false })
|
|
134
|
+
] })
|
|
135
|
+
] });
|
|
124
136
|
};
|
|
125
137
|
|
|
126
138
|
export { JobProgress as J, useShip as u };
|
|
@@ -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 {
|
|
6
|
+
import { J as JobStatus } from './baseCommand-CscxrTMI.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-BKvHM3h_.js';
|
|
12
13
|
import 'fast-glob';
|
|
13
14
|
import 'yazl';
|
|
14
15
|
import 'socket.io-client';
|
|
15
|
-
import { u as useJobWatching } from './JobLogTail-
|
|
16
|
+
import { u as useJobWatching } from './JobLogTail-BzisGkY8.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 './
|
|
13
|
+
import './baseCommand-CscxrTMI.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-
|
|
19
|
+
import { u as useProjectCredentials, g as getProjectCredentialSummary } from './useProjectCredentials-rQLm2O1J.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 {
|
|
13
|
+
import { c as getShortDate, q as getAuthedHeaders, p as API_URL, H as castArrayObjectDates } from './baseCommand-CscxrTMI.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-BKvHM3h_.js';
|
|
21
22
|
import 'socket.io-client';
|
|
22
23
|
import 'fullscreen-ink';
|
|
23
24
|
import { T as Table } from './Table-FaNgpyeq.js';
|