eas-cli 16.15.0 → 16.17.0
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 +221 -84
- package/build/commandUtils/workflow/fetchLogs.d.ts +2 -0
- package/build/commandUtils/workflow/fetchLogs.js +16 -0
- package/build/commandUtils/workflow/stateMachine.d.ts +44 -0
- package/build/commandUtils/workflow/stateMachine.js +212 -0
- package/build/commandUtils/workflow/types.d.ts +39 -0
- package/build/commandUtils/workflow/types.js +13 -0
- package/build/commandUtils/workflow/utils.d.ts +12 -0
- package/build/commandUtils/workflow/utils.js +116 -0
- package/build/commands/deploy/alias/delete.d.ts +21 -0
- package/build/commands/deploy/alias/delete.js +98 -0
- package/build/commands/deploy/alias/index.d.ts +21 -0
- package/build/commands/deploy/{alias.js → alias/index.js} +8 -8
- package/build/commands/deploy/{alias.d.ts → delete.d.ts} +4 -4
- package/build/commands/deploy/delete.js +84 -0
- package/build/commands/workflow/cancel.js +3 -6
- package/build/commands/workflow/logs.d.ts +18 -0
- package/build/commands/workflow/logs.js +94 -0
- package/build/commands/workflow/run.d.ts +105 -0
- package/build/commands/workflow/run.js +280 -0
- package/build/commands/workflow/runs.js +4 -3
- package/build/commands/workflow/view.d.ts +17 -0
- package/build/commands/workflow/view.js +95 -0
- package/build/credentials/ios/IosCredentialsProvider.js +1 -1
- package/build/credentials/ios/appstore/bundleIdCapabilities.d.ts +4 -17
- package/build/credentials/ios/appstore/bundleIdCapabilities.js +45 -625
- package/build/credentials/ios/appstore/capabilityIdentifiers.js +33 -34
- package/build/credentials/ios/appstore/capabilityList.d.ts +33 -0
- package/build/credentials/ios/appstore/capabilityList.js +646 -0
- package/build/graphql/generated.d.ts +308 -19
- package/build/graphql/queries/WorkflowJobQuery.d.ts +7 -0
- package/build/graphql/queries/WorkflowJobQuery.js +29 -0
- package/build/graphql/queries/WorkflowRunQuery.js +13 -13
- package/build/graphql/types/WorkflowJob.d.ts +1 -0
- package/build/graphql/types/WorkflowJob.js +32 -0
- package/build/graphql/types/WorkflowRun.js +18 -0
- package/build/worker/assets.d.ts +0 -3
- package/build/worker/assets.js +3 -3
- package/build/worker/deployment.d.ts +23 -1
- package/build/worker/deployment.js +27 -1
- package/build/worker/mutations.d.ts +12 -1
- package/build/worker/mutations.js +33 -0
- package/build/worker/queries.d.ts +8 -1
- package/build/worker/queries.js +42 -0
- package/build/worker/upload.js +4 -8
- package/build/worker/utils/multipart.d.ts +5 -4
- package/build/worker/utils/multipart.js +44 -9
- package/oclif.manifest.json +196 -32
- package/package.json +2 -2
- package/build/commandUtils/workflows.d.ts +0 -20
- package/build/commandUtils/workflows.js +0 -21
package/build/worker/assets.js
CHANGED
|
@@ -35,8 +35,8 @@ async function createTempWritePathAsync() {
|
|
|
35
35
|
return node_path_1.default.resolve(tmpdir, `tmp-${basename}-${process.pid}-${random}`);
|
|
36
36
|
}
|
|
37
37
|
/** Computes a SHA512 hash for a file */
|
|
38
|
-
async function computeSha512HashAsync(filePath
|
|
39
|
-
const hash = (0, node_crypto_1.createHash)('sha512', { encoding: 'hex'
|
|
38
|
+
async function computeSha512HashAsync(filePath) {
|
|
39
|
+
const hash = (0, node_crypto_1.createHash)('sha512', { encoding: 'hex' });
|
|
40
40
|
await (0, promises_1.pipeline)(node_fs_1.default.createReadStream(filePath), hash);
|
|
41
41
|
return `${hash.read()}`;
|
|
42
42
|
}
|
|
@@ -89,7 +89,7 @@ async function collectAssetsAsync(assetPath, options) {
|
|
|
89
89
|
if (file.size > options.maxFileSize) {
|
|
90
90
|
throw new Error(`Upload of "${file.normalizedPath}" aborted: File size is greater than the upload limit (>500MB)`);
|
|
91
91
|
}
|
|
92
|
-
const sha512$ = computeSha512HashAsync(file.path
|
|
92
|
+
const sha512$ = computeSha512HashAsync(file.path);
|
|
93
93
|
const contentType$ = determineMimeTypeAsync(file.path);
|
|
94
94
|
assets.push({
|
|
95
95
|
normalizedPath: file.normalizedPath,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeploymentsMutation } from './mutations';
|
|
2
2
|
import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
|
|
3
|
-
import { WorkerDeploymentFragment } from '../graphql/generated';
|
|
3
|
+
import { WorkerDeploymentAliasFragment, WorkerDeploymentFragment } from '../graphql/generated';
|
|
4
4
|
import { selectPaginatedAsync } from '../utils/relay';
|
|
5
5
|
export declare function getSignedDeploymentUrlAsync(graphqlClient: ExpoGraphqlClient, options: {
|
|
6
6
|
appId: string;
|
|
@@ -37,3 +37,25 @@ export declare function selectWorkerDeploymentOnAppAsync({ graphqlClient, appId,
|
|
|
37
37
|
selectTitle?: string;
|
|
38
38
|
pageSize?: number;
|
|
39
39
|
}): ReturnType<typeof selectPaginatedAsync<WorkerDeploymentFragment>>;
|
|
40
|
+
export declare function deleteWorkerDeploymentAliasAsync({ graphqlClient, appId, aliasName, }: {
|
|
41
|
+
graphqlClient: ExpoGraphqlClient;
|
|
42
|
+
appId: string;
|
|
43
|
+
aliasName: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
aliasName?: string;
|
|
46
|
+
id: string;
|
|
47
|
+
}>;
|
|
48
|
+
export declare function selectWorkerDeploymentAliasOnAppAsync({ graphqlClient, appId, selectTitle, pageSize, }: {
|
|
49
|
+
graphqlClient: ExpoGraphqlClient;
|
|
50
|
+
appId: string;
|
|
51
|
+
selectTitle?: string;
|
|
52
|
+
pageSize?: number;
|
|
53
|
+
}): ReturnType<typeof selectPaginatedAsync<WorkerDeploymentAliasFragment>>;
|
|
54
|
+
export declare function deleteWorkerDeploymentAsync({ graphqlClient, appId, deploymentIdentifier, }: {
|
|
55
|
+
graphqlClient: ExpoGraphqlClient;
|
|
56
|
+
appId: string;
|
|
57
|
+
deploymentIdentifier: string;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
deploymentIdentifier: string;
|
|
60
|
+
id: string;
|
|
61
|
+
}>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.selectWorkerDeploymentOnAppAsync = exports.assignWorkerDeploymentProductionAsync = exports.assignWorkerDeploymentAliasAsync = exports.assignDevDomainNameAsync = exports.getSignedDeploymentUrlAsync = void 0;
|
|
3
|
+
exports.deleteWorkerDeploymentAsync = exports.selectWorkerDeploymentAliasOnAppAsync = exports.deleteWorkerDeploymentAliasAsync = exports.selectWorkerDeploymentOnAppAsync = exports.assignWorkerDeploymentProductionAsync = exports.assignWorkerDeploymentAliasAsync = exports.assignDevDomainNameAsync = exports.getSignedDeploymentUrlAsync = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
6
|
const mutations_1 = require("./mutations");
|
|
@@ -157,3 +157,29 @@ async function selectWorkerDeploymentOnAppAsync({ graphqlClient, appId, selectTi
|
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
159
|
exports.selectWorkerDeploymentOnAppAsync = selectWorkerDeploymentOnAppAsync;
|
|
160
|
+
async function deleteWorkerDeploymentAliasAsync({ graphqlClient, appId, aliasName, }) {
|
|
161
|
+
return await mutations_1.DeploymentsMutation.deleteAliasAsync(graphqlClient, {
|
|
162
|
+
appId,
|
|
163
|
+
aliasName,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
exports.deleteWorkerDeploymentAliasAsync = deleteWorkerDeploymentAliasAsync;
|
|
167
|
+
async function selectWorkerDeploymentAliasOnAppAsync({ graphqlClient, appId, selectTitle, pageSize, }) {
|
|
168
|
+
return await (0, relay_1.selectPaginatedAsync)({
|
|
169
|
+
pageSize: pageSize ?? 25,
|
|
170
|
+
printedType: selectTitle ?? 'worker deployment alias',
|
|
171
|
+
queryAsync: async (queryParams) => await queries_1.DeploymentsQuery.getAllAliasesPaginatedAsync(graphqlClient, {
|
|
172
|
+
...queryParams,
|
|
173
|
+
appId,
|
|
174
|
+
}),
|
|
175
|
+
getTitleAsync: async (alias) => (0, chalk_1.default) `${alias.aliasName ?? 'production'}{dim - ${alias.url}}`,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
exports.selectWorkerDeploymentAliasOnAppAsync = selectWorkerDeploymentAliasOnAppAsync;
|
|
179
|
+
async function deleteWorkerDeploymentAsync({ graphqlClient, appId, deploymentIdentifier, }) {
|
|
180
|
+
return await mutations_1.DeploymentsMutation.deleteWorkerDeploymentAsync(graphqlClient, {
|
|
181
|
+
appId,
|
|
182
|
+
deploymentIdentifier,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
exports.deleteWorkerDeploymentAsync = deleteWorkerDeploymentAsync;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
|
|
2
|
-
import { AssignAliasMutation } from '../graphql/generated';
|
|
2
|
+
import { AssignAliasMutation, DeleteAliasResult } from '../graphql/generated';
|
|
3
3
|
export declare const DeploymentsMutation: {
|
|
4
4
|
createSignedDeploymentUrlAsync(graphqlClient: ExpoGraphqlClient, deploymentVariables: {
|
|
5
5
|
appId: string;
|
|
@@ -14,4 +14,15 @@ export declare const DeploymentsMutation: {
|
|
|
14
14
|
deploymentId: string;
|
|
15
15
|
aliasName: string | null;
|
|
16
16
|
}): Promise<AssignAliasMutation['deployments']['assignAlias']>;
|
|
17
|
+
deleteAliasAsync(graphqlClient: ExpoGraphqlClient, deleteAliasVariables: {
|
|
18
|
+
appId: string;
|
|
19
|
+
aliasName: string;
|
|
20
|
+
}): Promise<DeleteAliasResult>;
|
|
21
|
+
deleteWorkerDeploymentAsync(graphqlClient: ExpoGraphqlClient, deleteVariables: {
|
|
22
|
+
appId: string;
|
|
23
|
+
deploymentIdentifier: string;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
deploymentIdentifier: string;
|
|
26
|
+
id: string;
|
|
27
|
+
}>;
|
|
17
28
|
};
|
|
@@ -75,4 +75,37 @@ exports.DeploymentsMutation = {
|
|
|
75
75
|
.toPromise());
|
|
76
76
|
return data.deployments.assignAlias;
|
|
77
77
|
},
|
|
78
|
+
async deleteAliasAsync(graphqlClient, deleteAliasVariables) {
|
|
79
|
+
const data = await (0, client_1.withErrorHandlingAsync)(graphqlClient
|
|
80
|
+
.mutation((0, graphql_tag_1.default) `
|
|
81
|
+
mutation DeleteAlias($appId: ID!, $aliasName: WorkerDeploymentIdentifier) {
|
|
82
|
+
deployments {
|
|
83
|
+
deleteAlias(appId: $appId, aliasName: $aliasName) {
|
|
84
|
+
id
|
|
85
|
+
aliasName
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
`, deleteAliasVariables)
|
|
90
|
+
.toPromise());
|
|
91
|
+
return data.deployments.deleteAlias;
|
|
92
|
+
},
|
|
93
|
+
async deleteWorkerDeploymentAsync(graphqlClient, deleteVariables) {
|
|
94
|
+
const data = await (0, client_1.withErrorHandlingAsync)(graphqlClient
|
|
95
|
+
.mutation((0, graphql_tag_1.default) `
|
|
96
|
+
mutation DeleteDeployment($appId: ID!, $deploymentIdentifier: ID!) {
|
|
97
|
+
deployments {
|
|
98
|
+
deleteWorkerDeploymentByIdentifier(
|
|
99
|
+
appId: $appId
|
|
100
|
+
deploymentIdentifier: $deploymentIdentifier
|
|
101
|
+
) {
|
|
102
|
+
id
|
|
103
|
+
deploymentIdentifier
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
`, deleteVariables)
|
|
108
|
+
.toPromise());
|
|
109
|
+
return data.deployments.deleteWorkerDeploymentByIdentifier;
|
|
110
|
+
},
|
|
78
111
|
};
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import type { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
|
|
2
|
-
import { type PaginatedWorkerDeploymentsQueryVariables, SuggestedDevDomainNameQueryVariables, type WorkerDeploymentFragment } from '../graphql/generated';
|
|
2
|
+
import { type PaginatedWorkerDeploymentsQueryVariables, SuggestedDevDomainNameQueryVariables, type WorkerDeploymentAliasFragment, type WorkerDeploymentFragment } from '../graphql/generated';
|
|
3
3
|
import type { Connection } from '../utils/relay';
|
|
4
4
|
export declare const DeploymentsQuery: {
|
|
5
5
|
getAllDeploymentsPaginatedAsync(graphqlClient: ExpoGraphqlClient, { appId, first, after, last, before }: PaginatedWorkerDeploymentsQueryVariables): Promise<Connection<WorkerDeploymentFragment>>;
|
|
6
6
|
getSuggestedDevDomainByAppIdAsync(graphqlClient: ExpoGraphqlClient, { appId }: SuggestedDevDomainNameQueryVariables): Promise<string>;
|
|
7
|
+
getAllAliasesPaginatedAsync(graphqlClient: ExpoGraphqlClient, { appId, first, after, last, before, }: {
|
|
8
|
+
appId: string;
|
|
9
|
+
first?: number | undefined;
|
|
10
|
+
after?: string | undefined;
|
|
11
|
+
last?: number | undefined;
|
|
12
|
+
before?: string | undefined;
|
|
13
|
+
}): Promise<Connection<WorkerDeploymentAliasFragment>>;
|
|
7
14
|
};
|
package/build/worker/queries.js
CHANGED
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const graphql_1 = require("graphql");
|
|
6
6
|
const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
|
|
7
7
|
const WorkerDeployment_1 = require("./fragments/WorkerDeployment");
|
|
8
|
+
const WorkerDeploymentAlias_1 = require("./fragments/WorkerDeploymentAlias");
|
|
8
9
|
const client_1 = require("../graphql/client");
|
|
9
10
|
exports.DeploymentsQuery = {
|
|
10
11
|
async getAllDeploymentsPaginatedAsync(graphqlClient, { appId, first, after, last, before }) {
|
|
@@ -58,4 +59,45 @@ exports.DeploymentsQuery = {
|
|
|
58
59
|
.toPromise());
|
|
59
60
|
return data.app.byId.suggestedDevDomainName;
|
|
60
61
|
},
|
|
62
|
+
async getAllAliasesPaginatedAsync(graphqlClient, { appId, first, after, last, before, }) {
|
|
63
|
+
const data = await (0, client_1.withErrorHandlingAsync)(graphqlClient
|
|
64
|
+
.query((0, graphql_tag_1.default) `
|
|
65
|
+
query PaginatedWorkerDeploymentAliases(
|
|
66
|
+
$appId: String!
|
|
67
|
+
$first: Int
|
|
68
|
+
$after: String
|
|
69
|
+
$last: Int
|
|
70
|
+
$before: String
|
|
71
|
+
) {
|
|
72
|
+
app {
|
|
73
|
+
byId(appId: $appId) {
|
|
74
|
+
id
|
|
75
|
+
workerDeploymentAliases(
|
|
76
|
+
first: $first
|
|
77
|
+
after: $after
|
|
78
|
+
last: $last
|
|
79
|
+
before: $before
|
|
80
|
+
) {
|
|
81
|
+
pageInfo {
|
|
82
|
+
hasNextPage
|
|
83
|
+
hasPreviousPage
|
|
84
|
+
startCursor
|
|
85
|
+
endCursor
|
|
86
|
+
}
|
|
87
|
+
edges {
|
|
88
|
+
cursor
|
|
89
|
+
node {
|
|
90
|
+
id
|
|
91
|
+
...WorkerDeploymentAliasFragment
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
${(0, graphql_1.print)(WorkerDeploymentAlias_1.WorkerDeploymentAliasFragmentNode)}
|
|
99
|
+
`, { appId, first, after, last, before }, { additionalTypenames: ['WorkerDeploymentAlias'] })
|
|
100
|
+
.toPromise());
|
|
101
|
+
return data.app.byId.workerDeploymentAliases;
|
|
102
|
+
},
|
|
61
103
|
};
|
package/build/worker/upload.js
CHANGED
|
@@ -52,7 +52,7 @@ async function uploadAsync(init, payload, onProgressUpdate) {
|
|
|
52
52
|
}
|
|
53
53
|
method = 'POST';
|
|
54
54
|
url.pathname = `/asset/${asset.sha512}`;
|
|
55
|
-
body =
|
|
55
|
+
body = node_stream_1.Readable.from((0, multipart_1.createReadStreamAsync)(asset), { objectMode: false });
|
|
56
56
|
}
|
|
57
57
|
else if ('filePath' in payload) {
|
|
58
58
|
const { filePath } = payload;
|
|
@@ -65,13 +65,9 @@ async function uploadAsync(init, payload, onProgressUpdate) {
|
|
|
65
65
|
headers.set('content-type', multipart_1.multipartContentType);
|
|
66
66
|
method = 'PATCH';
|
|
67
67
|
url.pathname = '/asset/batch';
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
contentType: asset.type,
|
|
72
|
-
contentLength: asset.size,
|
|
73
|
-
})), onProgressUpdate);
|
|
74
|
-
body = node_stream_1.Readable.from(iterator);
|
|
68
|
+
body = node_stream_1.Readable.from((0, multipart_1.createMultipartBodyFromFilesAsync)(multipart, onProgressUpdate), {
|
|
69
|
+
objectMode: false,
|
|
70
|
+
});
|
|
75
71
|
}
|
|
76
72
|
let response;
|
|
77
73
|
try {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
export declare function createReadStreamAsync(fileEntry: MultipartFileEntry): AsyncGenerator<Uint8Array>;
|
|
1
2
|
export interface MultipartFileEntry {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
sha512: string;
|
|
4
|
+
path: string;
|
|
5
|
+
type: string | null;
|
|
6
|
+
size: number;
|
|
6
7
|
}
|
|
7
8
|
export declare const multipartContentType = "multipart/form-data; boundary=----formdata-eas-cli";
|
|
8
9
|
type OnProgressUpdateCallback = (progress: number) => void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createMultipartBodyFromFilesAsync = exports.multipartContentType = void 0;
|
|
3
|
+
exports.createMultipartBodyFromFilesAsync = exports.multipartContentType = exports.createReadStreamAsync = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
6
|
const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
|
|
6
7
|
const CRLF = '\r\n';
|
|
7
8
|
const BOUNDARY_HYPHEN_CHARS = '--';
|
|
@@ -21,12 +22,46 @@ const encodeName = (input) => {
|
|
|
21
22
|
}
|
|
22
23
|
});
|
|
23
24
|
};
|
|
24
|
-
async function* createReadStreamAsync(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
async function* createReadStreamAsync(fileEntry) {
|
|
26
|
+
let handle;
|
|
27
|
+
try {
|
|
28
|
+
handle = await node_fs_1.default.promises.open(fileEntry.path);
|
|
29
|
+
const hash = (0, node_crypto_1.createHash)('sha512');
|
|
30
|
+
// NOTE(@kitten): fs.createReadStream() was previously used here as an async iterator
|
|
31
|
+
// However, if an early 'end' event is emitted, the async iterator may abort too early and cut off file contents
|
|
32
|
+
let bytesTotal = 0;
|
|
33
|
+
while (bytesTotal < fileEntry.size) {
|
|
34
|
+
const read = await handle.read();
|
|
35
|
+
const output = read.buffer.subarray(0, read.bytesRead);
|
|
36
|
+
bytesTotal += output.byteLength;
|
|
37
|
+
if (bytesTotal > fileEntry.size) {
|
|
38
|
+
throw new RangeError(`Asset "${fileEntry.path}" was modified during the upload (length mismatch)`);
|
|
39
|
+
}
|
|
40
|
+
if (output.byteLength) {
|
|
41
|
+
hash.update(output);
|
|
42
|
+
}
|
|
43
|
+
if (bytesTotal === fileEntry.size) {
|
|
44
|
+
const sha512 = hash.digest('hex');
|
|
45
|
+
if (sha512 !== fileEntry.sha512) {
|
|
46
|
+
throw new Error(`Asset "${fileEntry.path}" was modified during the upload (checksum mismatch)`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (output.byteLength) {
|
|
50
|
+
yield output;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (bytesTotal < fileEntry.size) {
|
|
57
|
+
throw new RangeError(`Asset "${fileEntry.path}" was modified during the upload (length mismatch)`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
await handle?.close();
|
|
28
62
|
}
|
|
29
63
|
}
|
|
64
|
+
exports.createReadStreamAsync = createReadStreamAsync;
|
|
30
65
|
const makeFormHeader = (params) => {
|
|
31
66
|
const name = encodeName(params.name);
|
|
32
67
|
let header = BOUNDARY_HYPHEN_CHARS + BOUNDARY_ID + CRLF;
|
|
@@ -47,12 +82,12 @@ async function* createMultipartBodyFromFilesAsync(entries, onProgressUpdate) {
|
|
|
47
82
|
for (let idx = 0; idx < entries.length; idx++) {
|
|
48
83
|
const entry = entries[idx];
|
|
49
84
|
const header = makeFormHeader({
|
|
50
|
-
name: entry.
|
|
51
|
-
contentType: entry.
|
|
52
|
-
contentLength: entry.
|
|
85
|
+
name: entry.sha512,
|
|
86
|
+
contentType: entry.type,
|
|
87
|
+
contentLength: entry.size,
|
|
53
88
|
});
|
|
54
89
|
yield encoder.encode(header);
|
|
55
|
-
yield* createReadStreamAsync(entry
|
|
90
|
+
yield* createReadStreamAsync(entry);
|
|
56
91
|
yield encoder.encode(CRLF);
|
|
57
92
|
if (onProgressUpdate) {
|
|
58
93
|
onProgressUpdate((idx + 1) / entries.length);
|
package/oclif.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "16.
|
|
2
|
+
"version": "16.17.0",
|
|
3
3
|
"commands": {
|
|
4
4
|
"analytics": {
|
|
5
5
|
"id": "analytics",
|
|
@@ -1937,44 +1937,18 @@
|
|
|
1937
1937
|
"vcsClient": {}
|
|
1938
1938
|
}
|
|
1939
1939
|
},
|
|
1940
|
-
"deploy:
|
|
1941
|
-
"id": "deploy:
|
|
1942
|
-
"description": "
|
|
1940
|
+
"deploy:delete": {
|
|
1941
|
+
"id": "deploy:delete",
|
|
1942
|
+
"description": "Delete a deployment.",
|
|
1943
1943
|
"strict": true,
|
|
1944
1944
|
"pluginName": "eas-cli",
|
|
1945
1945
|
"pluginAlias": "eas-cli",
|
|
1946
1946
|
"pluginType": "core",
|
|
1947
1947
|
"state": "preview",
|
|
1948
1948
|
"aliases": [
|
|
1949
|
-
"worker:
|
|
1950
|
-
"deploy:promote"
|
|
1949
|
+
"worker:delete"
|
|
1951
1950
|
],
|
|
1952
1951
|
"flags": {
|
|
1953
|
-
"prod": {
|
|
1954
|
-
"name": "prod",
|
|
1955
|
-
"type": "boolean",
|
|
1956
|
-
"description": "Promote an existing deployment to production.",
|
|
1957
|
-
"allowNo": false,
|
|
1958
|
-
"aliases": [
|
|
1959
|
-
"production"
|
|
1960
|
-
]
|
|
1961
|
-
},
|
|
1962
|
-
"alias": {
|
|
1963
|
-
"name": "alias",
|
|
1964
|
-
"type": "option",
|
|
1965
|
-
"description": "Custom alias to assign to the existing deployment.",
|
|
1966
|
-
"required": false,
|
|
1967
|
-
"helpValue": "name",
|
|
1968
|
-
"multiple": false
|
|
1969
|
-
},
|
|
1970
|
-
"id": {
|
|
1971
|
-
"name": "id",
|
|
1972
|
-
"type": "option",
|
|
1973
|
-
"description": "Unique identifier of an existing deployment.",
|
|
1974
|
-
"required": false,
|
|
1975
|
-
"helpValue": "xyz123",
|
|
1976
|
-
"multiple": false
|
|
1977
|
-
},
|
|
1978
1952
|
"json": {
|
|
1979
1953
|
"name": "json",
|
|
1980
1954
|
"type": "boolean",
|
|
@@ -1991,7 +1965,11 @@
|
|
|
1991
1965
|
"allowNo": false
|
|
1992
1966
|
}
|
|
1993
1967
|
},
|
|
1994
|
-
"args": {
|
|
1968
|
+
"args": {
|
|
1969
|
+
"DEPLOYMENT_ID": {
|
|
1970
|
+
"name": "DEPLOYMENT_ID"
|
|
1971
|
+
}
|
|
1972
|
+
},
|
|
1995
1973
|
"contextDefinition": {
|
|
1996
1974
|
"getDynamicPublicProjectConfigAsync": {},
|
|
1997
1975
|
"getDynamicPrivateProjectConfigAsync": {},
|
|
@@ -4196,6 +4174,45 @@
|
|
|
4196
4174
|
"loggedIn": {}
|
|
4197
4175
|
}
|
|
4198
4176
|
},
|
|
4177
|
+
"workflow:logs": {
|
|
4178
|
+
"id": "workflow:logs",
|
|
4179
|
+
"description": "view logs for a workflow run, selecting a job and step to view. You can pass in either a workflow run ID or a job ID. If no ID is passed in, you will be prompted to select from recent workflow runs for the current project.",
|
|
4180
|
+
"strict": true,
|
|
4181
|
+
"pluginName": "eas-cli",
|
|
4182
|
+
"pluginAlias": "eas-cli",
|
|
4183
|
+
"pluginType": "core",
|
|
4184
|
+
"aliases": [],
|
|
4185
|
+
"flags": {
|
|
4186
|
+
"json": {
|
|
4187
|
+
"name": "json",
|
|
4188
|
+
"type": "boolean",
|
|
4189
|
+
"description": "Enable JSON output, non-JSON messages will be printed to stderr.",
|
|
4190
|
+
"allowNo": false
|
|
4191
|
+
},
|
|
4192
|
+
"non-interactive": {
|
|
4193
|
+
"name": "non-interactive",
|
|
4194
|
+
"type": "boolean",
|
|
4195
|
+
"description": "Run the command in non-interactive mode.",
|
|
4196
|
+
"allowNo": false
|
|
4197
|
+
},
|
|
4198
|
+
"all-steps": {
|
|
4199
|
+
"name": "all-steps",
|
|
4200
|
+
"type": "boolean",
|
|
4201
|
+
"description": "Print all logs, rather than prompting for a specific step. This will be automatically set when in non-interactive mode.",
|
|
4202
|
+
"allowNo": false
|
|
4203
|
+
}
|
|
4204
|
+
},
|
|
4205
|
+
"args": {
|
|
4206
|
+
"id": {
|
|
4207
|
+
"name": "id",
|
|
4208
|
+
"description": "ID of the workflow run or workflow job to view logs for"
|
|
4209
|
+
}
|
|
4210
|
+
},
|
|
4211
|
+
"contextDefinition": {
|
|
4212
|
+
"projectId": {},
|
|
4213
|
+
"loggedIn": {}
|
|
4214
|
+
}
|
|
4215
|
+
},
|
|
4199
4216
|
"workflow:run": {
|
|
4200
4217
|
"id": "workflow:run",
|
|
4201
4218
|
"description": "run an EAS workflow",
|
|
@@ -4218,6 +4235,18 @@
|
|
|
4218
4235
|
"description": "Exit codes: 0 = success, 11 = failure, 12 = canceled, 13 = wait aborted.",
|
|
4219
4236
|
"allowNo": true
|
|
4220
4237
|
},
|
|
4238
|
+
"input": {
|
|
4239
|
+
"name": "input",
|
|
4240
|
+
"type": "option",
|
|
4241
|
+
"char": "F",
|
|
4242
|
+
"summary": "Set workflow inputs",
|
|
4243
|
+
"description": "Add a parameter in key=value format. Use multiple instances of this flag to set multiple inputs.",
|
|
4244
|
+
"multiple": true,
|
|
4245
|
+
"aliases": [
|
|
4246
|
+
"f",
|
|
4247
|
+
"field"
|
|
4248
|
+
]
|
|
4249
|
+
},
|
|
4221
4250
|
"json": {
|
|
4222
4251
|
"name": "json",
|
|
4223
4252
|
"type": "boolean",
|
|
@@ -4320,6 +4349,39 @@
|
|
|
4320
4349
|
"loggedIn": {}
|
|
4321
4350
|
}
|
|
4322
4351
|
},
|
|
4352
|
+
"workflow:view": {
|
|
4353
|
+
"id": "workflow:view",
|
|
4354
|
+
"description": "view details for a workflow run, including jobs. If no run ID is provided, you will be prompted to select from recent workflow runs for the current project.",
|
|
4355
|
+
"strict": true,
|
|
4356
|
+
"pluginName": "eas-cli",
|
|
4357
|
+
"pluginAlias": "eas-cli",
|
|
4358
|
+
"pluginType": "core",
|
|
4359
|
+
"aliases": [],
|
|
4360
|
+
"flags": {
|
|
4361
|
+
"json": {
|
|
4362
|
+
"name": "json",
|
|
4363
|
+
"type": "boolean",
|
|
4364
|
+
"description": "Enable JSON output, non-JSON messages will be printed to stderr.",
|
|
4365
|
+
"allowNo": false
|
|
4366
|
+
},
|
|
4367
|
+
"non-interactive": {
|
|
4368
|
+
"name": "non-interactive",
|
|
4369
|
+
"type": "boolean",
|
|
4370
|
+
"description": "Run the command in non-interactive mode.",
|
|
4371
|
+
"allowNo": false
|
|
4372
|
+
}
|
|
4373
|
+
},
|
|
4374
|
+
"args": {
|
|
4375
|
+
"id": {
|
|
4376
|
+
"name": "id",
|
|
4377
|
+
"description": "ID of the workflow run to view"
|
|
4378
|
+
}
|
|
4379
|
+
},
|
|
4380
|
+
"contextDefinition": {
|
|
4381
|
+
"projectId": {},
|
|
4382
|
+
"loggedIn": {}
|
|
4383
|
+
}
|
|
4384
|
+
},
|
|
4323
4385
|
"build:version:get": {
|
|
4324
4386
|
"id": "build:version:get",
|
|
4325
4387
|
"description": "get the latest version from EAS servers",
|
|
@@ -4450,6 +4512,108 @@
|
|
|
4450
4512
|
"projectDir": {},
|
|
4451
4513
|
"vcsClient": {}
|
|
4452
4514
|
}
|
|
4515
|
+
},
|
|
4516
|
+
"deploy:alias:delete": {
|
|
4517
|
+
"id": "deploy:alias:delete",
|
|
4518
|
+
"description": "Delete deployment aliases.",
|
|
4519
|
+
"strict": true,
|
|
4520
|
+
"pluginName": "eas-cli",
|
|
4521
|
+
"pluginAlias": "eas-cli",
|
|
4522
|
+
"pluginType": "core",
|
|
4523
|
+
"state": "preview",
|
|
4524
|
+
"aliases": [
|
|
4525
|
+
"worker:alias:delete"
|
|
4526
|
+
],
|
|
4527
|
+
"flags": {
|
|
4528
|
+
"json": {
|
|
4529
|
+
"name": "json",
|
|
4530
|
+
"type": "boolean",
|
|
4531
|
+
"description": "Enable JSON output, non-JSON messages will be printed to stderr.",
|
|
4532
|
+
"allowNo": false,
|
|
4533
|
+
"dependsOn": [
|
|
4534
|
+
"non-interactive"
|
|
4535
|
+
]
|
|
4536
|
+
},
|
|
4537
|
+
"non-interactive": {
|
|
4538
|
+
"name": "non-interactive",
|
|
4539
|
+
"type": "boolean",
|
|
4540
|
+
"description": "Run the command in non-interactive mode.",
|
|
4541
|
+
"allowNo": false
|
|
4542
|
+
}
|
|
4543
|
+
},
|
|
4544
|
+
"args": {
|
|
4545
|
+
"ALIAS_NAME": {
|
|
4546
|
+
"name": "ALIAS_NAME"
|
|
4547
|
+
}
|
|
4548
|
+
},
|
|
4549
|
+
"contextDefinition": {
|
|
4550
|
+
"getDynamicPublicProjectConfigAsync": {},
|
|
4551
|
+
"getDynamicPrivateProjectConfigAsync": {},
|
|
4552
|
+
"projectDir": {},
|
|
4553
|
+
"loggedIn": {}
|
|
4554
|
+
}
|
|
4555
|
+
},
|
|
4556
|
+
"deploy:alias": {
|
|
4557
|
+
"id": "deploy:alias",
|
|
4558
|
+
"description": "Assign deployment aliases.",
|
|
4559
|
+
"strict": true,
|
|
4560
|
+
"pluginName": "eas-cli",
|
|
4561
|
+
"pluginAlias": "eas-cli",
|
|
4562
|
+
"pluginType": "core",
|
|
4563
|
+
"state": "preview",
|
|
4564
|
+
"aliases": [
|
|
4565
|
+
"worker:alias",
|
|
4566
|
+
"deploy:promote"
|
|
4567
|
+
],
|
|
4568
|
+
"flags": {
|
|
4569
|
+
"prod": {
|
|
4570
|
+
"name": "prod",
|
|
4571
|
+
"type": "boolean",
|
|
4572
|
+
"description": "Promote an existing deployment to production.",
|
|
4573
|
+
"allowNo": false,
|
|
4574
|
+
"aliases": [
|
|
4575
|
+
"production"
|
|
4576
|
+
]
|
|
4577
|
+
},
|
|
4578
|
+
"alias": {
|
|
4579
|
+
"name": "alias",
|
|
4580
|
+
"type": "option",
|
|
4581
|
+
"description": "Custom alias to assign to the existing deployment.",
|
|
4582
|
+
"required": false,
|
|
4583
|
+
"helpValue": "name",
|
|
4584
|
+
"multiple": false
|
|
4585
|
+
},
|
|
4586
|
+
"id": {
|
|
4587
|
+
"name": "id",
|
|
4588
|
+
"type": "option",
|
|
4589
|
+
"description": "Unique identifier of an existing deployment.",
|
|
4590
|
+
"required": false,
|
|
4591
|
+
"helpValue": "xyz123",
|
|
4592
|
+
"multiple": false
|
|
4593
|
+
},
|
|
4594
|
+
"json": {
|
|
4595
|
+
"name": "json",
|
|
4596
|
+
"type": "boolean",
|
|
4597
|
+
"description": "Enable JSON output, non-JSON messages will be printed to stderr.",
|
|
4598
|
+
"allowNo": false,
|
|
4599
|
+
"dependsOn": [
|
|
4600
|
+
"non-interactive"
|
|
4601
|
+
]
|
|
4602
|
+
},
|
|
4603
|
+
"non-interactive": {
|
|
4604
|
+
"name": "non-interactive",
|
|
4605
|
+
"type": "boolean",
|
|
4606
|
+
"description": "Run the command in non-interactive mode.",
|
|
4607
|
+
"allowNo": false
|
|
4608
|
+
}
|
|
4609
|
+
},
|
|
4610
|
+
"args": {},
|
|
4611
|
+
"contextDefinition": {
|
|
4612
|
+
"getDynamicPublicProjectConfigAsync": {},
|
|
4613
|
+
"getDynamicPrivateProjectConfigAsync": {},
|
|
4614
|
+
"projectDir": {},
|
|
4615
|
+
"loggedIn": {}
|
|
4616
|
+
}
|
|
4453
4617
|
}
|
|
4454
4618
|
}
|
|
4455
4619
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eas-cli",
|
|
3
3
|
"description": "EAS command line tool",
|
|
4
|
-
"version": "16.
|
|
4
|
+
"version": "16.17.0",
|
|
5
5
|
"author": "Expo <support@expo.dev>",
|
|
6
6
|
"bin": {
|
|
7
7
|
"eas": "./bin/run"
|
|
@@ -241,5 +241,5 @@
|
|
|
241
241
|
"node": "20.11.0",
|
|
242
242
|
"yarn": "1.22.21"
|
|
243
243
|
},
|
|
244
|
-
"gitHead": "
|
|
244
|
+
"gitHead": "38e64cbd9a6670e52f189475d3ca835944756da5"
|
|
245
245
|
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { WorkflowRunFragment } from '../graphql/generated';
|
|
2
|
-
export type WorkflowRunResult = {
|
|
3
|
-
id: string;
|
|
4
|
-
status: string;
|
|
5
|
-
gitCommitMessage: string | null;
|
|
6
|
-
gitCommitHash: string | null;
|
|
7
|
-
startedAt: string;
|
|
8
|
-
finishedAt: string;
|
|
9
|
-
workflowId: string;
|
|
10
|
-
workflowName: string | null;
|
|
11
|
-
workflowFileName: string;
|
|
12
|
-
};
|
|
13
|
-
export declare function processWorkflowRuns(runs: WorkflowRunFragment[]): WorkflowRunResult[];
|
|
14
|
-
export type WorkflowResult = {
|
|
15
|
-
id: string;
|
|
16
|
-
name?: string | null | undefined;
|
|
17
|
-
fileName: string;
|
|
18
|
-
createdAt: string;
|
|
19
|
-
updatedAt: string;
|
|
20
|
-
};
|