eas-cli 10.2.4 → 11.0.1
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 +63 -65
- package/build/branch/actions/SelectBranch.d.ts +1 -1
- package/build/branch/actions/SelectBranch.js +2 -2
- package/build/branch/queries.js +3 -1
- package/build/build/android/build.js +1 -1
- package/build/build/android/version.js +1 -1
- package/build/build/build.js +21 -10
- package/build/build/context.d.ts +1 -0
- package/build/build/createContext.d.ts +2 -1
- package/build/build/createContext.js +6 -3
- package/build/build/evaluateConfigWithEnvVarsAsync.d.ts +16 -0
- package/build/build/evaluateConfigWithEnvVarsAsync.js +44 -0
- package/build/build/ios/build.js +4 -4
- package/build/build/local.d.ts +1 -1
- package/build/build/local.js +2 -1
- package/build/build/queries.js +3 -1
- package/build/build/runBuildAndSubmit.d.ts +2 -0
- package/build/build/runBuildAndSubmit.js +14 -7
- package/build/build/utils/printBuildInfo.js +6 -2
- package/build/build/validate.js +2 -2
- package/build/channel/actions/SelectChannel.d.ts +1 -1
- package/build/channel/actions/SelectChannel.js +2 -2
- package/build/channel/queries.js +6 -2
- package/build/commandUtils/EasCommand.js +2 -2
- package/build/commandUtils/context/contextUtils/createGraphqlClient.js +1 -1
- package/build/commandUtils/flags.d.ts +3 -0
- package/build/commandUtils/flags.js +15 -1
- package/build/commandUtils/gating/FeatureGating.js +6 -2
- package/build/commands/analytics.js +1 -1
- package/build/commands/build/index.d.ts +4 -1
- package/build/commands/build/index.js +3 -0
- package/build/commands/build/resign.d.ts +4 -1
- package/build/commands/build/resign.js +12 -3
- package/build/commands/build/version/get.d.ts +1 -0
- package/build/commands/build/version/get.js +9 -2
- package/build/commands/build/version/set.d.ts +1 -0
- package/build/commands/build/version/set.js +11 -1
- package/build/commands/build/version/sync.d.ts +1 -0
- package/build/commands/build/version/sync.js +13 -5
- package/build/commands/config.d.ts +2 -0
- package/build/commands/config.js +17 -5
- package/build/commands/device/delete.js +1 -1
- package/build/commands/device/rename.js +1 -1
- package/build/commands/env/create.js +7 -2
- package/build/commands/env/delete.js +5 -2
- package/build/commands/env/get.js +12 -4
- package/build/commands/env/link.js +3 -1
- package/build/commands/env/list.d.ts +4 -2
- package/build/commands/env/list.js +31 -4
- package/build/commands/env/pull.d.ts +15 -0
- package/build/commands/env/pull.js +64 -0
- package/build/commands/env/push.d.ts +17 -0
- package/build/commands/env/push.js +148 -0
- package/build/commands/env/unlink.js +4 -1
- package/build/commands/env/update.js +7 -2
- package/build/commands/metadata/lint.js +4 -2
- package/build/commands/project/onboarding.js +1 -1
- package/build/commands/update/edit.d.ts +19 -0
- package/build/commands/update/edit.js +102 -0
- package/build/commands/update/index.d.ts +1 -2
- package/build/commands/update/index.js +53 -25
- package/build/commands/update/list.js +6 -3
- package/build/commands/update/roll-back-to-embedded.js +1 -1
- package/build/credentials/android/AndroidCredentialsProvider.d.ts +2 -2
- package/build/credentials/android/actions/AssignFcm.d.ts +1 -1
- package/build/credentials/android/actions/AssignGoogleServiceAccountKeyForFcmV1.d.ts +1 -1
- package/build/credentials/android/actions/AssignGoogleServiceAccountKeyForSubmissions.d.ts +1 -1
- package/build/credentials/android/actions/CreateFcm.d.ts +1 -1
- package/build/credentials/android/actions/CreateGoogleServiceAccountKey.d.ts +1 -1
- package/build/credentials/android/actions/CreateKeystore.d.ts +1 -1
- package/build/credentials/android/actions/DownloadKeystore.d.ts +2 -2
- package/build/credentials/android/actions/RemoveFcm.d.ts +1 -1
- package/build/credentials/android/actions/RemoveGoogleServiceAccountKey.d.ts +2 -2
- package/build/credentials/android/actions/RemoveKeystore.d.ts +1 -1
- package/build/credentials/android/actions/SetUpBuildCredentials.d.ts +1 -1
- package/build/credentials/android/actions/SetUpBuildCredentialsFromCredentialsJson.d.ts +1 -1
- package/build/credentials/android/actions/SetUpGoogleServiceAccountKeyForFcmV1.d.ts +1 -1
- package/build/credentials/android/actions/SetUpGoogleServiceAccountKeyForSubmissions.d.ts +1 -1
- package/build/credentials/android/actions/UseExistingGoogleServiceAccountKey.d.ts +1 -1
- package/build/credentials/android/api/GraphqlClient.js +3 -3
- package/build/credentials/context.d.ts +2 -2
- package/build/credentials/context.js +1 -1
- package/build/credentials/ios/IosCredentialsProvider.d.ts +2 -2
- package/build/credentials/ios/IosCredentialsProvider.js +1 -1
- package/build/credentials/ios/actions/AscApiKeyUtils.js +1 -1
- package/build/credentials/ios/actions/AssignAscApiKey.d.ts +1 -1
- package/build/credentials/ios/actions/AssignPushKey.d.ts +1 -1
- package/build/credentials/ios/actions/ConfigureProvisioningProfile.d.ts +4 -4
- package/build/credentials/ios/actions/CreateAscApiKey.d.ts +1 -1
- package/build/credentials/ios/actions/CreateDistributionCertificate.d.ts +1 -1
- package/build/credentials/ios/actions/CreateProvisioningProfile.d.ts +3 -3
- package/build/credentials/ios/actions/CreatePushKey.d.ts +1 -1
- package/build/credentials/ios/actions/DistributionCertificateUtils.js +5 -5
- package/build/credentials/ios/actions/ProvisioningProfileUtils.js +1 -1
- package/build/credentials/ios/actions/PushKeyUtils.js +2 -2
- package/build/credentials/ios/actions/RemoveAscApiKey.d.ts +2 -2
- package/build/credentials/ios/actions/RemoveDistributionCertificate.d.ts +3 -3
- package/build/credentials/ios/actions/RemoveProvisioningProfile.d.ts +2 -2
- package/build/credentials/ios/actions/RemovePushKey.d.ts +2 -2
- package/build/credentials/ios/actions/SetUpAdhocProvisioningProfile.d.ts +1 -1
- package/build/credentials/ios/actions/SetUpAdhocProvisioningProfile.js +1 -1
- package/build/credentials/ios/actions/SetUpAscApiKey.d.ts +2 -2
- package/build/credentials/ios/actions/SetUpBuildCredentials.d.ts +1 -1
- package/build/credentials/ios/actions/SetUpBuildCredentialsFromCredentialsJson.d.ts +3 -3
- package/build/credentials/ios/actions/SetUpDistributionCertificate.d.ts +2 -2
- package/build/credentials/ios/actions/SetUpDistributionCertificate.js +1 -1
- package/build/credentials/ios/actions/SetUpInternalProvisioningProfile.d.ts +1 -1
- package/build/credentials/ios/actions/SetUpProvisioningProfile.d.ts +3 -3
- package/build/credentials/ios/actions/SetUpProvisioningProfile.js +1 -1
- package/build/credentials/ios/actions/SetUpPushKey.d.ts +1 -1
- package/build/credentials/ios/actions/SetUpTargetBuildCredentials.d.ts +1 -1
- package/build/credentials/ios/actions/SetUpTargetBuildCredentialsFromCredentialsJson.d.ts +3 -3
- package/build/credentials/ios/actions/UpdateCredentialsJson.d.ts +3 -3
- package/build/credentials/ios/api/GraphqlClient.js +4 -4
- package/build/credentials/ios/appstore/AppStoreApi.js +4 -4
- package/build/credentials/ios/appstore/authenticate.js +1 -1
- package/build/credentials/ios/appstore/bundleId.js +1 -1
- package/build/credentials/ios/appstore/bundleIdCapabilities.js +1 -1
- package/build/credentials/ios/appstore/ensureAppExists.js +1 -1
- package/build/credentials/ios/appstore/keychain.js +8 -6
- package/build/credentials/ios/appstore/provisioningProfile.js +1 -1
- package/build/credentials/ios/appstore/pushKey.js +1 -1
- package/build/credentials/ios/appstore/resolveCredentials.js +2 -2
- package/build/credentials/ios/credentials.js +1 -1
- package/build/credentials/ios/utils/convertHTMLToASCII.js +1 -1
- package/build/credentials/ios/validators/validateProvisioningProfile.js +2 -4
- package/build/credentials/manager/CheckBuildProfileFlagAgainstEasJson.d.ts +3 -3
- package/build/credentials/manager/CreateAndroidBuildCredentials.d.ts +1 -1
- package/build/credentials/manager/ManageAndroid.js +2 -1
- package/build/credentials/manager/ManageIos.js +3 -2
- package/build/credentials/manager/SelectAndroidBuildCredentials.d.ts +2 -2
- package/build/credentials/manager/SelectBuildProfileFromEasJson.d.ts +2 -2
- package/build/credentials/manager/SelectIosDistributionTypeGraphqlFromBuildProfile.d.ts +1 -1
- package/build/credentials/manager/SelectIosDistributionTypeGraphqlFromBuildProfile.js +1 -1
- package/build/credentials/manager/SelectPlatform.js +3 -2
- package/build/credentials/manager/SetDefaultAndroidKeystore.d.ts +1 -1
- package/build/credentials/manager/SetUpAndroidBuildCredentials.d.ts +1 -1
- package/build/credentials/manager/SetUpBuildCredentialsCommandAction.js +3 -2
- package/build/credentials/manager/SetUpIosBuildCredentials.d.ts +1 -1
- package/build/devices/actions/create/action.d.ts +4 -4
- package/build/devices/actions/create/registrationUrlMethod.js +3 -1
- package/build/devices/manager.d.ts +4 -4
- package/build/devices/queries.js +3 -1
- package/build/easMultiselect.js +6 -2
- package/build/graphql/generated.d.ts +342 -33
- package/build/graphql/generated.js +52 -2
- package/build/graphql/mutations/EnvironmentVariableMutation.d.ts +1 -0
- package/build/graphql/mutations/EnvironmentVariableMutation.js +20 -0
- package/build/graphql/mutations/PublishMutation.d.ts +1 -0
- package/build/graphql/mutations/PublishMutation.js +16 -0
- package/build/graphql/queries/BranchQuery.d.ts +7 -1
- package/build/graphql/queries/BranchQuery.js +42 -0
- package/build/graphql/queries/EnvironmentVariablesQuery.d.ts +16 -7
- package/build/graphql/queries/EnvironmentVariablesQuery.js +29 -6
- package/build/graphql/types/Update.js +4 -0
- package/build/metadata/apple/config/reader.js +1 -1
- package/build/metadata/apple/tasks/age-rating.js +1 -1
- package/build/metadata/apple/tasks/app-review-detail.js +2 -1
- package/build/metadata/apple/tasks/app-version.d.ts +1 -1
- package/build/metadata/config/resolve.js +2 -1
- package/build/metadata/errors.js +2 -1
- package/build/metadata/utils/log.js +1 -1
- package/build/metadata/utils/retry.js +1 -1
- package/build/onboarding/runCommand.js +1 -1
- package/build/ora.js +12 -4
- package/build/project/android/applicationId.js +1 -1
- package/build/project/applicationIdentifier.d.ts +3 -2
- package/build/project/applicationIdentifier.js +2 -2
- package/build/project/expoConfig.js +2 -2
- package/build/project/ios/entitlements.js +1 -1
- package/build/project/publish.d.ts +31 -18
- package/build/project/publish.js +61 -37
- package/build/project/resolveRuntimeVersionAsync.d.ts +4 -1
- package/build/project/resolveRuntimeVersionAsync.js +9 -3
- package/build/rollout/actions/CreateRollout.d.ts +2 -2
- package/build/rollout/actions/EditRollout.d.ts +2 -2
- package/build/rollout/actions/EndRollout.d.ts +2 -2
- package/build/rollout/actions/ManageRollout.d.ts +2 -2
- package/build/rollout/actions/NonInteractiveRollout.d.ts +1 -1
- package/build/rollout/actions/RolloutMainMenu.d.ts +1 -1
- package/build/rollout/actions/SelectRuntime.d.ts +3 -3
- package/build/run/android/adb.js +1 -1
- package/build/run/ios/simctl.js +1 -1
- package/build/run/ios/systemRequirements.js +1 -1
- package/build/submit/ArchiveSource.js +15 -15
- package/build/submit/BaseSubmitter.js +2 -2
- package/build/submit/submit.js +1 -1
- package/build/update/android/UpdatesModule.js +1 -1
- package/build/update/configure.d.ts +1 -1
- package/build/update/queries.js +8 -3
- package/build/update/republish.js +2 -1
- package/build/update/utils.d.ts +1 -0
- package/build/update/utils.js +7 -0
- package/build/user/expoSsoLauncher.js +1 -1
- package/build/utils/download.js +2 -2
- package/build/utils/filterAsync.js +1 -1
- package/build/utils/image.js +2 -2
- package/build/utils/progress.js +1 -1
- package/build/utils/promise.js +1 -1
- package/build/utils/queries.js +2 -2
- package/build/vcs/clients/git.d.ts +1 -1
- package/build/vcs/local.d.ts +1 -1
- package/oclif.manifest.json +218 -22
- package/package.json +14 -14
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const dotenv_1 = tslib_1.__importDefault(require("dotenv"));
|
|
7
|
+
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
8
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
9
|
+
const flags_1 = require("../../commandUtils/flags");
|
|
10
|
+
const generated_1 = require("../../graphql/generated");
|
|
11
|
+
const EnvironmentVariableMutation_1 = require("../../graphql/mutations/EnvironmentVariableMutation");
|
|
12
|
+
const EnvironmentVariablesQuery_1 = require("../../graphql/queries/EnvironmentVariablesQuery");
|
|
13
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
14
|
+
const prompts_1 = require("../../prompts");
|
|
15
|
+
class EnvironmentVariablePush extends EasCommand_1.default {
|
|
16
|
+
async runAsync() {
|
|
17
|
+
const { flags } = await this.parse(_a);
|
|
18
|
+
const { environment, path: envPath } = this.validateFlags(flags);
|
|
19
|
+
const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(_a, {
|
|
20
|
+
nonInteractive: false,
|
|
21
|
+
});
|
|
22
|
+
const updateVariables = await this.parseEnvFileAsync(envPath, environment);
|
|
23
|
+
const variableNames = Object.keys(updateVariables);
|
|
24
|
+
const existingVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient, {
|
|
25
|
+
appId: projectId,
|
|
26
|
+
environment,
|
|
27
|
+
filterNames: variableNames,
|
|
28
|
+
});
|
|
29
|
+
const existingDifferentVariables = [];
|
|
30
|
+
// Remove variables that are the same as the ones in the environment
|
|
31
|
+
existingVariables.forEach(variable => {
|
|
32
|
+
const existingVariableUpdate = updateVariables[variable.name];
|
|
33
|
+
if (existingVariableUpdate && existingVariableUpdate.value !== variable.value) {
|
|
34
|
+
existingDifferentVariables.push(variable);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
delete updateVariables[variable.name];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const existingDifferentSharedVariables = existingDifferentVariables.filter(variable => variable.scope === generated_1.EnvironmentVariableScope.Shared);
|
|
41
|
+
if (existingDifferentSharedVariables.length > 0) {
|
|
42
|
+
const existingDifferentSharedVariablesNames = existingDifferentSharedVariables.map(variable => variable.name);
|
|
43
|
+
log_1.default.error('Shared variables cannot be overwritten by eas env:push command.');
|
|
44
|
+
log_1.default.error('Remove them from the env file or unlink them from the project to continue:');
|
|
45
|
+
existingDifferentSharedVariablesNames.forEach(name => {
|
|
46
|
+
log_1.default.error(`- ${name}`);
|
|
47
|
+
});
|
|
48
|
+
throw new Error('Shared variables cannot be overwritten by eas env:push command');
|
|
49
|
+
}
|
|
50
|
+
if (existingDifferentVariables.length > 0) {
|
|
51
|
+
log_1.default.warn('Some variables already exist in the environment.');
|
|
52
|
+
const variableNames = existingDifferentVariables.map(variable => variable.name);
|
|
53
|
+
const confirmationMessage = variableNames.length > 1
|
|
54
|
+
? `The ${variableNames.join(', ')} environment variables already exist in ${environment} environment. Do you want to override them all?`
|
|
55
|
+
: `The ${variableNames[0]} environment variable already exists in ${environment} environment. Do you want to override it?`;
|
|
56
|
+
const confirm = await (0, prompts_1.confirmAsync)({
|
|
57
|
+
message: confirmationMessage,
|
|
58
|
+
});
|
|
59
|
+
let variablesToOverwrite = [];
|
|
60
|
+
if (!confirm && existingDifferentVariables.length === 1) {
|
|
61
|
+
throw new Error('No new variables to push.');
|
|
62
|
+
}
|
|
63
|
+
if (confirm) {
|
|
64
|
+
variablesToOverwrite = existingDifferentVariables.map(variable => variable.name);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const promptResult = await (0, prompts_1.promptAsync)({
|
|
68
|
+
type: 'multiselect',
|
|
69
|
+
name: 'variablesToOverwrite',
|
|
70
|
+
message: 'Select variables to overwrite:',
|
|
71
|
+
// @ts-expect-error property missing from `@types/prompts`
|
|
72
|
+
optionsPerPage: 20,
|
|
73
|
+
choices: existingDifferentVariables.map(variable => ({
|
|
74
|
+
title: `${variable.name}: ${updateVariables[variable.name].value} (was ${variable.value ?? '(secret)'})`,
|
|
75
|
+
value: variable.name,
|
|
76
|
+
})),
|
|
77
|
+
});
|
|
78
|
+
variablesToOverwrite = promptResult.variablesToOverwrite;
|
|
79
|
+
}
|
|
80
|
+
for (const existingVariable of existingVariables) {
|
|
81
|
+
const name = existingVariable.name;
|
|
82
|
+
if (variablesToOverwrite.includes(name)) {
|
|
83
|
+
updateVariables[name]['overwrite'] = true;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
delete updateVariables[name];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Check if any of the sensitive variables already exist in the environment. Prompt the user to overwrite them.
|
|
91
|
+
const existingSensitiveVariables = existingVariables.filter(variable => variable.value === null);
|
|
92
|
+
if (existingSensitiveVariables.length > 0) {
|
|
93
|
+
const existingSensitiveVariablesNames = existingSensitiveVariables.map(variable => `- ${variable.name}`);
|
|
94
|
+
const confirm = await (0, prompts_1.confirmAsync)({
|
|
95
|
+
message: `You are about to overwrite sensitive variables.\n${existingSensitiveVariablesNames.join('\n')}\n Do you want to continue?`,
|
|
96
|
+
});
|
|
97
|
+
if (!confirm) {
|
|
98
|
+
throw new Error('Aborting...');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const variablesToPush = Object.values(updateVariables);
|
|
102
|
+
if (variablesToPush.length === 0) {
|
|
103
|
+
log_1.default.log('No new variables to push.');
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
await EnvironmentVariableMutation_1.EnvironmentVariableMutation.createBulkEnvironmentVariablesForAppAsync(graphqlClient, variablesToPush, projectId);
|
|
107
|
+
log_1.default.log(`Uploaded env file to ${environment} environment.`);
|
|
108
|
+
}
|
|
109
|
+
async parseEnvFileAsync(envPath, environment) {
|
|
110
|
+
if (!(await fs_extra_1.default.exists(envPath))) {
|
|
111
|
+
throw new Error(`File ${envPath} does not exist.`);
|
|
112
|
+
}
|
|
113
|
+
const pushInput = {};
|
|
114
|
+
const variables = dotenv_1.default.parse(await fs_extra_1.default.readFile(envPath, 'utf8'));
|
|
115
|
+
for (const [name, value] of Object.entries(variables)) {
|
|
116
|
+
pushInput[name] = {
|
|
117
|
+
name,
|
|
118
|
+
value,
|
|
119
|
+
environment,
|
|
120
|
+
visibility: name.startsWith('EXPO_SENSITIVE')
|
|
121
|
+
? generated_1.EnvironmentVariableVisibility.Sensitive
|
|
122
|
+
: generated_1.EnvironmentVariableVisibility.Public,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return pushInput;
|
|
126
|
+
}
|
|
127
|
+
validateFlags(flags) {
|
|
128
|
+
if (!flags.environment) {
|
|
129
|
+
throw new Error('Please provide an environment to push the env file to.');
|
|
130
|
+
}
|
|
131
|
+
return { ...flags, environment: flags.environment };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
_a = EnvironmentVariablePush;
|
|
135
|
+
EnvironmentVariablePush.description = 'push env file';
|
|
136
|
+
EnvironmentVariablePush.hidden = true;
|
|
137
|
+
EnvironmentVariablePush.contextDefinition = {
|
|
138
|
+
..._a.ContextOptions.ProjectConfig,
|
|
139
|
+
..._a.ContextOptions.LoggedIn,
|
|
140
|
+
};
|
|
141
|
+
EnvironmentVariablePush.flags = {
|
|
142
|
+
...flags_1.EASEnvironmentFlag,
|
|
143
|
+
path: core_1.Flags.string({
|
|
144
|
+
description: 'Path to the input `.env` file',
|
|
145
|
+
default: '.env.local',
|
|
146
|
+
}),
|
|
147
|
+
};
|
|
148
|
+
exports.default = EnvironmentVariablePush;
|
|
@@ -23,7 +23,10 @@ class EnvironmentVariableUnlink extends EasCommand_1.default {
|
|
|
23
23
|
environment = await (0, prompts_2.promptVariableEnvironmentAsync)(nonInteractive);
|
|
24
24
|
}
|
|
25
25
|
const projectDisplayName = await (0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId);
|
|
26
|
-
const appVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient,
|
|
26
|
+
const appVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient, {
|
|
27
|
+
appId: projectId,
|
|
28
|
+
environment,
|
|
29
|
+
});
|
|
27
30
|
const linkedVariables = appVariables.filter(({ scope }) => scope === generated_1.EnvironmentVariableScope.Shared);
|
|
28
31
|
if (linkedVariables.length === 0) {
|
|
29
32
|
throw new Error(`There are no linked shared env variables for project ${projectDisplayName}`);
|
|
@@ -28,7 +28,10 @@ class EnvironmentVariableUpdate extends EasCommand_1.default {
|
|
|
28
28
|
if (!environment) {
|
|
29
29
|
environment = await (0, prompts_2.promptVariableEnvironmentAsync)(nonInteractive);
|
|
30
30
|
}
|
|
31
|
-
const existingVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient,
|
|
31
|
+
const existingVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient, {
|
|
32
|
+
appId: projectId,
|
|
33
|
+
environment,
|
|
34
|
+
});
|
|
32
35
|
if (!name) {
|
|
33
36
|
name = await (0, prompts_1.selectAsync)('Select variable', existingVariables.map(variable => ({
|
|
34
37
|
title: variable.name,
|
|
@@ -62,7 +65,9 @@ class EnvironmentVariableUpdate extends EasCommand_1.default {
|
|
|
62
65
|
log_1.default.withTick(`Updated variable ${chalk_1.default.bold(name)} on project ${chalk_1.default.bold(projectDisplayName)}.`);
|
|
63
66
|
}
|
|
64
67
|
else if (scope === generated_1.EnvironmentVariableScope.Shared) {
|
|
65
|
-
const sharedVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.sharedAsync(graphqlClient,
|
|
68
|
+
const sharedVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.sharedAsync(graphqlClient, {
|
|
69
|
+
appId: projectId,
|
|
70
|
+
});
|
|
66
71
|
if (!name) {
|
|
67
72
|
name = await (0, prompts_1.selectAsync)('Select variable', sharedVariables.map(variable => ({
|
|
68
73
|
title: variable.name,
|
|
@@ -37,7 +37,8 @@ class MetadataLint extends EasCommand_1.default {
|
|
|
37
37
|
try {
|
|
38
38
|
await (0, resolve_1.loadConfigAsync)({ projectDir, profile: submitProfile });
|
|
39
39
|
if (flags.json) {
|
|
40
|
-
|
|
40
|
+
(0, json_1.printJsonOnlyOutput)([]);
|
|
41
|
+
return;
|
|
41
42
|
}
|
|
42
43
|
log_1.default.log('✅ Store configuration is valid.');
|
|
43
44
|
}
|
|
@@ -46,7 +47,8 @@ class MetadataLint extends EasCommand_1.default {
|
|
|
46
47
|
throw error;
|
|
47
48
|
}
|
|
48
49
|
if (flags.json) {
|
|
49
|
-
|
|
50
|
+
(0, json_1.printJsonOnlyOutput)(error.errors);
|
|
51
|
+
return;
|
|
50
52
|
}
|
|
51
53
|
(0, errors_1.logMetadataValidationError)(error);
|
|
52
54
|
log_1.default.addNewLineIfNone();
|
|
@@ -187,7 +187,7 @@ class Onboarding extends EasCommand_1.default {
|
|
|
187
187
|
log_1.default.log();
|
|
188
188
|
log_1.default.log('🎉 We finished configuring your project.');
|
|
189
189
|
log_1.default.log();
|
|
190
|
-
if (app.githubRepository ||
|
|
190
|
+
if (!!app.githubRepository ||
|
|
191
191
|
actor.preferences.onboarding.environment === generated_1.OnboardingEnvironment.ExpoGo) {
|
|
192
192
|
log_1.default.log('🚀 You can now go back to the website to continue:');
|
|
193
193
|
const url = new URL(`/onboarding/develop/set-up-project-on-your-machine?project=${app.slug}&accountId=${app.ownerAccount.id}`, (0, api_1.getExpoWebsiteBaseUrl)()).toString();
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import EasCommand from '../../commandUtils/EasCommand';
|
|
2
|
+
export default class UpdateEdit extends EasCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static hidden: boolean;
|
|
5
|
+
static args: {
|
|
6
|
+
name: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
description: string;
|
|
9
|
+
}[];
|
|
10
|
+
static flags: {
|
|
11
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
'rollout-percentage': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
14
|
+
};
|
|
15
|
+
static contextDefinition: {
|
|
16
|
+
loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
|
|
17
|
+
};
|
|
18
|
+
runAsync(): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const core_1 = require("@oclif/core");
|
|
6
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
7
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
8
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
9
|
+
const flags_1 = require("../../commandUtils/flags");
|
|
10
|
+
const PublishMutation_1 = require("../../graphql/mutations/PublishMutation");
|
|
11
|
+
const UpdateQuery_1 = require("../../graphql/queries/UpdateQuery");
|
|
12
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
13
|
+
const prompts_1 = require("../../prompts");
|
|
14
|
+
const utils_1 = require("../../update/utils");
|
|
15
|
+
const json_1 = require("../../utils/json");
|
|
16
|
+
class UpdateEdit extends EasCommand_1.default {
|
|
17
|
+
async runAsync() {
|
|
18
|
+
const { args: { groupId }, flags: { 'rollout-percentage': rolloutPercentage, json: jsonFlag, 'non-interactive': nonInteractive, }, } = await this.parse(_a);
|
|
19
|
+
const { loggedIn: { graphqlClient }, } = await this.getContextAsync(_a, { nonInteractive });
|
|
20
|
+
if (jsonFlag) {
|
|
21
|
+
(0, json_1.enableJsonOutput)();
|
|
22
|
+
}
|
|
23
|
+
const proposedUpdatesToEdit = (await UpdateQuery_1.UpdateQuery.viewUpdateGroupAsync(graphqlClient, { groupId })).map(u => ({ updateId: u.id, rolloutPercentage: u.rolloutPercentage }));
|
|
24
|
+
const updatesToEdit = proposedUpdatesToEdit.filter((u) => u.rolloutPercentage !== null && u.rolloutPercentage !== undefined);
|
|
25
|
+
if (updatesToEdit.length === 0) {
|
|
26
|
+
throw new Error('Cannot edit rollout percentage on update group that is not a rollout.');
|
|
27
|
+
}
|
|
28
|
+
const rolloutPercentagesSet = new Set(updatesToEdit.map(u => u.rolloutPercentage));
|
|
29
|
+
if (rolloutPercentagesSet.size !== 1) {
|
|
30
|
+
throw new Error('Cannot edit rollout percentage for a group with non-equal percentages for updates in the group.');
|
|
31
|
+
}
|
|
32
|
+
const previousPercentage = updatesToEdit[0].rolloutPercentage;
|
|
33
|
+
if (nonInteractive && rolloutPercentage === undefined) {
|
|
34
|
+
throw new Error('Must specify --rollout-percentage in non-interactive mode');
|
|
35
|
+
}
|
|
36
|
+
let rolloutPercentageToSet = rolloutPercentage;
|
|
37
|
+
if (rolloutPercentageToSet === undefined) {
|
|
38
|
+
const { percentage } = await (0, prompts_1.promptAsync)({
|
|
39
|
+
type: 'number',
|
|
40
|
+
message: `New rollout percentage (min: ${previousPercentage}, max: 100)`,
|
|
41
|
+
validate: value => {
|
|
42
|
+
if (value <= previousPercentage) {
|
|
43
|
+
return `Rollout percentage must be greater than previous rollout percentage (${previousPercentage})`;
|
|
44
|
+
}
|
|
45
|
+
else if (value > 100) {
|
|
46
|
+
return `Rollout percentage must not be greater than 100`;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
name: 'percentage',
|
|
53
|
+
});
|
|
54
|
+
if (!percentage) {
|
|
55
|
+
log_1.default.log('Aborted.');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
rolloutPercentageToSet = percentage;
|
|
59
|
+
}
|
|
60
|
+
(0, assert_1.default)(rolloutPercentageToSet !== undefined);
|
|
61
|
+
if (rolloutPercentageToSet < previousPercentage) {
|
|
62
|
+
throw new Error(`Rollout percentage must be greater than previous rollout percentage (${previousPercentage})`);
|
|
63
|
+
}
|
|
64
|
+
else if (rolloutPercentageToSet > 100) {
|
|
65
|
+
throw new Error('Rollout percentage must not be greater than 100');
|
|
66
|
+
}
|
|
67
|
+
const updatedUpdates = await Promise.all(updatesToEdit.map(async (u) => {
|
|
68
|
+
return await PublishMutation_1.PublishMutation.setRolloutPercentageAsync(graphqlClient, u.updateId, rolloutPercentageToSet);
|
|
69
|
+
}));
|
|
70
|
+
if (jsonFlag) {
|
|
71
|
+
(0, json_1.printJsonOnlyOutput)((0, utils_1.getUpdateJsonInfosForUpdates)(updatedUpdates));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const [updateGroupDescription] = (0, utils_1.getUpdateGroupDescriptions)([updatedUpdates]);
|
|
75
|
+
log_1.default.log(chalk_1.default.bold('Update group:'));
|
|
76
|
+
log_1.default.log((0, utils_1.formatUpdateGroup)(updateGroupDescription));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
_a = UpdateEdit;
|
|
81
|
+
UpdateEdit.description = 'edit all the updates in an update group';
|
|
82
|
+
UpdateEdit.hidden = true;
|
|
83
|
+
UpdateEdit.args = [
|
|
84
|
+
{
|
|
85
|
+
name: 'groupId',
|
|
86
|
+
required: true,
|
|
87
|
+
description: 'The ID of an update group to edit.',
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
UpdateEdit.flags = {
|
|
91
|
+
'rollout-percentage': core_1.Flags.integer({
|
|
92
|
+
description: `Rollout percentage to set for a rollout update. The specified number must be an integer between 1 and 100.`,
|
|
93
|
+
required: false,
|
|
94
|
+
min: 0,
|
|
95
|
+
max: 100,
|
|
96
|
+
}),
|
|
97
|
+
...flags_1.EasNonInteractiveAndJsonFlags,
|
|
98
|
+
};
|
|
99
|
+
UpdateEdit.contextDefinition = {
|
|
100
|
+
..._a.ContextOptions.LoggedIn,
|
|
101
|
+
};
|
|
102
|
+
exports.default = UpdateEdit;
|
|
@@ -7,12 +7,11 @@ export default class UpdatePublish extends EasCommand {
|
|
|
7
7
|
branch: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
8
8
|
channel: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
9
9
|
message: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
10
|
-
republish: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
-
group: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
12
10
|
'input-dir': import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
13
11
|
'skip-bundler': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
12
|
'clear-cache': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
13
|
'emit-metadata': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
'rollout-percentage': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
16
15
|
platform: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
17
16
|
auto: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
18
17
|
'private-key-path': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
@@ -32,7 +32,7 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
32
32
|
async runAsync() {
|
|
33
33
|
const { flags: rawFlags } = await this.parse(_a);
|
|
34
34
|
const paginatedQueryOptions = (0, pagination_1.getPaginatedQueryOptions)(rawFlags);
|
|
35
|
-
const { auto: autoFlag, platform:
|
|
35
|
+
const { auto: autoFlag, platform: requestedPlatform, channelName: channelNameArg, updateMessage: updateMessageArg, inputDir, skipBundler, clearCache, privateKeyPath, json: jsonFlag, nonInteractive, branchName: branchNameArg, emitMetadata, rolloutPercentage, } = this.sanitizeFlags(rawFlags);
|
|
36
36
|
const { getDynamicPublicProjectConfigAsync, getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, vcsClient, } = await this.getContextAsync(_a, {
|
|
37
37
|
nonInteractive,
|
|
38
38
|
});
|
|
@@ -45,7 +45,7 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
45
45
|
await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
|
|
46
46
|
await (0, configure_1.ensureEASUpdateIsConfiguredAsync)({
|
|
47
47
|
exp: expPossiblyWithoutEasUpdateConfigured,
|
|
48
|
-
platform:
|
|
48
|
+
platform: requestedPlatform,
|
|
49
49
|
projectDir,
|
|
50
50
|
projectId,
|
|
51
51
|
vcsClient,
|
|
@@ -74,7 +74,13 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
74
74
|
if (!skipBundler) {
|
|
75
75
|
const bundleSpinner = (0, ora_1.ora)().start('Exporting...');
|
|
76
76
|
try {
|
|
77
|
-
await (0, publish_1.buildBundlesAsync)({
|
|
77
|
+
await (0, publish_1.buildBundlesAsync)({
|
|
78
|
+
projectDir,
|
|
79
|
+
inputDir,
|
|
80
|
+
exp,
|
|
81
|
+
platformFlag: requestedPlatform,
|
|
82
|
+
clearCache,
|
|
83
|
+
});
|
|
78
84
|
bundleSpinner.succeed('Exported bundle(s)');
|
|
79
85
|
}
|
|
80
86
|
catch (e) {
|
|
@@ -91,7 +97,7 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
91
97
|
let realizedPlatforms = [];
|
|
92
98
|
try {
|
|
93
99
|
const collectedAssets = await (0, publish_1.collectAssetsAsync)(distRoot);
|
|
94
|
-
const assets = (0, publish_1.
|
|
100
|
+
const assets = (0, publish_1.filterCollectedAssetsByRequestedPlatforms)(collectedAssets, requestedPlatform);
|
|
95
101
|
realizedPlatforms = Object.keys(assets);
|
|
96
102
|
// Timeout mechanism:
|
|
97
103
|
// - Start with NO_ACTIVITY_TIMEOUT. 180 seconds is chosen because the cloud function that processes
|
|
@@ -161,7 +167,7 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
161
167
|
for (const uploadedAssetPath of uploadResults.uniqueUploadedAssetPaths) {
|
|
162
168
|
log_1.default.debug(chalk_1.default.dim(`- ${uploadedAssetPath}`));
|
|
163
169
|
}
|
|
164
|
-
const platformString =
|
|
170
|
+
const platformString = realizedPlatforms
|
|
165
171
|
.map(platform => {
|
|
166
172
|
const collectedAssetForPlatform = (0, nullthrows_1.default)(assets[platform]);
|
|
167
173
|
const totalAssetsForPlatform = collectedAssetForPlatform.assets.length + 1; // launch asset
|
|
@@ -191,6 +197,14 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
191
197
|
appId: projectId,
|
|
192
198
|
branchName,
|
|
193
199
|
});
|
|
200
|
+
const runtimeVersionToRolloutInfoGroup = rolloutPercentage !== undefined
|
|
201
|
+
? await (0, publish_1.getRuntimeToUpdateRolloutInfoGroupMappingAsync)(graphqlClient, {
|
|
202
|
+
appId: projectId,
|
|
203
|
+
branchName,
|
|
204
|
+
rolloutPercentage,
|
|
205
|
+
runtimeToPlatformMapping,
|
|
206
|
+
})
|
|
207
|
+
: undefined;
|
|
194
208
|
const gitCommitHash = await vcsClient.getCommitHashAsync();
|
|
195
209
|
const isGitWorkingTreeDirty = await vcsClient.hasUncommittedChangesAsync();
|
|
196
210
|
// Sort the updates into different groups based on their platform specific runtime versions
|
|
@@ -199,9 +213,19 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
199
213
|
platform,
|
|
200
214
|
unsortedUpdateInfoGroups[platform],
|
|
201
215
|
]));
|
|
216
|
+
const rolloutInfoGroupForRuntimeVersion = runtimeVersionToRolloutInfoGroup
|
|
217
|
+
? runtimeVersionToRolloutInfoGroup.get(runtimeVersion)
|
|
218
|
+
: null;
|
|
219
|
+
const localRolloutInfoGroup = rolloutInfoGroupForRuntimeVersion
|
|
220
|
+
? Object.fromEntries(platforms.map(platform => [
|
|
221
|
+
platform,
|
|
222
|
+
rolloutInfoGroupForRuntimeVersion[platform],
|
|
223
|
+
]))
|
|
224
|
+
: null;
|
|
202
225
|
return {
|
|
203
226
|
branchId,
|
|
204
227
|
updateInfoGroup: localUpdateInfoGroup,
|
|
228
|
+
rolloutInfoGroup: localRolloutInfoGroup,
|
|
205
229
|
runtimeVersion,
|
|
206
230
|
message: updateMessage,
|
|
207
231
|
gitCommitHash,
|
|
@@ -281,6 +305,22 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
281
305
|
? [{ label: 'Android update ID', value: newAndroidUpdate.id }]
|
|
282
306
|
: []),
|
|
283
307
|
...(newIosUpdate ? [{ label: 'iOS update ID', value: newIosUpdate.id }] : []),
|
|
308
|
+
...(newAndroidUpdate?.rolloutControlUpdate
|
|
309
|
+
? [
|
|
310
|
+
{
|
|
311
|
+
label: 'Android Rollout',
|
|
312
|
+
value: `${newAndroidUpdate.rolloutPercentage}% (Base update ID: ${newAndroidUpdate.rolloutControlUpdate.id})`,
|
|
313
|
+
},
|
|
314
|
+
]
|
|
315
|
+
: []),
|
|
316
|
+
...(newIosUpdate?.rolloutControlUpdate
|
|
317
|
+
? [
|
|
318
|
+
{
|
|
319
|
+
label: 'iOS Rollout',
|
|
320
|
+
value: `${newIosUpdate.rolloutPercentage}% (Base update ID: ${newIosUpdate.rolloutControlUpdate.id})`,
|
|
321
|
+
},
|
|
322
|
+
]
|
|
323
|
+
: []),
|
|
284
324
|
{ label: 'Message', value: updateMessage ?? '' },
|
|
285
325
|
...(gitCommitHash
|
|
286
326
|
? [
|
|
@@ -310,18 +350,6 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
310
350
|
if (nonInteractive && !auto && !(updateMessage && (branchName || channelName))) {
|
|
311
351
|
core_1.Errors.error('--branch and --message, or --channel and --message are required when updating in non-interactive mode unless --auto is specified', { exit: 1 });
|
|
312
352
|
}
|
|
313
|
-
if (flags.group || flags.republish) {
|
|
314
|
-
// Pick the first flag set that is defined, in this specific order
|
|
315
|
-
const args = [
|
|
316
|
-
['--group', flags.group],
|
|
317
|
-
['--branch', flags.branch],
|
|
318
|
-
].filter(([_, value]) => value)[0];
|
|
319
|
-
log_1.default.newLine();
|
|
320
|
-
log_1.default.warn('The --group and --republish flags are deprecated, use the republish command instead:');
|
|
321
|
-
log_1.default.warn(` ${chalk_1.default.bold([`eas update:republish`, ...(args ?? [])].join(' '))}`);
|
|
322
|
-
log_1.default.newLine();
|
|
323
|
-
core_1.Errors.error('--group and --republish flags are deprecated', { exit: 1 });
|
|
324
|
-
}
|
|
325
353
|
const skipBundler = flags['skip-bundler'] ?? false;
|
|
326
354
|
let emitMetadata = flags['emit-metadata'] ?? false;
|
|
327
355
|
if (skipBundler && emitMetadata) {
|
|
@@ -338,6 +366,7 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
338
366
|
clearCache: flags['clear-cache'],
|
|
339
367
|
platform: flags.platform,
|
|
340
368
|
privateKeyPath: flags['private-key-path'],
|
|
369
|
+
rolloutPercentage: flags['rollout-percentage'],
|
|
341
370
|
nonInteractive,
|
|
342
371
|
emitMetadata,
|
|
343
372
|
json: flags.json ?? false,
|
|
@@ -360,14 +389,6 @@ UpdatePublish.flags = {
|
|
|
360
389
|
description: 'A short message describing the update',
|
|
361
390
|
required: false,
|
|
362
391
|
}),
|
|
363
|
-
republish: core_1.Flags.boolean({
|
|
364
|
-
description: 'Republish an update group (deprecated, see republish command)',
|
|
365
|
-
exclusive: ['input-dir', 'skip-bundler'],
|
|
366
|
-
}),
|
|
367
|
-
group: core_1.Flags.string({
|
|
368
|
-
description: 'Update group to republish (deprecated, see republish command)',
|
|
369
|
-
exclusive: ['input-dir', 'skip-bundler'],
|
|
370
|
-
}),
|
|
371
392
|
'input-dir': core_1.Flags.string({
|
|
372
393
|
description: 'Location of the bundle',
|
|
373
394
|
default: 'dist',
|
|
@@ -385,6 +406,13 @@ UpdatePublish.flags = {
|
|
|
385
406
|
description: `Emit "eas-update-metadata.json" in the bundle folder with detailed information about the generated updates`,
|
|
386
407
|
default: false,
|
|
387
408
|
}),
|
|
409
|
+
'rollout-percentage': core_1.Flags.integer({
|
|
410
|
+
description: `Percentage of users this update should be immediately available to. Users not in the rollout will be served the previous latest update on the branch, even if that update is itself being rolled out. The specified number must be an integer between 1 and 100. When not specified, this defaults to 100.`,
|
|
411
|
+
required: false,
|
|
412
|
+
hidden: true,
|
|
413
|
+
min: 0,
|
|
414
|
+
max: 100,
|
|
415
|
+
}),
|
|
388
416
|
platform: core_1.Flags.enum({
|
|
389
417
|
char: 'p',
|
|
390
418
|
options: [
|
|
@@ -21,11 +21,14 @@ class UpdateList extends EasCommand_1.default {
|
|
|
21
21
|
(0, json_1.enableJsonOutput)();
|
|
22
22
|
}
|
|
23
23
|
if (all) {
|
|
24
|
-
(0, queries_2.listAndRenderUpdateGroupsOnAppAsync)(graphqlClient, {
|
|
24
|
+
await (0, queries_2.listAndRenderUpdateGroupsOnAppAsync)(graphqlClient, {
|
|
25
|
+
projectId,
|
|
26
|
+
paginatedQueryOptions,
|
|
27
|
+
});
|
|
25
28
|
}
|
|
26
29
|
else {
|
|
27
30
|
if (branchFlag) {
|
|
28
|
-
(0, queries_2.listAndRenderUpdateGroupsOnBranchAsync)(graphqlClient, {
|
|
31
|
+
await (0, queries_2.listAndRenderUpdateGroupsOnBranchAsync)(graphqlClient, {
|
|
29
32
|
projectId,
|
|
30
33
|
branchName: branchFlag,
|
|
31
34
|
paginatedQueryOptions,
|
|
@@ -50,7 +53,7 @@ class UpdateList extends EasCommand_1.default {
|
|
|
50
53
|
offset: 0,
|
|
51
54
|
},
|
|
52
55
|
});
|
|
53
|
-
(0, queries_2.listAndRenderUpdateGroupsOnBranchAsync)(graphqlClient, {
|
|
56
|
+
await (0, queries_2.listAndRenderUpdateGroupsOnBranchAsync)(graphqlClient, {
|
|
54
57
|
projectId,
|
|
55
58
|
branchName: selectedBranch.name,
|
|
56
59
|
paginatedQueryOptions,
|
|
@@ -40,7 +40,7 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
|
|
|
40
40
|
await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
|
|
41
41
|
await (0, configure_1.ensureEASUpdateIsConfiguredAsync)({
|
|
42
42
|
exp: expPossiblyWithoutEasUpdateConfigured,
|
|
43
|
-
platform:
|
|
43
|
+
platform: platformFlag,
|
|
44
44
|
projectDir,
|
|
45
45
|
projectId,
|
|
46
46
|
vcsClient,
|
|
@@ -10,8 +10,8 @@ interface Options {
|
|
|
10
10
|
app: AppLookupParams;
|
|
11
11
|
}
|
|
12
12
|
export default class AndroidCredentialsProvider {
|
|
13
|
-
private ctx;
|
|
14
|
-
private options;
|
|
13
|
+
private readonly ctx;
|
|
14
|
+
private readonly options;
|
|
15
15
|
readonly platform = Platform.ANDROID;
|
|
16
16
|
constructor(ctx: CredentialsContext, options: Options);
|
|
17
17
|
getCredentialsAsync(src: CredentialsSource.LOCAL | CredentialsSource.REMOTE): Promise<AndroidCredentials>;
|
|
@@ -2,7 +2,7 @@ import { AndroidFcmFragment, CommonAndroidAppCredentialsFragment } from '../../.
|
|
|
2
2
|
import { CredentialsContext } from '../../context';
|
|
3
3
|
import { AppLookupParams } from '../api/GraphqlClient';
|
|
4
4
|
export declare class AssignFcm {
|
|
5
|
-
private app;
|
|
5
|
+
private readonly app;
|
|
6
6
|
constructor(app: AppLookupParams);
|
|
7
7
|
runAsync(ctx: CredentialsContext, fcm: AndroidFcmFragment): Promise<CommonAndroidAppCredentialsFragment>;
|
|
8
8
|
}
|
|
@@ -2,7 +2,7 @@ import { CommonAndroidAppCredentialsFragment, GoogleServiceAccountKeyFragment }
|
|
|
2
2
|
import { CredentialsContext } from '../../context';
|
|
3
3
|
import { AppLookupParams } from '../api/GraphqlClient';
|
|
4
4
|
export declare class AssignGoogleServiceAccountKeyForFcmV1 {
|
|
5
|
-
private app;
|
|
5
|
+
private readonly app;
|
|
6
6
|
constructor(app: AppLookupParams);
|
|
7
7
|
runAsync(ctx: CredentialsContext, googleServiceAccountKey: GoogleServiceAccountKeyFragment): Promise<CommonAndroidAppCredentialsFragment>;
|
|
8
8
|
}
|
|
@@ -2,7 +2,7 @@ import { CommonAndroidAppCredentialsFragment, GoogleServiceAccountKeyFragment }
|
|
|
2
2
|
import { CredentialsContext } from '../../context';
|
|
3
3
|
import { AppLookupParams } from '../api/GraphqlClient';
|
|
4
4
|
export declare class AssignGoogleServiceAccountKeyForSubmissions {
|
|
5
|
-
private app;
|
|
5
|
+
private readonly app;
|
|
6
6
|
constructor(app: AppLookupParams);
|
|
7
7
|
runAsync(ctx: CredentialsContext, googleServiceAccountKey: GoogleServiceAccountKeyFragment): Promise<CommonAndroidAppCredentialsFragment>;
|
|
8
8
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AccountFragment, AndroidFcmFragment } from '../../../graphql/generated';
|
|
2
2
|
import { CredentialsContext } from '../../context';
|
|
3
3
|
export declare class CreateFcm {
|
|
4
|
-
private account;
|
|
4
|
+
private readonly account;
|
|
5
5
|
constructor(account: AccountFragment);
|
|
6
6
|
runAsync(ctx: CredentialsContext): Promise<AndroidFcmFragment>;
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AccountFragment, GoogleServiceAccountKeyFragment } from '../../../graphql/generated';
|
|
2
2
|
import { CredentialsContext } from '../../context';
|
|
3
3
|
export declare class CreateGoogleServiceAccountKey {
|
|
4
|
-
private account;
|
|
4
|
+
private readonly account;
|
|
5
5
|
constructor(account: AccountFragment);
|
|
6
6
|
runAsync(ctx: CredentialsContext): Promise<GoogleServiceAccountKeyFragment>;
|
|
7
7
|
private provideAsync;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AccountFragment, AndroidKeystoreFragment } from '../../../graphql/generated';
|
|
2
2
|
import { CredentialsContext } from '../../context';
|
|
3
3
|
export declare class CreateKeystore {
|
|
4
|
-
private account;
|
|
4
|
+
private readonly account;
|
|
5
5
|
constructor(account: AccountFragment);
|
|
6
6
|
runAsync(ctx: CredentialsContext): Promise<AndroidKeystoreFragment>;
|
|
7
7
|
private provideOrGenerateAsync;
|
|
@@ -7,12 +7,12 @@ interface DownloadKeystoreOptions {
|
|
|
7
7
|
outputPath?: string;
|
|
8
8
|
}
|
|
9
9
|
export declare class DownloadKeystore {
|
|
10
|
-
private options;
|
|
10
|
+
private readonly options;
|
|
11
11
|
constructor(options: DownloadKeystoreOptions);
|
|
12
12
|
runAsync(ctx: CredentialsContext, buildCredentials: AndroidAppBuildCredentialsFragment): Promise<void>;
|
|
13
13
|
}
|
|
14
14
|
export declare class BackupKeystore {
|
|
15
|
-
private app;
|
|
15
|
+
private readonly app;
|
|
16
16
|
constructor(app: AppLookupParams);
|
|
17
17
|
runAsync(ctx: CredentialsContext, buildCredentials: AndroidAppBuildCredentialsFragment): Promise<void>;
|
|
18
18
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CredentialsContext } from '../../context';
|
|
2
2
|
import { AppLookupParams } from '../api/GraphqlClient';
|
|
3
3
|
export declare class RemoveFcm {
|
|
4
|
-
private app;
|
|
4
|
+
private readonly app;
|
|
5
5
|
constructor(app: AppLookupParams);
|
|
6
6
|
runAsync(ctx: CredentialsContext): Promise<void>;
|
|
7
7
|
}
|