eas-cli 0.49.0 → 0.52.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 +44 -43
- package/build/build/build.d.ts +6 -2
- package/build/build/build.js +191 -104
- package/build/build/ios/build.js +3 -1
- package/build/build/ios/credentials.js +2 -6
- package/build/build/local.js +1 -1
- package/build/build/runBuildAndSubmit.js +5 -1
- package/build/commands/update/index.d.ts +1 -0
- package/build/commands/update/index.js +27 -3
- package/build/credentials/android/actions/CreateGoogleServiceAccountKey.js +24 -9
- package/build/credentials/context.js +5 -0
- package/build/credentials/ios/IosCredentialsProvider.d.ts +0 -2
- package/build/credentials/ios/IosCredentialsProvider.js +0 -1
- package/build/credentials/ios/actions/AscApiKeyUtils.js +0 -1
- package/build/credentials/ios/actions/ConfigureProvisioningProfile.js +1 -1
- package/build/credentials/ios/actions/CreateProvisioningProfile.js +1 -1
- package/build/credentials/ios/actions/SetUpBuildCredentials.d.ts +0 -2
- package/build/credentials/ios/actions/SetUpBuildCredentials.js +3 -1
- package/build/credentials/ios/actions/SetUpTargetBuildCredentials.d.ts +2 -2
- package/build/credentials/ios/actions/SetUpTargetBuildCredentials.js +2 -2
- package/build/credentials/ios/appstore/AppStoreApi.d.ts +5 -1
- package/build/credentials/ios/appstore/AppStoreApi.js +38 -15
- package/build/credentials/ios/appstore/ascApiKey.d.ts +21 -5
- package/build/credentials/ios/appstore/ascApiKey.js +28 -12
- package/build/credentials/ios/appstore/authenticate.d.ts +9 -18
- package/build/credentials/ios/appstore/authenticate.js +43 -3
- package/build/credentials/ios/appstore/authenticateTypes.d.ts +42 -0
- package/build/credentials/ios/appstore/authenticateTypes.js +16 -0
- package/build/credentials/ios/appstore/contractMessages.d.ts +3 -0
- package/build/credentials/ios/appstore/contractMessages.js +12 -0
- package/build/credentials/ios/appstore/distributionCertificate.d.ts +1 -1
- package/build/credentials/ios/appstore/ensureAppExists.d.ts +2 -2
- package/build/credentials/ios/appstore/ensureAppExists.js +12 -5
- package/build/credentials/ios/appstore/provisioningProfile.d.ts +1 -1
- package/build/credentials/ios/appstore/provisioningProfileAdhoc.d.ts +1 -1
- package/build/credentials/ios/appstore/pushKey.d.ts +4 -4
- package/build/credentials/ios/appstore/pushKey.js +8 -8
- package/build/credentials/ios/appstore/resolveCredentials.d.ts +10 -1
- package/build/credentials/ios/appstore/resolveCredentials.js +125 -3
- package/build/credentials/ios/types.d.ts +2 -0
- package/build/credentials/ios/utils/printCredentials.d.ts +1 -1
- package/build/credentials/manager/ManageIos.js +8 -7
- package/build/graphql/generated.d.ts +73 -0
- package/build/graphql/generated.js +16 -1
- package/build/graphql/types/Build.js +4 -0
- package/build/project/ios/entitlements.d.ts +8 -0
- package/build/{credentials/ios/appstore → project/ios}/entitlements.js +7 -19
- package/build/project/ios/target.d.ts +9 -3
- package/build/project/ios/target.js +68 -47
- package/build/project/publish.js +2 -1
- package/build/submit/android/ServiceAccountSource.js +1 -1
- package/build/submit/ios/AppProduce.d.ts +0 -1
- package/build/submit/ios/AppProduce.js +5 -6
- package/build/submit/ios/AppSpecificPasswordSource.js +2 -2
- package/build/submit/utils/errors.js +6 -2
- package/build/utils/code-signing.d.ts +0 -5
- package/build/utils/code-signing.js +16 -65
- package/oclif.manifest.json +1 -1
- package/package.json +11 -11
- package/build/credentials/ios/appstore/entitlements.d.ts +0 -4
|
@@ -1,30 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findTargetByName = exports.findApplicationTarget = exports.resolveTargetsAsync = void 0;
|
|
3
|
+
exports.findTargetByName = exports.findApplicationTarget = exports.resolveTargetsAsync = exports.resolveBareProjectTargetsAsync = exports.resolveMangedProjectTargetsAsync = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const config_plugins_1 = require("@expo/config-plugins");
|
|
6
6
|
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
7
7
|
const joi_1 = tslib_1.__importDefault(require("joi"));
|
|
8
8
|
const workflow_1 = require("../workflow");
|
|
9
9
|
const bundleIdentifier_1 = require("./bundleIdentifier");
|
|
10
|
+
const entitlements_1 = require("./entitlements");
|
|
10
11
|
const AppExtensionsConfigSchema = joi_1.default.array().items(joi_1.default.object({
|
|
11
12
|
targetName: joi_1.default.string().required(),
|
|
12
13
|
bundleIdentifier: joi_1.default.string().required(),
|
|
13
14
|
parentBundleIdentifier: joi_1.default.string(),
|
|
15
|
+
entitlements: joi_1.default.object(),
|
|
14
16
|
}));
|
|
15
|
-
async function
|
|
17
|
+
async function resolveMangedProjectTargetsAsync({ exp, projectDir, xcodeBuildContext, env, }) {
|
|
18
|
+
var _a, _b, _c, _d, _e, _f;
|
|
19
|
+
const { buildScheme, buildConfiguration } = xcodeBuildContext;
|
|
20
|
+
const applicationTargetName = buildScheme;
|
|
21
|
+
const applicationTargetBundleIdentifier = await (0, bundleIdentifier_1.getBundleIdentifierAsync)(projectDir, exp, {
|
|
22
|
+
targetName: applicationTargetName,
|
|
23
|
+
buildConfiguration,
|
|
24
|
+
});
|
|
25
|
+
const applicationTargetEntitlements = await (0, entitlements_1.getManagedApplicationTargetEntitlementsAsync)(projectDir, env !== null && env !== void 0 ? env : {});
|
|
26
|
+
const appExtensions = (_f = (_e = (_d = (_c = (_b = (_a = exp.extra) === null || _a === void 0 ? void 0 : _a.eas) === null || _b === void 0 ? void 0 : _b.build) === null || _c === void 0 ? void 0 : _c.experimental) === null || _d === void 0 ? void 0 : _d.ios) === null || _e === void 0 ? void 0 : _e.appExtensions) !== null && _f !== void 0 ? _f : [];
|
|
27
|
+
const { error } = AppExtensionsConfigSchema.validate(appExtensions, {
|
|
28
|
+
allowUnknown: false,
|
|
29
|
+
abortEarly: false,
|
|
30
|
+
});
|
|
31
|
+
if (error) {
|
|
32
|
+
throw new Error(`Failed to validate "extra.eas.build.experimental.ios.appExtensions" in you app config.\n${error.message}`);
|
|
33
|
+
}
|
|
34
|
+
const extensionsTargets = appExtensions.map(extension => {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
return ({
|
|
37
|
+
targetName: extension.targetName,
|
|
38
|
+
buildConfiguration,
|
|
39
|
+
bundleIdentifier: extension.bundleIdentifier,
|
|
40
|
+
parentBundleIdentifier: (_a = extension.parentBundleIdentifier) !== null && _a !== void 0 ? _a : applicationTargetBundleIdentifier,
|
|
41
|
+
entitlements: (_b = extension.entitlements) !== null && _b !== void 0 ? _b : {},
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
return [
|
|
45
|
+
{
|
|
46
|
+
targetName: applicationTargetName,
|
|
47
|
+
bundleIdentifier: applicationTargetBundleIdentifier,
|
|
48
|
+
buildConfiguration,
|
|
49
|
+
entitlements: applicationTargetEntitlements,
|
|
50
|
+
},
|
|
51
|
+
...extensionsTargets,
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
exports.resolveMangedProjectTargetsAsync = resolveMangedProjectTargetsAsync;
|
|
55
|
+
async function resolveBareProjectTargetsAsync({ exp, projectDir, xcodeBuildContext, }) {
|
|
56
|
+
const { buildScheme, buildConfiguration } = xcodeBuildContext;
|
|
16
57
|
const result = [];
|
|
17
|
-
const applicationTarget = await
|
|
58
|
+
const applicationTarget = await config_plugins_1.IOSConfig.Target.findApplicationTargetWithDependenciesAsync(projectDir, buildScheme);
|
|
18
59
|
const bundleIdentifier = await (0, bundleIdentifier_1.getBundleIdentifierAsync)(projectDir, exp, {
|
|
19
60
|
targetName: applicationTarget.name,
|
|
20
61
|
buildConfiguration,
|
|
21
62
|
});
|
|
63
|
+
const entitlements = await (0, entitlements_1.getNativeTargetEntitlementsAsync)(projectDir, {
|
|
64
|
+
targetName: applicationTarget.name,
|
|
65
|
+
buildConfiguration,
|
|
66
|
+
});
|
|
22
67
|
result.push({
|
|
23
68
|
targetName: applicationTarget.name,
|
|
24
69
|
bundleIdentifier,
|
|
25
70
|
buildConfiguration,
|
|
71
|
+
entitlements: entitlements !== null && entitlements !== void 0 ? entitlements : {},
|
|
26
72
|
});
|
|
27
|
-
const dependencies = await
|
|
73
|
+
const dependencies = await resolveBareProjectDependenciesAsync({
|
|
28
74
|
exp,
|
|
29
75
|
projectDir,
|
|
30
76
|
buildConfiguration,
|
|
@@ -34,40 +80,23 @@ async function resolveTargetsAsync({ exp, projectDir }, { buildConfiguration, bu
|
|
|
34
80
|
if (dependencies.length > 0) {
|
|
35
81
|
result.push(...dependencies);
|
|
36
82
|
}
|
|
37
|
-
result.push(...(await resolveManagedAppExtensionsAsync({
|
|
38
|
-
exp,
|
|
39
|
-
projectDir,
|
|
40
|
-
buildConfiguration,
|
|
41
|
-
applicationTargetBundleIdentifier: bundleIdentifier,
|
|
42
|
-
})));
|
|
43
83
|
return result;
|
|
44
84
|
}
|
|
45
|
-
exports.
|
|
46
|
-
async function
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (workflow === eas_build_job_1.Workflow.GENERIC || !managedAppExtensions) {
|
|
51
|
-
return [];
|
|
85
|
+
exports.resolveBareProjectTargetsAsync = resolveBareProjectTargetsAsync;
|
|
86
|
+
async function resolveTargetsAsync(opts) {
|
|
87
|
+
const workflow = await (0, workflow_1.resolveWorkflowAsync)(opts.projectDir, eas_build_job_1.Platform.IOS);
|
|
88
|
+
if (workflow === eas_build_job_1.Workflow.GENERIC) {
|
|
89
|
+
return await resolveBareProjectTargetsAsync(opts);
|
|
52
90
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
throw new Error(`Failed to validate "extra.eas.build.experimental.ios.appExtensions" in you app config\n${error.message}`);
|
|
91
|
+
else if (workflow === eas_build_job_1.Workflow.MANAGED) {
|
|
92
|
+
return await resolveMangedProjectTargetsAsync(opts);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw new Error(`Unknown workflow: ${workflow}`);
|
|
59
96
|
}
|
|
60
|
-
return managedAppExtensions.map(extension => {
|
|
61
|
-
var _a;
|
|
62
|
-
return ({
|
|
63
|
-
targetName: extension.targetName,
|
|
64
|
-
buildConfiguration,
|
|
65
|
-
bundleIdentifier: extension.bundleIdentifier,
|
|
66
|
-
parentBundleIdentifier: (_a = extension.parentBundleIdentifier) !== null && _a !== void 0 ? _a : applicationTargetBundleIdentifier,
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
97
|
}
|
|
70
|
-
|
|
98
|
+
exports.resolveTargetsAsync = resolveTargetsAsync;
|
|
99
|
+
async function resolveBareProjectDependenciesAsync({ exp, projectDir, buildConfiguration, target, bundleIdentifier, }) {
|
|
71
100
|
const result = [];
|
|
72
101
|
if (target.dependencies && target.dependencies.length > 0) {
|
|
73
102
|
for (const dependency of target.dependencies) {
|
|
@@ -75,13 +104,18 @@ async function resolveDependenciesAsync({ exp, projectDir, buildConfiguration, t
|
|
|
75
104
|
targetName: dependency.name,
|
|
76
105
|
buildConfiguration,
|
|
77
106
|
});
|
|
107
|
+
const entitlements = await (0, entitlements_1.getNativeTargetEntitlementsAsync)(projectDir, {
|
|
108
|
+
targetName: target.name,
|
|
109
|
+
buildConfiguration,
|
|
110
|
+
});
|
|
78
111
|
result.push({
|
|
79
112
|
targetName: dependency.name,
|
|
80
113
|
buildConfiguration,
|
|
81
114
|
bundleIdentifier: dependencyBundleIdentifier,
|
|
82
115
|
parentBundleIdentifier: bundleIdentifier,
|
|
116
|
+
entitlements: entitlements !== null && entitlements !== void 0 ? entitlements : {},
|
|
83
117
|
});
|
|
84
|
-
const dependencyDependencies = await
|
|
118
|
+
const dependencyDependencies = await resolveBareProjectDependenciesAsync({
|
|
85
119
|
exp,
|
|
86
120
|
projectDir,
|
|
87
121
|
buildConfiguration,
|
|
@@ -95,19 +129,6 @@ async function resolveDependenciesAsync({ exp, projectDir, buildConfiguration, t
|
|
|
95
129
|
}
|
|
96
130
|
return result;
|
|
97
131
|
}
|
|
98
|
-
async function readApplicationTargetForSchemeAsync(projectDir, scheme) {
|
|
99
|
-
const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, eas_build_job_1.Platform.IOS);
|
|
100
|
-
if (workflow === eas_build_job_1.Workflow.GENERIC) {
|
|
101
|
-
return await config_plugins_1.IOSConfig.Target.findApplicationTargetWithDependenciesAsync(projectDir, scheme);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
return {
|
|
105
|
-
name: scheme,
|
|
106
|
-
type: config_plugins_1.IOSConfig.Target.TargetType.APPLICATION,
|
|
107
|
-
dependencies: [],
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
132
|
function findApplicationTarget(targets) {
|
|
112
133
|
const applicationTarget = targets.find(({ parentBundleIdentifier }) => !parentBundleIdentifier);
|
|
113
134
|
if (!applicationTarget) {
|
package/build/project/publish.js
CHANGED
|
@@ -11,6 +11,7 @@ const path_1 = tslib_1.__importDefault(require("path"));
|
|
|
11
11
|
const generated_1 = require("../graphql/generated");
|
|
12
12
|
const PublishMutation_1 = require("../graphql/mutations/PublishMutation");
|
|
13
13
|
const PublishQuery_1 = require("../graphql/queries/PublishQuery");
|
|
14
|
+
const log_1 = tslib_1.__importDefault(require("../log"));
|
|
14
15
|
const uploads_1 = require("../uploads");
|
|
15
16
|
const expoCli_1 = require("../utils/expoCli");
|
|
16
17
|
const uniqBy_1 = tslib_1.__importDefault(require("../utils/expodash/uniqBy"));
|
|
@@ -106,7 +107,7 @@ async function buildBundlesAsync({ projectDir, inputDir, }) {
|
|
|
106
107
|
if (!packageJSON) {
|
|
107
108
|
throw new Error('Could not locate package.json');
|
|
108
109
|
}
|
|
109
|
-
await (0, expoCli_1.expoCommandAsync)(projectDir, ['export', '--output-dir', inputDir, '--experimental-bundle'], { silent:
|
|
110
|
+
await (0, expoCli_1.expoCommandAsync)(projectDir, ['export', '--output-dir', inputDir, '--experimental-bundle'], { silent: !log_1.default.isDebug });
|
|
110
111
|
}
|
|
111
112
|
exports.buildBundlesAsync = buildBundlesAsync;
|
|
112
113
|
async function resolveInputDirectoryAsync(customInputDirectory) {
|
|
@@ -98,7 +98,7 @@ async function handlePromptSourceAsync(_source) {
|
|
|
98
98
|
}
|
|
99
99
|
async function askForServiceAccountPathAsync() {
|
|
100
100
|
log_1.default.log(`${chalk_1.default.bold('A Google Service Account JSON key is required to upload your app to Google Play Store')}.\n` +
|
|
101
|
-
`If you're not sure what this is or how to create one, ${(0, log_1.learnMore)('https://expo.fyi/creating-google-service-account')}`);
|
|
101
|
+
`If you're not sure what this is or how to create one, ${(0, log_1.learnMore)('https://expo.fyi/creating-google-service-account', { learnMoreMessage: 'learn more' })}`);
|
|
102
102
|
const { filePath } = await (0, prompts_1.promptAsync)({
|
|
103
103
|
name: 'filePath',
|
|
104
104
|
message: 'Path to Google Service Account file:',
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Platform } from '@expo/eas-build-job';
|
|
2
2
|
import { SubmissionContext } from '../context';
|
|
3
3
|
declare type AppStoreResult = {
|
|
4
|
-
appleIdUsername: string;
|
|
5
4
|
ascAppIdentifier: string;
|
|
6
5
|
};
|
|
7
6
|
export declare function ensureAppStoreConnectAppExistsAsync(ctx: SubmissionContext<Platform.IOS>): Promise<AppStoreResult>;
|
|
@@ -32,24 +32,24 @@ async function isProvisioningAvailableAsync(requestCtx) {
|
|
|
32
32
|
}
|
|
33
33
|
async function createAppStoreConnectAppAsync(ctx, options) {
|
|
34
34
|
const { appleId, appleTeamId, bundleIdentifier: bundleId, appName, language, companyName, sku, } = options;
|
|
35
|
-
const
|
|
35
|
+
const userAuthCtx = await ctx.credentialsCtx.appStore.ensureUserAuthenticatedAsync({
|
|
36
36
|
appleId,
|
|
37
37
|
teamId: appleTeamId,
|
|
38
38
|
});
|
|
39
|
-
const requestCtx = (0, authenticate_1.getRequestContext)(
|
|
39
|
+
const requestCtx = (0, authenticate_1.getRequestContext)(userAuthCtx);
|
|
40
40
|
log_1.default.addNewLineIfNone();
|
|
41
41
|
if (await isProvisioningAvailableAsync(requestCtx)) {
|
|
42
|
-
await (0, ensureAppExists_1.ensureBundleIdExistsWithNameAsync)(
|
|
42
|
+
await (0, ensureAppExists_1.ensureBundleIdExistsWithNameAsync)(userAuthCtx, {
|
|
43
43
|
name: appName,
|
|
44
44
|
bundleIdentifier: bundleId,
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
|
-
log_1.default.warn(`Provisioning is not available for
|
|
48
|
+
log_1.default.warn(`Provisioning is not available for Apple User: ${userAuthCtx.appleId}, skipping bundle identifier check.`);
|
|
49
49
|
}
|
|
50
50
|
let app = null;
|
|
51
51
|
try {
|
|
52
|
-
app = await (0, ensureAppExists_1.ensureAppExistsAsync)(
|
|
52
|
+
app = await (0, ensureAppExists_1.ensureAppExistsAsync)(userAuthCtx, {
|
|
53
53
|
name: appName,
|
|
54
54
|
language,
|
|
55
55
|
companyName,
|
|
@@ -74,7 +74,6 @@ async function createAppStoreConnectAppAsync(ctx, options) {
|
|
|
74
74
|
throw error;
|
|
75
75
|
}
|
|
76
76
|
return {
|
|
77
|
-
appleIdUsername: authCtx.appleId,
|
|
78
77
|
ascAppIdentifier: app.id,
|
|
79
78
|
};
|
|
80
79
|
}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getAppleIdUsernameAsync = exports.getAppSpecificPasswordLocallyAsync = exports.AppSpecificPasswordSourceType = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const getenv_1 = tslib_1.__importDefault(require("getenv"));
|
|
6
|
+
const authenticate_1 = require("../../credentials/ios/appstore/authenticate");
|
|
6
7
|
const prompts_1 = require("../../prompts");
|
|
7
8
|
const UserSettings_1 = tslib_1.__importDefault(require("../../user/UserSettings"));
|
|
8
9
|
var AppSpecificPasswordSourceType;
|
|
@@ -23,7 +24,6 @@ async function getAppSpecificPasswordLocallyAsync(ctx, source) {
|
|
|
23
24
|
}
|
|
24
25
|
exports.getAppSpecificPasswordLocallyAsync = getAppSpecificPasswordLocallyAsync;
|
|
25
26
|
async function getAppleIdUsernameAsync(ctx) {
|
|
26
|
-
var _a;
|
|
27
27
|
if (ctx.profile.appleId) {
|
|
28
28
|
return ctx.profile.appleId;
|
|
29
29
|
}
|
|
@@ -31,7 +31,7 @@ async function getAppleIdUsernameAsync(ctx) {
|
|
|
31
31
|
if (envAppleId) {
|
|
32
32
|
return envAppleId;
|
|
33
33
|
}
|
|
34
|
-
if ((
|
|
34
|
+
if ((0, authenticate_1.isUserAuthCtx)(ctx.credentialsCtx.appStore.authCtx)) {
|
|
35
35
|
return ctx.credentialsCtx.appStore.authCtx.appleId;
|
|
36
36
|
}
|
|
37
37
|
// Get the email address that was last used and set it as
|
|
@@ -20,10 +20,11 @@ var SubmissionErrorCode;
|
|
|
20
20
|
SubmissionErrorCode["IOS_INCORRECT_CREDENTIALS"] = "SUBMISSION_SERVICE_IOS_INVALID_CREDENTIALS";
|
|
21
21
|
SubmissionErrorCode["IOS_IPAD_INVALID_ORIENTATION"] = "SUBMISSION_SERVICE_IOS_IPAD_INVALID_ORIENTATION";
|
|
22
22
|
SubmissionErrorCode["IOS_APPLE_MAINTENANCE"] = "SUBMISSION_SERVICE_IOS_APPLE_MAINTENANCE";
|
|
23
|
+
SubmissionErrorCode["IOS_INVALID_PROVISIONING_PROFILE_SIGNATURE"] = "SUBMISSION_SERVICE_IOS_INVALID_PROVISIONING_PROFILE_SIGNATURE";
|
|
23
24
|
})(SubmissionErrorCode || (SubmissionErrorCode = {}));
|
|
24
25
|
const SubmissionErrorMessages = {
|
|
25
26
|
[SubmissionErrorCode.ARCHIVE_DOWNLOAD_NOT_FOUND_ERROR]: "Failed to download the archive file (Response code: 404 Not Found). Please make sure the URL you've provided is correct.",
|
|
26
|
-
[SubmissionErrorCode.ARCHIVE_DOWNLOAD_FORBIDDEN_ERROR]: 'Failed to download the archive file (Response code: 403 Forbidden). This is most probably caused by trying to upload an expired build artifact. All
|
|
27
|
+
[SubmissionErrorCode.ARCHIVE_DOWNLOAD_FORBIDDEN_ERROR]: 'Failed to download the archive file (Response code: 403 Forbidden). This is most probably caused by trying to upload an expired build artifact. All EAS build artifacts expire after 30 days.',
|
|
27
28
|
[SubmissionErrorCode.ARCHIVE_EXTRACT_CORRUPT_ARCHIVE_ERROR]: 'The compressed archive is corrupt, in an unsupported format, or contains an invalid application format. Supported files include .apk, .aab, and .ipa files and one of these files compressed into a .tar.gz archive.',
|
|
28
29
|
[SubmissionErrorCode.ARCHIVE_EXTRACT_NO_FILES_FOUND_ERROR]: "EAS Submit couldn't find a valid build artifact within provided compressed archive.\n" +
|
|
29
30
|
'If you provide a tar.gz archive, it should contain at least one .apk/.aab/.ipa file, depending on the submission platform.',
|
|
@@ -32,7 +33,7 @@ const SubmissionErrorMessages = {
|
|
|
32
33
|
`${(0, log_1.learnMore)('https://expo.fyi/first-android-submission')}.`,
|
|
33
34
|
[SubmissionErrorCode.ANDROID_OLD_VERSION_CODE_ERROR]: "You've already submitted this version of the app.\n" +
|
|
34
35
|
'Versions are identified by Android version code (expo.android.versionCode in app.json).\n' +
|
|
35
|
-
"If you're submitting a managed Expo project, increment the version code in app.json and build the project with
|
|
36
|
+
"If you're submitting a managed Expo project, increment the version code in app.json and build the project with eas build.\n" +
|
|
36
37
|
`${(0, log_1.learnMore)('https://expo.fyi/bumping-android-version-code')}.`,
|
|
37
38
|
[SubmissionErrorCode.ANDROID_MISSING_PRIVACY_POLICY]: 'The app has permissions that require a privacy policy set for the app.\n' +
|
|
38
39
|
`${(0, log_1.learnMore)('https://expo.fyi/missing-privacy-policy')}.`,
|
|
@@ -52,6 +53,9 @@ const SubmissionErrorMessages = {
|
|
|
52
53
|
"If you're submitting a managed Expo project, set the `expo.ios.requireFullScreen` to true in app.json and build the project again.\n" +
|
|
53
54
|
`${(0, log_1.learnMore)('https://expo.fyi/ipad-requires-fullscreen')}`,
|
|
54
55
|
[SubmissionErrorCode.IOS_APPLE_MAINTENANCE]: 'It looks like Apple servers are undergoing an unscheduled maintenance. Please try again later.',
|
|
56
|
+
[SubmissionErrorCode.IOS_INVALID_PROVISIONING_PROFILE_SIGNATURE]: 'Invalid Provisioning Profile Signature (ITMS-90165)\n' +
|
|
57
|
+
"Some of Apple's certificates have expired.\n" +
|
|
58
|
+
'Please delete your Provisioning Profile from your account. Then rebuild the app interactively to generate a new one, and try submitting it to the App Store again.',
|
|
55
59
|
};
|
|
56
60
|
function printSubmissionError(error) {
|
|
57
61
|
if (error.errorCode &&
|
|
@@ -18,11 +18,6 @@ export declare function getKeyAndCertificateFromPathsAsync({ codeSigningCertific
|
|
|
18
18
|
privateKey: PKI.rsa.PrivateKey;
|
|
19
19
|
certificate: PKI.Certificate;
|
|
20
20
|
}>;
|
|
21
|
-
export declare type MultipartPart = {
|
|
22
|
-
headers: Map<string, string>;
|
|
23
|
-
body: string;
|
|
24
|
-
};
|
|
25
|
-
export declare function parseMultipartMixedResponseAsync(res: Response): Promise<MultipartPart[]>;
|
|
26
21
|
export declare function getManifestBodyAsync(res: Response): Promise<string | null>;
|
|
27
22
|
export declare function signManifestBody(body: string, codeSigningInfo: CodeSigningInfo): string;
|
|
28
23
|
export declare function checkManifestBodyAgainstUpdateInfoGroup(manifestResponseBody: string, partialManifest: PartialManifest): void;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkManifestBodyAgainstUpdateInfoGroup = exports.signManifestBody = exports.getManifestBodyAsync = exports.
|
|
3
|
+
exports.checkManifestBodyAgainstUpdateInfoGroup = exports.signManifestBody = exports.getManifestBodyAsync = exports.getKeyAndCertificateFromPathsAsync = exports.getCodeSigningInfoAsync = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const code_signing_certificates_1 = require("@expo/code-signing-certificates");
|
|
6
|
-
const
|
|
6
|
+
const multipart_body_parser_1 = require("@expo/multipart-body-parser");
|
|
7
7
|
const fast_deep_equal_1 = tslib_1.__importDefault(require("fast-deep-equal"));
|
|
8
8
|
const fs_1 = require("fs");
|
|
9
9
|
const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
|
|
10
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
11
|
-
const stream_1 = require("stream");
|
|
12
|
-
const structured_headers_1 = require("structured-headers");
|
|
13
10
|
async function getCodeSigningInfoAsync(config, privateKeyPath) {
|
|
14
11
|
var _a, _b;
|
|
15
12
|
const codeSigningCertificatePath = (_a = config.updates) === null || _a === void 0 ? void 0 : _a.codeSigningCertificate;
|
|
@@ -17,7 +14,7 @@ async function getCodeSigningInfoAsync(config, privateKeyPath) {
|
|
|
17
14
|
return undefined;
|
|
18
15
|
}
|
|
19
16
|
if (!privateKeyPath) {
|
|
20
|
-
|
|
17
|
+
throw new Error('Must specify --private-key-path argument to sign update for code signing');
|
|
21
18
|
}
|
|
22
19
|
const codeSigningMetadata = (_b = config.updates) === null || _b === void 0 ? void 0 : _b.codeSigningMetadata;
|
|
23
20
|
if (!codeSigningMetadata) {
|
|
@@ -27,18 +24,16 @@ async function getCodeSigningInfoAsync(config, privateKeyPath) {
|
|
|
27
24
|
if (!alg || !keyid) {
|
|
28
25
|
throw new Error('Must specify keyid and alg in the codeSigningMetadata field under the "updates" field of your app config file to use EAS code signing');
|
|
29
26
|
}
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
: undefined;
|
|
27
|
+
return {
|
|
28
|
+
...(await getKeyAndCertificateFromPathsAsync({
|
|
29
|
+
codeSigningCertificatePath,
|
|
30
|
+
privateKeyPath,
|
|
31
|
+
})),
|
|
32
|
+
codeSigningMetadata: {
|
|
33
|
+
alg,
|
|
34
|
+
keyid,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
42
37
|
}
|
|
43
38
|
exports.getCodeSigningInfoAsync = getCodeSigningInfoAsync;
|
|
44
39
|
async function readFileAsync(path, errorMessage) {
|
|
@@ -66,59 +61,15 @@ async function getKeyAndCertificateFromPathsAsync({ codeSigningCertificatePath,
|
|
|
66
61
|
};
|
|
67
62
|
}
|
|
68
63
|
exports.getKeyAndCertificateFromPathsAsync = getKeyAndCertificateFromPathsAsync;
|
|
69
|
-
async function
|
|
64
|
+
async function getManifestBodyAsync(res) {
|
|
70
65
|
var _a;
|
|
71
66
|
const contentType = res.headers.get('content-type');
|
|
72
67
|
if (!contentType) {
|
|
73
68
|
throw new Error('The multipart manifest response is missing the content-type header');
|
|
74
69
|
}
|
|
75
|
-
const boundaryRegex = /^multipart\/.+?; boundary=(?:"([^"]+)"|([^\s;]+))/i;
|
|
76
|
-
const matches = boundaryRegex.exec(contentType);
|
|
77
|
-
if (!matches) {
|
|
78
|
-
throw new Error('The content-type header in the HTTP response is not a multipart media type');
|
|
79
|
-
}
|
|
80
|
-
const boundary = (_a = matches[1]) !== null && _a !== void 0 ? _a : matches[2];
|
|
81
70
|
const bodyBuffer = await res.arrayBuffer();
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
return await new Promise((resolve, reject) => {
|
|
85
|
-
const parts = [];
|
|
86
|
-
bufferStream.pipe(new dicer_1.default({ boundary })
|
|
87
|
-
.on('part', p => {
|
|
88
|
-
const part = {
|
|
89
|
-
body: '',
|
|
90
|
-
headers: new Map(),
|
|
91
|
-
};
|
|
92
|
-
p.on('header', headers => {
|
|
93
|
-
for (const h in headers) {
|
|
94
|
-
part.headers.set(h, headers[h][0]);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
p.on('data', data => {
|
|
98
|
-
part.body += data.toString();
|
|
99
|
-
});
|
|
100
|
-
p.on('end', () => {
|
|
101
|
-
parts.push(part);
|
|
102
|
-
});
|
|
103
|
-
})
|
|
104
|
-
.on('finish', () => {
|
|
105
|
-
resolve(parts);
|
|
106
|
-
})
|
|
107
|
-
.on('error', error => {
|
|
108
|
-
reject(error);
|
|
109
|
-
}));
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
exports.parseMultipartMixedResponseAsync = parseMultipartMixedResponseAsync;
|
|
113
|
-
function isManifestMultipartPart(multipartPart) {
|
|
114
|
-
const [, parameters] = (0, structured_headers_1.parseItem)((0, nullthrows_1.default)(multipartPart.headers.get('content-disposition')));
|
|
115
|
-
const partName = parameters.get('name');
|
|
116
|
-
return partName === 'manifest';
|
|
117
|
-
}
|
|
118
|
-
async function getManifestBodyAsync(res) {
|
|
119
|
-
var _a;
|
|
120
|
-
const multipartParts = await parseMultipartMixedResponseAsync(res);
|
|
121
|
-
const manifestPart = multipartParts.find(isManifestMultipartPart);
|
|
71
|
+
const multipartParts = await (0, multipart_body_parser_1.parseMultipartMixedResponseAsync)(contentType, Buffer.from(bodyBuffer));
|
|
72
|
+
const manifestPart = multipartParts.find(part => (0, multipart_body_parser_1.isMultipartPartWithName)(part, 'manifest'));
|
|
122
73
|
return (_a = manifestPart === null || manifestPart === void 0 ? void 0 : manifestPart.body) !== null && _a !== void 0 ? _a : null;
|
|
123
74
|
}
|
|
124
75
|
exports.getManifestBodyAsync = getManifestBodyAsync;
|
package/oclif.manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.49.0","commands":{"analytics":{"id":"analytics","description":"display or change analytics settings","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"display project configuration (app.json + eas.json)","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"credentials":{"id":"credentials","description":"manage credentials","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"display environment info","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit app binary to App Store and/or Play Store","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false,"exclusive":["id","path","url"]},"id":{"name":"id","type":"option","description":"ID of the build to submit","multiple":false,"exclusive":["latest, path, url"]},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file","multiple":false,"exclusive":["latest","id","url"]},"url":{"name":"url","type":"option","description":"App archive url","multiple":false,"exclusive":["latest","id","path"]},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"account:login":{"id":"account:login","description":"log in with your Expo account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"create a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}],"_globalFlags":{}},"branch:delete":{"id":"branch:delete","description":"delete a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}],"_globalFlags":{}},"branch:list":{"id":"branch:list","description":"list all branches","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[],"_globalFlags":{}},"branch:publish":{"id":"branch:publish","description":"deprecated, use \"eas update\"","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{},"args":[]},"branch:rename":{"id":"branch:rename","description":"rename a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false,"multiple":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false,"multiple":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[],"_globalFlags":{}},"branch:view":{"id":"branch:view","description":"view a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}],"_globalFlags":{}},"build:cancel":{"id":"build:cancel","description":"cancel a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"configure the project to support EAS Build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]}},"args":[],"_globalFlags":{}},"build":{"id":"build","description":"start a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","hidden":true,"allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"output":{"name":"output","type":"option","description":"Output path for local build","multiple":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false,"exclusive":["auto-submit-with-profile"]},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME","multiple":false,"exclusive":["auto-submit"]}},"args":[],"_globalFlags":{}},"build:inspect":{"id":"build:inspect","description":"inspect the state of the project at specific build stages, useful for troubleshooting","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","required":true,"helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"stage":{"name":"stage","type":"option","char":"s","description":"Stage of the build you want to inspect.\n archive - builds the project archive that would be uploaded to EAS when building\n pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.\n post-build - builds the native project and leaves the output directory for inspection","required":true,"helpValue":"(archive|pre-build|post-build)","multiple":false,"options":["archive","pre-build","post-build"]},"output":{"name":"output","type":"option","char":"o","description":"Output directory.","required":true,"helpValue":"OUTPUT_DIRECTORY","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete OUTPUT_DIRECTORY if it already exists.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"_globalFlags":{}},"build:list":{"id":"build:list","description":"list all builds for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","multiple":false,"options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","multiple":false,"options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","multiple":false,"options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option","multiple":false},"appVersion":{"name":"appVersion","type":"option","multiple":false},"appBuildVersion":{"name":"appBuildVersion","type":"option","multiple":false},"sdkVersion":{"name":"sdkVersion","type":"option","multiple":false},"runtimeVersion":{"name":"runtimeVersion","type":"option","multiple":false},"appIdentifier":{"name":"appIdentifier","type":"option","multiple":false},"buildProfile":{"name":"buildProfile","type":"option","multiple":false},"gitCommitHash":{"name":"gitCommitHash","type":"option","multiple":false},"limit":{"name":"limit","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"build:view":{"id":"build:view","description":"view a build for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}],"_globalFlags":{}},"channel:create":{"id":"channel:create","description":"create a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}],"_globalFlags":{}},"channel:delete":{"id":"channel:delete","description":"Delete a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object","allowNo":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to delete","required":false}],"_globalFlags":{}},"channel:edit":{"id":"channel:edit","description":"point a channel at a new branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to","multiple":false},"json":{"name":"json","type":"boolean","description":"Print output as a JSON object with the channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}],"_globalFlags":{}},"channel:list":{"id":"channel:list","description":"list all channels","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[],"_globalFlags":{}},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false,"multiple":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false,"multiple":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}],"_globalFlags":{}},"channel:view":{"id":"channel:view","description":"view a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}],"_globalFlags":{}},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:delete":{"id":"device:delete","description":"remove a registered device from your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false},"udid":{"name":"udid","type":"option","multiple":true}},"args":[],"_globalFlags":{}},"device:list":{"id":"device:list","description":"list all registered devices for your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"device:view":{"id":"device:view","description":"view a device for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"create an environment secret on the current project or owner account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","multiple":false,"options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret","multiple":false},"value":{"name":"value","type":"option","description":"Value of the secret","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[],"_globalFlags":{}},"secret:delete":{"id":"secret:delete","description":"delete an environment secret by ID","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete","multiple":false}},"args":[],"_globalFlags":{}},"secret:list":{"id":"secret:list","description":"list environment secrets available for your current app","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:configure":{"id":"update:configure","description":"configure the project to support EAS Update","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"}},"args":[],"_globalFlags":{}},"update:delete":{"id":"update:delete","description":"delete all the updates in an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}],"_globalFlags":{}},"update":{"id":"update","description":"publish an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Branch to publish the update group on","required":false,"multiple":false},"message":{"name":"message","type":"option","description":"A short message describing the update","required":false,"multiple":false},"republish":{"name":"republish","type":"boolean","description":"Republish an update group","allowNo":false,"exclusive":["input-dir","skip-bundler"]},"group":{"name":"group","type":"option","description":"Update group to republish","multiple":false,"exclusive":["input-dir","skip-bundler"]},"input-dir":{"name":"input-dir","type":"option","description":"Location of the bundle","required":false,"multiple":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"Skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","required":false,"helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"Use the current git branch and commit message for the EAS branch and update message","allowNo":false},"private-key-path":{"name":"private-key-path","type":"option","description":"File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named \"private-key.pem\" in the certificate's directory.","required":false,"multiple":false}},"args":[],"_globalFlags":{}},"update:list":{"id":"update:list","description":"view the recent updates for a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"List all updates on this branch","multiple":false,"exclusive":["all"]},"all":{"name":"all","type":"boolean","description":"List all updates associated with this project","allowNo":false,"exclusive":["branch"]},"json":{"name":"json","type":"boolean","description":"Return a json with all of the recent update groups.","allowNo":false}},"args":[],"_globalFlags":{}},"update:view":{"id":"update:view","description":"update group details","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}],"_globalFlags":{}},"webhook:create":{"id":"webhook:create","description":"create a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:delete":{"id":"webhook:delete","description":"delete a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"list webhooks","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]}},"args":[],"_globalFlags":{}},"webhook:update":{"id":"webhook:update","description":"update a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true,"multiple":false},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:view":{"id":"webhook:view","description":"view a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
|
|
1
|
+
{"version":"0.52.0","commands":{"analytics":{"id":"analytics","description":"display or change analytics settings","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"display project configuration (app.json + eas.json)","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"credentials":{"id":"credentials","description":"manage credentials","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"display environment info","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit app binary to App Store and/or Play Store","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false,"exclusive":["id","path","url"]},"id":{"name":"id","type":"option","description":"ID of the build to submit","multiple":false,"exclusive":["latest, path, url"]},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file","multiple":false,"exclusive":["latest","id","url"]},"url":{"name":"url","type":"option","description":"App archive url","multiple":false,"exclusive":["latest","id","path"]},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"account:login":{"id":"account:login","description":"log in with your Expo account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"create a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}],"_globalFlags":{}},"branch:delete":{"id":"branch:delete","description":"delete a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}],"_globalFlags":{}},"branch:list":{"id":"branch:list","description":"list all branches","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[],"_globalFlags":{}},"branch:publish":{"id":"branch:publish","description":"deprecated, use \"eas update\"","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{},"args":[]},"branch:rename":{"id":"branch:rename","description":"rename a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false,"multiple":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false,"multiple":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[],"_globalFlags":{}},"branch:view":{"id":"branch:view","description":"view a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}],"_globalFlags":{}},"build:cancel":{"id":"build:cancel","description":"cancel a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"configure the project to support EAS Build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]}},"args":[],"_globalFlags":{}},"build":{"id":"build","description":"start a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","hidden":true,"allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"output":{"name":"output","type":"option","description":"Output path for local build","multiple":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false,"exclusive":["auto-submit-with-profile"]},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME","multiple":false,"exclusive":["auto-submit"]}},"args":[],"_globalFlags":{}},"build:inspect":{"id":"build:inspect","description":"inspect the state of the project at specific build stages, useful for troubleshooting","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","required":true,"helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME","multiple":false},"stage":{"name":"stage","type":"option","char":"s","description":"Stage of the build you want to inspect.\n archive - builds the project archive that would be uploaded to EAS when building\n pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.\n post-build - builds the native project and leaves the output directory for inspection","required":true,"helpValue":"(archive|pre-build|post-build)","multiple":false,"options":["archive","pre-build","post-build"]},"output":{"name":"output","type":"option","char":"o","description":"Output directory.","required":true,"helpValue":"OUTPUT_DIRECTORY","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete OUTPUT_DIRECTORY if it already exists.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"_globalFlags":{}},"build:list":{"id":"build:list","description":"list all builds for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","multiple":false,"options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","multiple":false,"options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","multiple":false,"options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option","multiple":false},"appVersion":{"name":"appVersion","type":"option","multiple":false},"appBuildVersion":{"name":"appBuildVersion","type":"option","multiple":false},"sdkVersion":{"name":"sdkVersion","type":"option","multiple":false},"runtimeVersion":{"name":"runtimeVersion","type":"option","multiple":false},"appIdentifier":{"name":"appIdentifier","type":"option","multiple":false},"buildProfile":{"name":"buildProfile","type":"option","multiple":false},"gitCommitHash":{"name":"gitCommitHash","type":"option","multiple":false},"limit":{"name":"limit","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"build:view":{"id":"build:view","description":"view a build for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}],"_globalFlags":{}},"channel:create":{"id":"channel:create","description":"create a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}],"_globalFlags":{}},"channel:delete":{"id":"channel:delete","description":"Delete a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object","allowNo":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to delete","required":false}],"_globalFlags":{}},"channel:edit":{"id":"channel:edit","description":"point a channel at a new branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to","multiple":false},"json":{"name":"json","type":"boolean","description":"Print output as a JSON object with the channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}],"_globalFlags":{}},"channel:list":{"id":"channel:list","description":"list all channels","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[],"_globalFlags":{}},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false,"multiple":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false,"multiple":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}],"_globalFlags":{}},"channel:view":{"id":"channel:view","description":"view a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}],"_globalFlags":{}},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:delete":{"id":"device:delete","description":"remove a registered device from your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false},"udid":{"name":"udid","type":"option","multiple":true}},"args":[],"_globalFlags":{}},"device:list":{"id":"device:list","description":"list all registered devices for your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"device:view":{"id":"device:view","description":"view a device for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"create an environment secret on the current project or owner account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","multiple":false,"options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret","multiple":false},"value":{"name":"value","type":"option","description":"Value of the secret","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[],"_globalFlags":{}},"secret:delete":{"id":"secret:delete","description":"delete an environment secret by ID","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete","multiple":false}},"args":[],"_globalFlags":{}},"secret:list":{"id":"secret:list","description":"list environment secrets available for your current app","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:configure":{"id":"update:configure","description":"configure the project to support EAS Update","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"}},"args":[],"_globalFlags":{}},"update:delete":{"id":"update:delete","description":"delete all the updates in an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}],"_globalFlags":{}},"update":{"id":"update","description":"publish an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Branch to publish the update group on","required":false,"multiple":false},"message":{"name":"message","type":"option","description":"A short message describing the update","required":false,"multiple":false},"republish":{"name":"republish","type":"boolean","description":"Republish an update group","allowNo":false,"exclusive":["input-dir","skip-bundler"]},"group":{"name":"group","type":"option","description":"Update group to republish","multiple":false,"exclusive":["input-dir","skip-bundler"]},"input-dir":{"name":"input-dir","type":"option","description":"Location of the bundle","required":false,"multiple":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"Skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","required":false,"helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"Use the current git branch and commit message for the EAS branch and update message","allowNo":false},"private-key-path":{"name":"private-key-path","type":"option","description":"File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named \"private-key.pem\" in the certificate's directory.","required":false,"multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"update:list":{"id":"update:list","description":"view the recent updates for a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"List all updates on this branch","multiple":false,"exclusive":["all"]},"all":{"name":"all","type":"boolean","description":"List all updates associated with this project","allowNo":false,"exclusive":["branch"]},"json":{"name":"json","type":"boolean","description":"Return a json with all of the recent update groups.","allowNo":false}},"args":[],"_globalFlags":{}},"update:view":{"id":"update:view","description":"update group details","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}],"_globalFlags":{}},"webhook:create":{"id":"webhook:create","description":"create a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:delete":{"id":"webhook:delete","description":"delete a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"list webhooks","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]}},"args":[],"_globalFlags":{}},"webhook:update":{"id":"webhook:update","description":"update a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true,"multiple":false},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:view":{"id":"webhook:view","description":"view a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
|