@capgo/cli 7.18.15 → 7.18.17
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 +1 -0
- package/dist/index.js +244 -245
- package/dist/package.json +3 -3
- package/dist/src/sdk.js +227 -228
- package/package.json +3 -3
- package/dist/src/build/request.d.ts +0 -48
- package/dist/src/build/request.d.ts.map +0 -1
- package/dist/src/build/request.js +0 -158
- package/dist/src/build/request.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capgo/cli",
|
|
3
|
-
"version": "7.18.
|
|
3
|
+
"version": "7.18.17",
|
|
4
4
|
"description": "A CLI to upload to capgo servers",
|
|
5
5
|
"author": "Martin martin@capgo.app",
|
|
6
6
|
"license": "Apache 2.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"generate-docs": "node dist/index.js generate-docs README.md"
|
|
57
57
|
},
|
|
58
58
|
"//dependencies": {
|
|
59
|
-
"ky": "We temporarily fixed ky version until this issue is resolved: https://github.com/sindresorhus/ky/issues/689 otherwise nodejs upload fails on node 18/20"
|
|
59
|
+
"ky": "We temporarily fixed ky 1.7.5 version until this issue is resolved: https://github.com/sindresorhus/ky/issues/689 otherwise nodejs upload fails on node 18/20"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@antfu/eslint-config": "^6.1.0",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"git-format-staged": "3.1.1",
|
|
85
85
|
"husky": "^9.1.7",
|
|
86
86
|
"is-wsl": "^3.1.0",
|
|
87
|
-
"ky": "1.
|
|
87
|
+
"ky": "1.7.5",
|
|
88
88
|
"latest-version": "^9.0.0",
|
|
89
89
|
"open": "^10.1.2",
|
|
90
90
|
"pkg": "5.8.1",
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { OptionsBase } from '../utils';
|
|
2
|
-
export interface BuildCredentials {
|
|
3
|
-
BUILD_CERTIFICATE_BASE64?: string;
|
|
4
|
-
BUILD_PROVISION_PROFILE_BASE64?: string;
|
|
5
|
-
BUILD_PROVISION_PROFILE_BASE64_PROD?: string;
|
|
6
|
-
P12_PASSWORD?: string;
|
|
7
|
-
APPLE_ID?: string;
|
|
8
|
-
APPLE_APP_SPECIFIC_PASSWORD?: string;
|
|
9
|
-
APPLE_KEY_ID?: string;
|
|
10
|
-
APPLE_ISSUER_ID?: string;
|
|
11
|
-
APPLE_KEY_CONTENT?: string;
|
|
12
|
-
APP_STORE_CONNECT_TEAM_ID?: string;
|
|
13
|
-
ANDROID_KEYSTORE_FILE?: string;
|
|
14
|
-
KEYSTORE_KEY_ALIAS?: string;
|
|
15
|
-
KEYSTORE_KEY_PASSWORD?: string;
|
|
16
|
-
KEYSTORE_STORE_PASSWORD?: string;
|
|
17
|
-
PLAY_CONFIG_JSON?: string;
|
|
18
|
-
[key: string]: string | undefined;
|
|
19
|
-
}
|
|
20
|
-
export interface BuildRequestOptions extends OptionsBase {
|
|
21
|
-
path?: string;
|
|
22
|
-
lane: 'ios' | 'android';
|
|
23
|
-
buildMode?: 'debug' | 'release';
|
|
24
|
-
credentials?: BuildCredentials;
|
|
25
|
-
userId?: string;
|
|
26
|
-
}
|
|
27
|
-
export interface BuildRequestResponse {
|
|
28
|
-
jobId: string;
|
|
29
|
-
folder: string;
|
|
30
|
-
status: 'queued' | 'reserved';
|
|
31
|
-
artifactKey: string;
|
|
32
|
-
uploadUrl: string;
|
|
33
|
-
machine?: {
|
|
34
|
-
id: string;
|
|
35
|
-
ip: string;
|
|
36
|
-
[key: string]: unknown;
|
|
37
|
-
} | null;
|
|
38
|
-
}
|
|
39
|
-
export interface BuildRequestResult {
|
|
40
|
-
success: boolean;
|
|
41
|
-
jobId?: string;
|
|
42
|
-
uploadUrl?: string;
|
|
43
|
-
status?: string;
|
|
44
|
-
error?: string;
|
|
45
|
-
}
|
|
46
|
-
export declare function requestBuildInternal(appId: string, options: BuildRequestOptions, silent?: boolean): Promise<BuildRequestResult>;
|
|
47
|
-
export declare function requestBuildCommand(appId: string, options: BuildRequestOptions): Promise<void>;
|
|
48
|
-
//# sourceMappingURL=request.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/build/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAS3C,MAAM,WAAW,gBAAgB;IAE/B,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,mCAAmC,CAAC,EAAE,MAAM,CAAA;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAGlC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAGzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAClC;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/B,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE;QACR,EAAE,EAAE,MAAM,CAAA;QACV,EAAE,EAAE,MAAM,CAAA;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,GAAG,IAAI,CAAA;CACT;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA2BD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA+JnI;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpG"}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { mkdir, readFile, rm, stat } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { basename, join, resolve } from 'node:path';
|
|
5
|
-
import process from 'node:process';
|
|
6
|
-
import { log } from '@clack/prompts';
|
|
7
|
-
import { createSupabaseClient, findSavedKey, getConfig, verifyUser } from '../utils';
|
|
8
|
-
async function zipDirectory(projectDir, outputPath) {
|
|
9
|
-
return new Promise((resolvePromise, reject) => {
|
|
10
|
-
const args = ['-rq', outputPath, '.'];
|
|
11
|
-
const child = spawn('zip', args, { cwd: projectDir, stdio: 'inherit' });
|
|
12
|
-
child.on('error', (error) => {
|
|
13
|
-
if (error.code === 'ENOENT') {
|
|
14
|
-
reject(new Error('zip command not found. Please install zip utility.'));
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
reject(error);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
child.on('close', (code) => {
|
|
21
|
-
if (code === 0) {
|
|
22
|
-
resolvePromise();
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
reject(new Error(`zip process exited with code ${code}`));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
export async function requestBuildInternal(appId, options, silent = false) {
|
|
31
|
-
try {
|
|
32
|
-
options.apikey = options.apikey || findSavedKey(silent);
|
|
33
|
-
const config = await getConfig();
|
|
34
|
-
appId = appId || config?.config.appId;
|
|
35
|
-
if (!appId) {
|
|
36
|
-
throw new Error('Missing argument, you need to provide a appId, or be in a capacitor project');
|
|
37
|
-
}
|
|
38
|
-
const projectDir = resolve(options.path || process.cwd());
|
|
39
|
-
const supabase = await createSupabaseClient(options.apikey, options.supaHost, options.supaAnon);
|
|
40
|
-
await verifyUser(supabase, options.apikey, ['write', 'all']);
|
|
41
|
-
if (!silent) {
|
|
42
|
-
log.info(`Requesting native build for ${appId}`);
|
|
43
|
-
log.info(`Platform: ${options.lane}`);
|
|
44
|
-
log.info(`Project: ${projectDir}`);
|
|
45
|
-
}
|
|
46
|
-
// Prepare request payload for Capgo backend
|
|
47
|
-
const requestPayload = {
|
|
48
|
-
app_id: appId,
|
|
49
|
-
platform: options.lane,
|
|
50
|
-
};
|
|
51
|
-
// Add build mode if specified
|
|
52
|
-
if (options.buildMode) {
|
|
53
|
-
requestPayload.build_mode = options.buildMode;
|
|
54
|
-
}
|
|
55
|
-
// Add credentials if provided
|
|
56
|
-
if (options.credentials) {
|
|
57
|
-
requestPayload.credentials = options.credentials;
|
|
58
|
-
}
|
|
59
|
-
// Request build from Capgo backend (POST /build/request)
|
|
60
|
-
if (!silent)
|
|
61
|
-
log.info('Requesting build from Capgo...');
|
|
62
|
-
const host = options.supaHost || 'https://api.capgo.app';
|
|
63
|
-
const response = await fetch(`${host}/build/request`, {
|
|
64
|
-
method: 'POST',
|
|
65
|
-
headers: {
|
|
66
|
-
'Content-Type': 'application/json',
|
|
67
|
-
'authorization': options.apikey,
|
|
68
|
-
},
|
|
69
|
-
body: JSON.stringify(requestPayload),
|
|
70
|
-
});
|
|
71
|
-
if (!response.ok) {
|
|
72
|
-
const errorText = await response.text();
|
|
73
|
-
throw new Error(`Failed to request build: ${response.status} - ${errorText}`);
|
|
74
|
-
}
|
|
75
|
-
const buildRequest = await response.json();
|
|
76
|
-
if (!silent) {
|
|
77
|
-
log.success(`Build job created: ${buildRequest.job_id}`);
|
|
78
|
-
log.info(`Status: ${buildRequest.status}`);
|
|
79
|
-
}
|
|
80
|
-
// Create temporary directory for zip
|
|
81
|
-
const tempDir = join(tmpdir(), `capgo-build-${Date.now()}`);
|
|
82
|
-
await mkdir(tempDir, { recursive: true });
|
|
83
|
-
const zipPath = join(tempDir, `${basename(projectDir)}.zip`);
|
|
84
|
-
try {
|
|
85
|
-
// Zip the project directory
|
|
86
|
-
if (!silent)
|
|
87
|
-
log.info(`Zipping project from ${projectDir}...`);
|
|
88
|
-
await zipDirectory(projectDir, zipPath);
|
|
89
|
-
const zipStats = await stat(zipPath);
|
|
90
|
-
const sizeMB = (zipStats.size / 1024 / 1024).toFixed(2);
|
|
91
|
-
if (!silent)
|
|
92
|
-
log.success(`Created zip: ${zipPath} (${sizeMB} MB)`);
|
|
93
|
-
// Upload to presigned R2 URL
|
|
94
|
-
if (!silent)
|
|
95
|
-
log.info('Uploading to builder...');
|
|
96
|
-
const fileBuffer = await readFile(zipPath);
|
|
97
|
-
const uploadResponse = await fetch(buildRequest.upload_url, {
|
|
98
|
-
method: 'PUT',
|
|
99
|
-
headers: {
|
|
100
|
-
'Content-Type': 'application/zip',
|
|
101
|
-
'Content-Length': String(zipStats.size),
|
|
102
|
-
},
|
|
103
|
-
body: fileBuffer,
|
|
104
|
-
});
|
|
105
|
-
if (!uploadResponse.ok) {
|
|
106
|
-
const errorText = await uploadResponse.text();
|
|
107
|
-
throw new Error(`Upload failed: ${uploadResponse.status} - ${errorText}`);
|
|
108
|
-
}
|
|
109
|
-
if (!silent)
|
|
110
|
-
log.success('Upload complete!');
|
|
111
|
-
// Start the build job via Capgo backend
|
|
112
|
-
if (!silent)
|
|
113
|
-
log.info('Starting build job...');
|
|
114
|
-
const startResponse = await fetch(`${host}/build/start/${buildRequest.build_request_id}`, {
|
|
115
|
-
method: 'POST',
|
|
116
|
-
headers: {
|
|
117
|
-
'authorization': options.apikey,
|
|
118
|
-
},
|
|
119
|
-
});
|
|
120
|
-
if (!startResponse.ok) {
|
|
121
|
-
const errorText = await startResponse.text();
|
|
122
|
-
throw new Error(`Failed to start build: ${startResponse.status} - ${errorText}`);
|
|
123
|
-
}
|
|
124
|
-
const startResult = await startResponse.json();
|
|
125
|
-
if (!silent) {
|
|
126
|
-
log.success('Build started successfully!');
|
|
127
|
-
log.info(`Job ID: ${buildRequest.job_id}`);
|
|
128
|
-
log.info('You can monitor the build in the Capgo dashboard.');
|
|
129
|
-
}
|
|
130
|
-
return {
|
|
131
|
-
success: true,
|
|
132
|
-
jobId: buildRequest.job_id,
|
|
133
|
-
uploadUrl: buildRequest.upload_url,
|
|
134
|
-
status: startResult.status || buildRequest.status,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
finally {
|
|
138
|
-
// Clean up temp directory
|
|
139
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
144
|
-
if (!silent)
|
|
145
|
-
log.error(errorMessage);
|
|
146
|
-
return {
|
|
147
|
-
success: false,
|
|
148
|
-
error: errorMessage,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
export async function requestBuildCommand(appId, options) {
|
|
153
|
-
const result = await requestBuildInternal(appId, options, false);
|
|
154
|
-
if (!result.success) {
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
//# sourceMappingURL=request.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/build/request.ts"],"names":[],"mappings":"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"}
|