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.
- package/README.md +62 -5
- package/dist/{AppleBundleIdDetails-CgleH2pl.js → AppleBundleIdDetails-BJC7GCx_.js} +4 -3
- package/dist/{Command-7dCv1F9p.js → Command-Cj6F5B5a.js} +2 -1
- package/dist/{CommandGame-er5Ql6hq.js → CommandGame-CuvuH-z6.js} +2 -2
- package/dist/{Create-pLXESvEq.js → Create-pfGYcKu4.js} +2 -1
- package/dist/{GameStatus-B_Iw9tYr.js → GameStatus-ZSe-qG3y.js} +2 -1
- package/dist/{Import-fIsrfsmr.js → Import-D046HBaF.js} +3 -2
- package/dist/{JobLogTail-BPcQ8ghI.js → JobLogTail-Da8GuReK.js} +3 -2
- package/dist/{JobProgress-CpEatVPs.js → JobProgress-DltCQpzA.js} +9 -6
- package/dist/{JobStatusTable-BmJLzsUN.js → JobStatusTable-DVJjHw97.js} +3 -2
- package/dist/{ProjectCredentialsTable-DvPDhi7C.js → ProjectCredentialsTable-BJJz7W1P.js} +2 -2
- package/dist/{UserCredentialsTable-MBm1vAP3.js → UserCredentialsTable-CSynIVHU.js} +2 -1
- package/dist/{baseAppleCommand-uL0Gnav4.js → baseAppleCommand-Aq-Eaw_K.js} +1 -1
- package/dist/baseCommand-CTn3KGH3.js +787 -0
- package/dist/{baseGameAndroidCommand-CKTSQyZV.js → baseGameAndroidCommand-DRzVMKuG.js} +2 -1
- package/dist/{index-DHioYOIm.js → baseGameCommand-8VL7xe-O.js} +18 -749
- package/dist/commands/apiKey/create.js +6 -5
- package/dist/commands/apiKey/list.js +6 -5
- package/dist/commands/apiKey/revoke.js +6 -5
- package/dist/commands/apple/apiKey/create.js +13 -12
- package/dist/commands/apple/apiKey/delete.js +7 -6
- package/dist/commands/apple/apiKey/export.js +14 -13
- package/dist/commands/apple/apiKey/import.js +14 -13
- package/dist/commands/apple/apiKey/status.js +13 -12
- package/dist/commands/apple/certificate/create.js +13 -12
- package/dist/commands/apple/certificate/delete.js +7 -6
- package/dist/commands/apple/certificate/export.js +14 -13
- package/dist/commands/apple/certificate/import.js +14 -13
- package/dist/commands/apple/certificate/status.js +13 -12
- package/dist/commands/apple/login.js +4 -3
- package/dist/commands/apple/status.js +13 -12
- package/dist/commands/dashboard.js +9 -8
- package/dist/commands/game/android/apiKey/connect.js +11 -10
- package/dist/commands/game/android/apiKey/create.js +13 -12
- package/dist/commands/game/android/apiKey/delete.js +6 -5
- package/dist/commands/game/android/apiKey/export.js +13 -12
- package/dist/commands/game/android/apiKey/import.js +13 -12
- package/dist/commands/game/android/apiKey/invite.js +21 -20
- package/dist/commands/game/android/apiKey/policy.js +8 -7
- package/dist/commands/game/android/apiKey/status.js +13 -12
- package/dist/commands/game/android/keyStore/create.js +10 -9
- package/dist/commands/game/android/keyStore/delete.js +6 -5
- package/dist/commands/game/android/keyStore/export.js +12 -11
- package/dist/commands/game/android/keyStore/import.js +15 -14
- package/dist/commands/game/android/keyStore/status.js +15 -14
- package/dist/commands/game/android/status.js +7 -6
- package/dist/commands/game/build/download.js +6 -5
- package/dist/commands/game/build/list.js +11 -10
- package/dist/commands/game/create.js +5 -3
- package/dist/commands/game/details.js +15 -11
- package/dist/commands/game/export.js +4 -3
- package/dist/commands/game/ios/app/addTester.js +8 -7
- package/dist/commands/game/ios/app/create.js +7 -6
- package/dist/commands/game/ios/app/status.js +13 -12
- package/dist/commands/game/ios/app/sync.js +11 -10
- package/dist/commands/game/ios/profile/create.js +9 -8
- package/dist/commands/game/ios/profile/delete.js +9 -8
- package/dist/commands/game/ios/profile/export.js +12 -11
- package/dist/commands/game/ios/profile/import.js +12 -11
- package/dist/commands/game/ios/profile/status.js +13 -12
- package/dist/commands/game/ios/status.js +17 -16
- package/dist/commands/game/ios/wizard.js +13 -11
- package/dist/commands/game/job/list.js +6 -5
- package/dist/commands/game/job/status.js +11 -10
- package/dist/commands/game/list.js +6 -5
- package/dist/commands/game/ship.js +15 -9
- package/dist/commands/game/status.js +14 -13
- package/dist/commands/game/wizard.js +30 -28
- package/dist/commands/internal/fastlane.js +14 -13
- package/dist/commands/internal/readme.js +18 -17
- package/dist/commands/login.js +20 -19
- package/dist/commands/status.js +9 -8
- package/dist/commands/util/glass.js +119 -0
- package/dist/{export-BwwAjG_F.js → export-DtATljiz.js} +1 -1
- package/dist/{import-OgFrUsqw.js → import-Dk2ywOVU.js} +1 -1
- package/dist/{index-C2omlhEs.js → index-BW7z-5sB.js} +1 -1
- package/dist/{index-DVEYxVsH.js → index-CuyVBHWc.js} +4 -3
- package/dist/{index-C1XpCT_9.js → index-cRnjcGxV.js} +5 -4
- package/dist/{upload-5s3sy2jF.js → upload-CHaDSvvi.js} +1 -1
- package/dist/{useAppleApp-szQ_Kg5S.js → useAppleApp-CR847GWc.js} +1 -1
- package/dist/{useAppleBundleId-BarLcidd.js → useAppleBundleId-BnwPmVEu.js} +1 -1
- package/dist/{useAppleProfiles-C2U4NzC3.js → useAppleProfiles-DY-H0420.js} +1 -1
- package/dist/{useGoogleStatus-zfnjhtNB.js → useGoogleStatus-WqPgHteE.js} +2 -1
- package/dist/{useProjectCredentials-DbynNY96.js → useProjectCredentials-TvlolkId.js} +2 -1
- package/dist/{useWebSocket-h7smqhZQ.js → useWebSocket-MXDbQHcu.js} +1 -1
- package/docs/README.md +1 -0
- package/docs/game/ship.md +36 -13
- package/docs/util/glass.md +47 -0
- package/docs/util.md +11 -0
- package/package.json +3 -1
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
import fs__default, { promises } from 'node:fs';
|
|
2
|
-
import
|
|
2
|
+
import path__default from 'node:path';
|
|
3
3
|
import { Args, Flags } from '@oclif/core';
|
|
4
|
-
import { ac as BaseCommand } from '../../index-DHioYOIm.js';
|
|
5
4
|
import 'axios';
|
|
6
5
|
import 'crypto-js';
|
|
7
6
|
import 'uuid';
|
|
7
|
+
import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
|
|
8
8
|
import 'luxon';
|
|
9
|
-
import '
|
|
10
|
-
import '
|
|
9
|
+
import 'react/jsx-runtime';
|
|
10
|
+
import 'ink';
|
|
11
|
+
import 'ink-spinner';
|
|
11
12
|
import 'node:crypto';
|
|
12
13
|
import 'node:readline';
|
|
13
14
|
import 'node:url';
|
|
14
15
|
import 'readline-sync';
|
|
15
16
|
import 'isomorphic-git';
|
|
16
|
-
import 'deepmerge';
|
|
17
|
-
import 'ini';
|
|
18
17
|
import '@tanstack/react-query';
|
|
19
18
|
import 'react';
|
|
20
19
|
import 'fast-glob';
|
|
21
20
|
import 'yazl';
|
|
22
21
|
import 'socket.io-client';
|
|
23
22
|
import 'fullscreen-ink';
|
|
24
|
-
import 'ink';
|
|
25
|
-
import 'react/jsx-runtime';
|
|
26
|
-
import 'ink-spinner';
|
|
27
23
|
import 'string-length';
|
|
28
24
|
import 'strip-ansi';
|
|
29
25
|
import 'open';
|
|
30
26
|
import '@inkjs/ui';
|
|
31
|
-
import '
|
|
32
|
-
import 'path';
|
|
27
|
+
import '../../baseGameCommand-8VL7xe-O.js';
|
|
33
28
|
import 'marked';
|
|
34
29
|
import 'marked-terminal';
|
|
35
30
|
import 'qrcode';
|
|
31
|
+
import 'chalk';
|
|
32
|
+
import '@expo/apple-utils/build/index.js';
|
|
33
|
+
import 'deepmerge';
|
|
34
|
+
import 'ini';
|
|
35
|
+
import 'fs';
|
|
36
|
+
import 'path';
|
|
36
37
|
|
|
37
38
|
function generateFastlaneSession(cookieData) {
|
|
38
39
|
return cookieData.cookies.map((cookie) => `- !ruby/object:HTTP::Cookie
|
|
@@ -65,7 +66,7 @@ class AppleFastlane extends BaseCommand {
|
|
|
65
66
|
const { args } = this;
|
|
66
67
|
const { file, username } = args;
|
|
67
68
|
const homeDirectory = this.config.home;
|
|
68
|
-
const inputFilePath =
|
|
69
|
+
const inputFilePath = path__default.join(homeDirectory, ".app-store", "auth", username, "cookie");
|
|
69
70
|
if (!fs__default.existsSync(inputFilePath)) {
|
|
70
71
|
throw new Error(`No expo auth file found for ${username}`);
|
|
71
72
|
}
|
|
@@ -76,7 +77,7 @@ class AppleFastlane extends BaseCommand {
|
|
|
76
77
|
const fileContent = await promises.readFile(inputFilePath, "utf8");
|
|
77
78
|
const cookieData = JSON.parse(fileContent);
|
|
78
79
|
const yamlContent = generateFastlaneSession(cookieData);
|
|
79
|
-
await promises.mkdir(
|
|
80
|
+
await promises.mkdir(path__default.dirname(outputFilePath), { recursive: true });
|
|
80
81
|
await promises.writeFile(outputFilePath, yamlContent, "utf-8");
|
|
81
82
|
console.log(`FASTLANE_SESSION written to ${outputFilePath}`);
|
|
82
83
|
}
|
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
import fs__default from 'node:fs';
|
|
2
|
-
import
|
|
2
|
+
import path__default from 'node:path';
|
|
3
3
|
import { Args, Flags } from '@oclif/core';
|
|
4
|
-
import {
|
|
5
|
-
import CustomHelp from '../../utils/help.js';
|
|
4
|
+
import { q as ejs } from '../../baseGameCommand-8VL7xe-O.js';
|
|
6
5
|
import 'axios';
|
|
7
6
|
import 'crypto-js';
|
|
8
7
|
import 'uuid';
|
|
8
|
+
import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
|
|
9
9
|
import 'luxon';
|
|
10
|
-
import '
|
|
11
|
-
import '
|
|
10
|
+
import 'react/jsx-runtime';
|
|
11
|
+
import 'ink';
|
|
12
|
+
import 'ink-spinner';
|
|
12
13
|
import 'node:crypto';
|
|
13
14
|
import 'node:readline';
|
|
14
15
|
import 'node:url';
|
|
15
16
|
import 'readline-sync';
|
|
16
17
|
import 'isomorphic-git';
|
|
17
|
-
import '
|
|
18
|
-
import 'ini';
|
|
18
|
+
import CustomHelp from '../../utils/help.js';
|
|
19
19
|
import '@tanstack/react-query';
|
|
20
20
|
import 'react';
|
|
21
21
|
import 'fast-glob';
|
|
22
22
|
import 'yazl';
|
|
23
23
|
import 'socket.io-client';
|
|
24
24
|
import 'fullscreen-ink';
|
|
25
|
-
import 'ink';
|
|
26
|
-
import 'react/jsx-runtime';
|
|
27
|
-
import 'ink-spinner';
|
|
28
25
|
import 'string-length';
|
|
29
26
|
import 'strip-ansi';
|
|
30
27
|
import 'open';
|
|
31
28
|
import '@inkjs/ui';
|
|
32
|
-
import 'fs';
|
|
33
|
-
import 'path';
|
|
34
29
|
import 'marked';
|
|
35
30
|
import 'marked-terminal';
|
|
36
31
|
import 'qrcode';
|
|
32
|
+
import 'fs';
|
|
33
|
+
import 'path';
|
|
34
|
+
import 'chalk';
|
|
35
|
+
import '@expo/apple-utils/build/index.js';
|
|
36
|
+
import 'deepmerge';
|
|
37
|
+
import 'ini';
|
|
37
38
|
|
|
38
39
|
const ROOT_TOPIC_NAME = "shipthis";
|
|
39
40
|
const ROOT_TOPIC_DESCRIPTION = "Root topic";
|
|
@@ -133,7 +134,7 @@ function getTopicTree(topics, commands, separateFileDepth) {
|
|
|
133
134
|
const includeTopicsAndCommands = currentParent.includeTopicsAndCommands || currentDepth >= separateFileDepth;
|
|
134
135
|
const newSubTopic = {
|
|
135
136
|
commands: [],
|
|
136
|
-
filePath: `${
|
|
137
|
+
filePath: `${path__default.join(...name.split(":"))}.md`,
|
|
137
138
|
includeTopicsAndCommands,
|
|
138
139
|
subTopics: [],
|
|
139
140
|
topic: topicsByName[name]
|
|
@@ -153,7 +154,7 @@ function getTopicTree(topics, commands, separateFileDepth) {
|
|
|
153
154
|
if (!subTopic) throw new Error("Could not find topic for command: " + command.id);
|
|
154
155
|
currentParent = subTopic;
|
|
155
156
|
}
|
|
156
|
-
currentParent.commands.push({ command, filePath: `${
|
|
157
|
+
currentParent.commands.push({ command, filePath: `${path__default.join(...command.id.split(":"))}.md` });
|
|
157
158
|
}
|
|
158
159
|
return topicTree;
|
|
159
160
|
}
|
|
@@ -184,13 +185,13 @@ function writeTopic(topic, outputDir, dryRun, overWrite, only) {
|
|
|
184
185
|
outputList.push(filePath2);
|
|
185
186
|
const doWrite = !exists || overWrite;
|
|
186
187
|
if (!doWrite || dryRun) return;
|
|
187
|
-
const folder =
|
|
188
|
+
const folder = path__default.dirname(filePath2);
|
|
188
189
|
fs__default.mkdirSync(folder, { recursive: true });
|
|
189
190
|
fs__default.writeFileSync(filePath2, rendered);
|
|
190
191
|
};
|
|
191
192
|
const skipFile = (filePath2) => only && !filePath2.match(only);
|
|
192
193
|
const writeOutput = { created: [], overwritten: [] };
|
|
193
|
-
const filePath =
|
|
194
|
+
const filePath = path__default.join(outputDir, topic.filePath);
|
|
194
195
|
if (!skipFile(filePath)) makeFolderAndSave(filePath, topic.rendered);
|
|
195
196
|
for (const subTopic of topic.subTopics) {
|
|
196
197
|
const subWriteOutput = writeTopic(subTopic, outputDir, dryRun, overWrite, only);
|
|
@@ -199,7 +200,7 @@ function writeTopic(topic, outputDir, dryRun, overWrite, only) {
|
|
|
199
200
|
}
|
|
200
201
|
for (const command of topic.commands) {
|
|
201
202
|
if (!command.renderedForFile) throw new Error(`Command ${command.command.id} has not been rendered`);
|
|
202
|
-
const filePath2 =
|
|
203
|
+
const filePath2 = path__default.join(outputDir, command.filePath);
|
|
203
204
|
if (!skipFile(filePath2)) makeFolderAndSave(filePath2, command.renderedForFile);
|
|
204
205
|
}
|
|
205
206
|
return writeOutput;
|
package/dist/commands/login.js
CHANGED
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
import { Flags } from '@oclif/core';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import { W as WEB_URL,
|
|
3
|
+
import { W as WEB_URL, B as BaseCommand, Z as acceptTerms, o as API_URL, _ as setAuthToken } from '../baseCommand-CTn3KGH3.js';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import 'ink';
|
|
6
|
+
import 'ink-spinner';
|
|
7
|
+
import { b as getInput } from '../baseGameCommand-8VL7xe-O.js';
|
|
8
|
+
import 'react';
|
|
9
|
+
import '@tanstack/react-query';
|
|
10
|
+
import 'luxon';
|
|
4
11
|
import 'node:fs';
|
|
5
|
-
import '
|
|
12
|
+
import 'fast-glob';
|
|
6
13
|
import 'uuid';
|
|
7
|
-
import '
|
|
14
|
+
import 'yazl';
|
|
15
|
+
import 'socket.io-client';
|
|
16
|
+
import 'fullscreen-ink';
|
|
17
|
+
import 'string-length';
|
|
18
|
+
import 'strip-ansi';
|
|
19
|
+
import 'open';
|
|
20
|
+
import '@inkjs/ui';
|
|
8
21
|
import 'node:path';
|
|
22
|
+
import 'marked';
|
|
23
|
+
import 'marked-terminal';
|
|
24
|
+
import 'qrcode';
|
|
9
25
|
import 'chalk';
|
|
26
|
+
import 'crypto-js';
|
|
10
27
|
import '@expo/apple-utils/build/index.js';
|
|
11
28
|
import 'node:crypto';
|
|
12
29
|
import 'node:readline';
|
|
@@ -15,24 +32,8 @@ import 'readline-sync';
|
|
|
15
32
|
import 'isomorphic-git';
|
|
16
33
|
import 'deepmerge';
|
|
17
34
|
import 'ini';
|
|
18
|
-
import '@tanstack/react-query';
|
|
19
|
-
import 'react';
|
|
20
|
-
import 'fast-glob';
|
|
21
|
-
import 'yazl';
|
|
22
|
-
import 'socket.io-client';
|
|
23
|
-
import 'fullscreen-ink';
|
|
24
|
-
import 'ink';
|
|
25
|
-
import 'react/jsx-runtime';
|
|
26
|
-
import 'ink-spinner';
|
|
27
|
-
import 'string-length';
|
|
28
|
-
import 'strip-ansi';
|
|
29
|
-
import 'open';
|
|
30
|
-
import '@inkjs/ui';
|
|
31
35
|
import 'fs';
|
|
32
36
|
import 'path';
|
|
33
|
-
import 'marked';
|
|
34
|
-
import 'marked-terminal';
|
|
35
|
-
import 'qrcode';
|
|
36
37
|
|
|
37
38
|
const TERMS_URL = new URL("/terms", WEB_URL).href;
|
|
38
39
|
const PRIVACY_URL = new URL("/privacy", WEB_URL).href;
|
package/dist/commands/status.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { render } from 'ink';
|
|
3
|
-
import
|
|
3
|
+
import 'node:fs';
|
|
4
|
+
import 'axios';
|
|
5
|
+
import 'crypto-js';
|
|
6
|
+
import 'uuid';
|
|
7
|
+
import { B as BaseCommand, j as isCWDGodotGame } from '../baseCommand-CTn3KGH3.js';
|
|
8
|
+
import 'luxon';
|
|
4
9
|
import 'ink-spinner';
|
|
5
10
|
import 'node:crypto';
|
|
6
|
-
import 'node:fs';
|
|
7
11
|
import 'node:path';
|
|
8
12
|
import 'node:readline';
|
|
9
13
|
import 'node:url';
|
|
10
14
|
import 'readline-sync';
|
|
11
|
-
import 'luxon';
|
|
12
|
-
import 'axios';
|
|
13
15
|
import { i as isCWDGitRepo } from '../git-BpsfNFZ_.js';
|
|
14
16
|
import '@oclif/core';
|
|
15
17
|
import '@tanstack/react-query';
|
|
16
18
|
import 'react';
|
|
17
|
-
import 'crypto-js';
|
|
18
|
-
import 'uuid';
|
|
19
19
|
import 'fast-glob';
|
|
20
20
|
import 'yazl';
|
|
21
21
|
import 'socket.io-client';
|
|
@@ -25,19 +25,20 @@ import 'strip-ansi';
|
|
|
25
25
|
import { S as StatusTable } from '../StatusTable-DzRWcMr4.js';
|
|
26
26
|
import 'open';
|
|
27
27
|
import '@inkjs/ui';
|
|
28
|
+
import '../baseGameCommand-8VL7xe-O.js';
|
|
28
29
|
import 'marked';
|
|
29
30
|
import 'marked-terminal';
|
|
30
31
|
import { N as NextSteps } from '../NextSteps-DbJHmscQ.js';
|
|
31
32
|
import 'qrcode';
|
|
32
|
-
import { C as Command } from '../Command-
|
|
33
|
+
import { C as Command } from '../Command-Cj6F5B5a.js';
|
|
33
34
|
import chalk from 'chalk';
|
|
34
35
|
import '@expo/apple-utils/build/index.js';
|
|
35
36
|
import 'isomorphic-git';
|
|
36
37
|
import 'deepmerge';
|
|
37
38
|
import 'ini';
|
|
39
|
+
import '../Title-BCQtayg6.js';
|
|
38
40
|
import 'fs';
|
|
39
41
|
import 'path';
|
|
40
|
-
import '../Title-BCQtayg6.js';
|
|
41
42
|
|
|
42
43
|
class Status extends BaseCommand {
|
|
43
44
|
static args = {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { B as BaseCommand } from '../../baseCommand-CTn3KGH3.js';
|
|
2
|
+
import { Flags, Args } from '@oclif/core';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import xcode from 'xcode';
|
|
6
|
+
import 'chalk';
|
|
7
|
+
import 'axios';
|
|
8
|
+
import 'crypto-js';
|
|
9
|
+
import 'uuid';
|
|
10
|
+
import 'luxon';
|
|
11
|
+
import '@expo/apple-utils/build/index.js';
|
|
12
|
+
import 'node:crypto';
|
|
13
|
+
import 'node:readline';
|
|
14
|
+
import 'node:url';
|
|
15
|
+
import 'readline-sync';
|
|
16
|
+
import 'isomorphic-git';
|
|
17
|
+
import 'deepmerge';
|
|
18
|
+
import 'ini';
|
|
19
|
+
import '@tanstack/react-query';
|
|
20
|
+
import 'react';
|
|
21
|
+
import 'fast-glob';
|
|
22
|
+
import 'yazl';
|
|
23
|
+
import 'socket.io-client';
|
|
24
|
+
import 'fullscreen-ink';
|
|
25
|
+
import 'ink';
|
|
26
|
+
|
|
27
|
+
async function applyLiquidGlassIcon(opts) {
|
|
28
|
+
const { projectDir, iconDir, verbose } = opts;
|
|
29
|
+
const info = (msg) => {
|
|
30
|
+
if (!verbose) return;
|
|
31
|
+
console.log(msg);
|
|
32
|
+
};
|
|
33
|
+
const warn = (msg) => console.warn(`Warning: ${msg}`);
|
|
34
|
+
info(`Applying Liquid Glass icon from: ${iconDir}`);
|
|
35
|
+
if (!fs.existsSync(projectDir)) {
|
|
36
|
+
throw new Error(`projectDir not found: ${projectDir}`);
|
|
37
|
+
}
|
|
38
|
+
const pbxprojPath = path.join(projectDir, "project.pbxproj");
|
|
39
|
+
if (!fs.existsSync(pbxprojPath)) {
|
|
40
|
+
throw new Error(`project.pbxproj not found at: ${pbxprojPath}`);
|
|
41
|
+
}
|
|
42
|
+
if (!fs.existsSync(iconDir)) {
|
|
43
|
+
throw new Error(`Icon directory not found: ${iconDir}`);
|
|
44
|
+
}
|
|
45
|
+
const iconFolderName = path.basename(iconDir);
|
|
46
|
+
const appIconName = iconFolderName.replace(/\.icon$/i, "");
|
|
47
|
+
info(`Detected .icon folder: ${iconFolderName}`);
|
|
48
|
+
info(`Derived app icon name: ${appIconName}`);
|
|
49
|
+
const projectRoot = path.dirname(projectDir);
|
|
50
|
+
const destIconDir = path.join(projectRoot, iconFolderName);
|
|
51
|
+
if (!fs.existsSync(destIconDir)) {
|
|
52
|
+
info(`Copying .icon folder into project root: ${destIconDir}`);
|
|
53
|
+
await fs.promises.cp(iconDir, destIconDir, {
|
|
54
|
+
recursive: true
|
|
55
|
+
});
|
|
56
|
+
} else {
|
|
57
|
+
info(`Icon folder already exists in project root, skipping copy.`);
|
|
58
|
+
}
|
|
59
|
+
const project = xcode.project(pbxprojPath);
|
|
60
|
+
project.parseSync();
|
|
61
|
+
info(`Adding folder reference to Copy Bundle Resources: ${iconFolderName}`);
|
|
62
|
+
const firstProject = project.getFirstProject();
|
|
63
|
+
const mainGroupId = firstProject.firstProject.mainGroup;
|
|
64
|
+
const mainGroup = project.getPBXGroupByKey(mainGroupId);
|
|
65
|
+
const fileRef = project.addResourceFile(
|
|
66
|
+
iconFolderName,
|
|
67
|
+
{ lastKnownFileType: "folder.iconcomposer.icon" },
|
|
68
|
+
mainGroup.name
|
|
69
|
+
);
|
|
70
|
+
if (fileRef) {
|
|
71
|
+
project.addToPbxResourcesBuildPhase(fileRef);
|
|
72
|
+
} else {
|
|
73
|
+
warn(`Folder reference may already exist in project: ${iconFolderName}`);
|
|
74
|
+
}
|
|
75
|
+
const configs = project.pbxXCBuildConfigurationSection();
|
|
76
|
+
let modified = 0;
|
|
77
|
+
info(`Updating build settings for app icon: ${appIconName}`);
|
|
78
|
+
for (const key in configs) {
|
|
79
|
+
const cfg = configs[key];
|
|
80
|
+
if (!cfg || typeof cfg !== "object" || !cfg.buildSettings) continue;
|
|
81
|
+
cfg.buildSettings["ASSETCATALOG_COMPILER_APPICON_NAME"] = appIconName;
|
|
82
|
+
cfg.buildSettings["ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS"] = "YES";
|
|
83
|
+
modified++;
|
|
84
|
+
}
|
|
85
|
+
info(`Modified ${modified} build configurations`);
|
|
86
|
+
info(`Writing updated project to ${pbxprojPath}`);
|
|
87
|
+
fs.writeFileSync(pbxprojPath, project.writeSync());
|
|
88
|
+
info(`Liquid Glass icon successfully applied.`);
|
|
89
|
+
}
|
|
90
|
+
class InternalGlass extends BaseCommand {
|
|
91
|
+
static description = "Apply a Liquid Glass .icon folder to a local Xcode project";
|
|
92
|
+
static flags = {
|
|
93
|
+
verbose: Flags.boolean({
|
|
94
|
+
default: false,
|
|
95
|
+
description: "Enable verbose logging"
|
|
96
|
+
})
|
|
97
|
+
};
|
|
98
|
+
static args = {
|
|
99
|
+
project: Args.string({
|
|
100
|
+
description: "Path to the .xcodeproj directory",
|
|
101
|
+
required: true
|
|
102
|
+
}),
|
|
103
|
+
icon: Args.string({
|
|
104
|
+
description: "Path to the .icon folder",
|
|
105
|
+
required: true
|
|
106
|
+
})
|
|
107
|
+
};
|
|
108
|
+
async run() {
|
|
109
|
+
const { args, flags } = await this.parse(InternalGlass);
|
|
110
|
+
await applyLiquidGlassIcon({
|
|
111
|
+
projectDir: args.project,
|
|
112
|
+
iconDir: args.icon,
|
|
113
|
+
verbose: flags.verbose
|
|
114
|
+
});
|
|
115
|
+
this.log("Liquid Glass icon applied.");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { applyLiquidGlassIcon, InternalGlass as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import {
|
|
3
|
+
import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.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 {
|
|
3
|
+
import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.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`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
import {
|
|
2
|
+
import { o as API_URL, p as getAuthedHeaders, F as castArrayObjectDates } from './baseCommand-CTn3KGH3.js';
|
|
3
3
|
import 'node:fs';
|
|
4
4
|
|
|
5
5
|
async function getUserCredentials(pageSize = 100) {
|
|
@@ -12,7 +12,7 @@ import 'readline-sync';
|
|
|
12
12
|
import 'luxon';
|
|
13
13
|
import 'axios';
|
|
14
14
|
import 'isomorphic-git';
|
|
15
|
-
import {
|
|
15
|
+
import { a3 as getShortAuthRequiredUrl, a5 as getGoogleAuthUrl, W as WEB_URL } from './baseCommand-CTn3KGH3.js';
|
|
16
16
|
import '@oclif/core';
|
|
17
17
|
import '@tanstack/react-query';
|
|
18
18
|
import 'crypto-js';
|
|
@@ -20,9 +20,10 @@ import 'uuid';
|
|
|
20
20
|
import 'fast-glob';
|
|
21
21
|
import 'yazl';
|
|
22
22
|
import 'socket.io-client';
|
|
23
|
-
import { u as useGoogleStatus } from './useGoogleStatus-
|
|
24
|
-
import { u as useWebSocket } from './useWebSocket-
|
|
23
|
+
import { u as useGoogleStatus } from './useGoogleStatus-WqPgHteE.js';
|
|
24
|
+
import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
|
|
25
25
|
import 'fullscreen-ink';
|
|
26
|
+
import { G as GameContext, w as useSafeInput, M as Markdown } from './baseGameCommand-8VL7xe-O.js';
|
|
26
27
|
import 'string-length';
|
|
27
28
|
import 'strip-ansi';
|
|
28
29
|
import '@inkjs/ui';
|
|
@@ -8,20 +8,21 @@ import 'node:path';
|
|
|
8
8
|
import 'node:readline';
|
|
9
9
|
import 'node:url';
|
|
10
10
|
import 'readline-sync';
|
|
11
|
-
import {
|
|
11
|
+
import { p as getAuthedHeaders, o as API_URL, a4 as castObjectDates, H as queryClient, Q as revokePolicy, O as enforcePolicy, P as Platform, C as CredentialsType, M as getGoogleStatus, c as getShortDate } from './baseCommand-CTn3KGH3.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 { k as cacheKeys, G as GameContext, w as useSafeInput, M as Markdown } from './baseGameCommand-8VL7xe-O.js';
|
|
17
18
|
import 'fast-glob';
|
|
18
19
|
import 'uuid';
|
|
19
20
|
import 'yazl';
|
|
20
21
|
import 'socket.io-client';
|
|
21
22
|
import 'fullscreen-ink';
|
|
22
|
-
import { u as useWebSocket } from './useWebSocket-
|
|
23
|
-
import { u as useProjectCredentials } from './useProjectCredentials-
|
|
24
|
-
import { u as useGoogleStatus } from './useGoogleStatus-
|
|
23
|
+
import { u as useWebSocket } from './useWebSocket-MXDbQHcu.js';
|
|
24
|
+
import { u as useProjectCredentials } from './useProjectCredentials-TvlolkId.js';
|
|
25
|
+
import { u as useGoogleStatus } from './useGoogleStatus-WqPgHteE.js';
|
|
25
26
|
import 'crypto-js';
|
|
26
27
|
import 'string-length';
|
|
27
28
|
import 'strip-ansi';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
import {
|
|
2
|
+
import { o as API_URL, p as getAuthedHeaders } from './baseCommand-CTn3KGH3.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 {
|
|
2
|
+
import { e as BundleId, q as getGodotProjectCapabilities, P as Platform, G as GODOT_CAPABILITIES, r as CapabilityType } from './baseCommand-CTn3KGH3.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 {
|
|
3
|
+
import { c as getShortDate, m as Profile, n as ProfileType } from './baseCommand-CTn3KGH3.js';
|
|
4
4
|
import 'node:crypto';
|
|
5
5
|
import 'node:fs';
|
|
6
6
|
import 'node:path';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useQuery } from '@tanstack/react-query';
|
|
2
|
-
import {
|
|
2
|
+
import { M as getGoogleStatus } from './baseCommand-CTn3KGH3.js';
|
|
3
|
+
import { k as cacheKeys } from './baseGameCommand-8VL7xe-O.js';
|
|
3
4
|
|
|
4
5
|
const useGoogleStatus = () => useQuery({
|
|
5
6
|
queryFn: getGoogleStatus,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useQuery } from '@tanstack/react-query';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import {
|
|
3
|
+
import { c as getShortDate, p as getAuthedHeaders, o as API_URL, F as castArrayObjectDates } from './baseCommand-CTn3KGH3.js';
|
|
4
|
+
import { k as cacheKeys, g as getShortUUID } from './baseGameCommand-8VL7xe-O.js';
|
|
4
5
|
|
|
5
6
|
async function queryProjectCredentials({
|
|
6
7
|
projectId,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
2
|
import { io } from 'socket.io-client';
|
|
3
|
-
import {
|
|
3
|
+
import { I as WS_URL, K as getAuthToken } from './baseCommand-CTn3KGH3.js';
|
|
4
4
|
|
|
5
5
|
function useWebSocket(listeners = []) {
|
|
6
6
|
const log = () => {
|
package/docs/README.md
CHANGED
|
@@ -11,6 +11,7 @@ Begin with our [Quickstart Guide](https://shipth.is/docs/guides/quick-start).
|
|
|
11
11
|
- [apiKey](https://shipth.is/docs/reference/apiKey) - Commands that relate to ShipThis API keys
|
|
12
12
|
- [apple](https://shipth.is/docs/reference/apple) - Commands that relate to linking your ShipThis account with your Apple Developer Account
|
|
13
13
|
- [game](https://shipth.is/docs/reference/game) - Commands that relate to configuring the specific game in the current working directory
|
|
14
|
+
- [util](https://shipth.is/docs/reference/util) - Utility commands that do not require login
|
|
14
15
|
|
|
15
16
|
## Commands
|
|
16
17
|
|
package/docs/game/ship.md
CHANGED
|
@@ -27,30 +27,51 @@ When using ShipThis in a CI environment, it is most useful to use the `--follow`
|
|
|
27
27
|
|
|
28
28
|
[](https://asciinema.org/a/gKmZ0E1rJ4oiT9SyuSivXBZfY#shipthis-col80row24)
|
|
29
29
|
|
|
30
|
-
###
|
|
30
|
+
### Follow, do not publish, and then download APK
|
|
31
31
|
|
|
32
32
|
[](https://asciinema.org/a/GNf0t8niOlrMDsgPKqmBcuqQh#shipthis-col80row24)
|
|
33
33
|
|
|
34
|
+
### Building with demo credentials
|
|
35
|
+
|
|
36
|
+
Adding the `--useDemoCredentials` flag executes the build for the specified platform but applies ShipThis certificates, keystores or provisioning profiles. This can be useful to generate an asset which can be side-loaded onto your own device.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# To build for iOS with demo credentials
|
|
40
|
+
shipthis game ship --platform ios --follow --useDemoCredentials --download game.ipa
|
|
41
|
+
|
|
42
|
+
# To build for Android with demo credentials
|
|
43
|
+
shipthis game ship --platform android --follow --useDemoCredentials --downloadAPK game.apk
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Overriding the Godot version
|
|
47
|
+
|
|
48
|
+
You can specify a different Godot version to use only for the current job. This can be helpful if you are upgrading your game to use a newer version of Godot.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
shipthis game ship --platform android --follow --gameEngineVersion 4.5.1 --download game-4.5.1.aab
|
|
52
|
+
```
|
|
53
|
+
|
|
34
54
|
## Help Output
|
|
35
55
|
|
|
36
56
|
```help
|
|
37
57
|
USAGE
|
|
38
|
-
$ shipthis game ship [-g <value>] [--download <value> --platform android|ios] [--downloadAPK <value> ] [--follow ]
|
|
39
|
-
[--
|
|
58
|
+
$ shipthis game ship [-g <value>] [--download <value> --platform android|ios] [--downloadAPK <value> ] [--follow ] [--skipPublish] [--verbose] [--useDemoCredentials ]
|
|
59
|
+
[--gameEngineVersion <value>]
|
|
40
60
|
|
|
41
61
|
FLAGS
|
|
42
|
-
-g, --gameId=<value>
|
|
43
|
-
--download=<value>
|
|
44
|
-
--downloadAPK=<value>
|
|
45
|
-
--follow
|
|
46
|
-
--
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
--
|
|
50
|
-
--
|
|
62
|
+
-g, --gameId=<value> The ID of the game
|
|
63
|
+
--download=<value> Download the build artifact to the specified file
|
|
64
|
+
--downloadAPK=<value> Download the APK artifact (if available) to the specified file
|
|
65
|
+
--follow Follow the job logs in real-time (requires --platform)
|
|
66
|
+
--gameEngineVersion=<value> Override the specified game engine version for this build
|
|
67
|
+
--platform=<option> The platform to ship the game to. This can be "android" or "ios"
|
|
68
|
+
<options: android|ios>
|
|
69
|
+
--skipPublish Skip the publish step
|
|
70
|
+
--useDemoCredentials Use demo credentials for this build (requires --platform, implies --skipPublish)
|
|
71
|
+
--verbose Enable verbose logging
|
|
51
72
|
|
|
52
73
|
DESCRIPTION
|
|
53
|
-
Builds
|
|
74
|
+
Builds and publishes your ShipThis game.
|
|
54
75
|
|
|
55
76
|
EXAMPLES
|
|
56
77
|
$ shipthis game ship
|
|
@@ -66,4 +87,6 @@ EXAMPLES
|
|
|
66
87
|
$ shipthis game ship --platform ios --follow --verbose
|
|
67
88
|
|
|
68
89
|
$ shipthis game ship --platform ios --useDemoCredentials --download game.ipa
|
|
90
|
+
|
|
91
|
+
$ shipthis game ship --platform android --gameEngineVersion 4.5.1 --skipPublish
|
|
69
92
|
```
|