eas-cli 10.2.3 → 11.0.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 +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 +3 -2
- 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 +16 -0
- package/build/commandUtils/flags.js +61 -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 +10 -3
- package/build/commands/device/delete.js +1 -1
- package/build/commands/device/rename.js +1 -1
- package/build/commands/env/create.d.ts +23 -0
- package/build/commands/env/create.js +169 -0
- package/build/commands/env/delete.d.ts +18 -0
- package/build/commands/env/delete.js +95 -0
- package/build/commands/env/get.d.ts +19 -0
- package/build/commands/env/get.js +100 -0
- package/build/commands/env/link.d.ts +15 -0
- package/build/commands/env/link.js +59 -0
- package/build/commands/env/list.d.ts +18 -0
- package/build/commands/env/list.js +82 -0
- 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.d.ts +15 -0
- package/build/commands/env/unlink.js +65 -0
- package/build/commands/env/update.d.ts +21 -0
- package/build/commands/env/update.js +135 -0
- 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 +874 -62
- package/build/graphql/generated.js +92 -2
- package/build/graphql/mutations/EnvironmentVariableMutation.d.ts +39 -0
- package/build/graphql/mutations/EnvironmentVariableMutation.js +133 -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 +22 -0
- package/build/graphql/queries/EnvironmentVariablesQuery.js +106 -0
- package/build/graphql/types/EnvironmentVariable.d.ts +1 -0
- package/build/graphql/types/EnvironmentVariable.js +16 -0
- 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/formatVariable.d.ts +2 -0
- package/build/utils/formatVariable.js +16 -0
- package/build/utils/image.js +2 -2
- package/build/utils/progress.js +1 -1
- package/build/utils/promise.js +1 -1
- package/build/utils/prompts.d.ts +9 -0
- package/build/utils/prompts.js +68 -0
- 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 +627 -22
- package/package.json +15 -15
|
@@ -0,0 +1,65 @@
|
|
|
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 chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
8
|
+
const flags_1 = require("../../commandUtils/flags");
|
|
9
|
+
const generated_1 = require("../../graphql/generated");
|
|
10
|
+
const EnvironmentVariableMutation_1 = require("../../graphql/mutations/EnvironmentVariableMutation");
|
|
11
|
+
const EnvironmentVariablesQuery_1 = require("../../graphql/queries/EnvironmentVariablesQuery");
|
|
12
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
13
|
+
const projectUtils_1 = require("../../project/projectUtils");
|
|
14
|
+
const prompts_1 = require("../../prompts");
|
|
15
|
+
const prompts_2 = require("../../utils/prompts");
|
|
16
|
+
class EnvironmentVariableUnlink extends EasCommand_1.default {
|
|
17
|
+
async runAsync() {
|
|
18
|
+
let { flags: { name, 'non-interactive': nonInteractive, environment }, } = await this.parse(_a);
|
|
19
|
+
const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(_a, {
|
|
20
|
+
nonInteractive,
|
|
21
|
+
});
|
|
22
|
+
if (!environment) {
|
|
23
|
+
environment = await (0, prompts_2.promptVariableEnvironmentAsync)(nonInteractive);
|
|
24
|
+
}
|
|
25
|
+
const projectDisplayName = await (0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId);
|
|
26
|
+
const appVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient, {
|
|
27
|
+
appId: projectId,
|
|
28
|
+
environment,
|
|
29
|
+
});
|
|
30
|
+
const linkedVariables = appVariables.filter(({ scope }) => scope === generated_1.EnvironmentVariableScope.Shared);
|
|
31
|
+
if (linkedVariables.length === 0) {
|
|
32
|
+
throw new Error(`There are no linked shared env variables for project ${projectDisplayName}`);
|
|
33
|
+
}
|
|
34
|
+
if (!name) {
|
|
35
|
+
name = await (0, prompts_1.selectAsync)('Select shared variable to unlink', linkedVariables.map(variable => ({
|
|
36
|
+
title: variable.name,
|
|
37
|
+
value: variable.name,
|
|
38
|
+
})));
|
|
39
|
+
}
|
|
40
|
+
const selectedVariable = linkedVariables.find(variable => variable.name === name);
|
|
41
|
+
if (!selectedVariable) {
|
|
42
|
+
throw new Error(`Shared variable ${name} doesn't exist`);
|
|
43
|
+
}
|
|
44
|
+
const unlinkedVariable = await EnvironmentVariableMutation_1.EnvironmentVariableMutation.unlinkSharedEnvironmentVariableAsync(graphqlClient, selectedVariable.id, projectId, environment);
|
|
45
|
+
if (!unlinkedVariable) {
|
|
46
|
+
throw new Error(`Could not unlink variable with name ${selectedVariable.name} from project ${projectDisplayName}`);
|
|
47
|
+
}
|
|
48
|
+
log_1.default.withTick(`Unlinked variable ${chalk_1.default.bold(unlinkedVariable.name)} from the project ${chalk_1.default.bold(projectDisplayName)}.`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
_a = EnvironmentVariableUnlink;
|
|
52
|
+
EnvironmentVariableUnlink.description = 'unlink a shared environment variable to the current project';
|
|
53
|
+
EnvironmentVariableUnlink.hidden = true;
|
|
54
|
+
EnvironmentVariableUnlink.flags = {
|
|
55
|
+
name: core_1.Flags.string({
|
|
56
|
+
description: 'Name of the variable',
|
|
57
|
+
}),
|
|
58
|
+
...flags_1.EASEnvironmentFlag,
|
|
59
|
+
...flags_1.EASNonInteractiveFlag,
|
|
60
|
+
};
|
|
61
|
+
EnvironmentVariableUnlink.contextDefinition = {
|
|
62
|
+
..._a.ContextOptions.ProjectConfig,
|
|
63
|
+
..._a.ContextOptions.LoggedIn,
|
|
64
|
+
};
|
|
65
|
+
exports.default = EnvironmentVariableUnlink;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import EasCommand from '../../commandUtils/EasCommand';
|
|
2
|
+
import { EnvironmentVariableScope, EnvironmentVariableVisibility } from '../../graphql/generated';
|
|
3
|
+
export default class EnvironmentVariableUpdate extends EasCommand {
|
|
4
|
+
static description: string;
|
|
5
|
+
static hidden: boolean;
|
|
6
|
+
static flags: {
|
|
7
|
+
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
environment: import("@oclif/core/lib/interfaces").OptionFlag<import("../../graphql/generated").EnvironmentVariableEnvironment | undefined>;
|
|
9
|
+
scope: import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentVariableScope>;
|
|
10
|
+
visibility: import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentVariableVisibility | undefined>;
|
|
11
|
+
name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
12
|
+
value: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
13
|
+
};
|
|
14
|
+
static contextDefinition: {
|
|
15
|
+
loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
|
|
16
|
+
analytics: import("../../commandUtils/context/AnalyticsContextField").default;
|
|
17
|
+
privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
|
|
18
|
+
};
|
|
19
|
+
runAsync(): Promise<void>;
|
|
20
|
+
private validateFlags;
|
|
21
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
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 chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
8
|
+
const flags_1 = require("../../commandUtils/flags");
|
|
9
|
+
const generated_1 = require("../../graphql/generated");
|
|
10
|
+
const EnvironmentVariableMutation_1 = require("../../graphql/mutations/EnvironmentVariableMutation");
|
|
11
|
+
const EnvironmentVariablesQuery_1 = require("../../graphql/queries/EnvironmentVariablesQuery");
|
|
12
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
13
|
+
const projectUtils_1 = require("../../project/projectUtils");
|
|
14
|
+
const prompts_1 = require("../../prompts");
|
|
15
|
+
const prompts_2 = require("../../utils/prompts");
|
|
16
|
+
class EnvironmentVariableUpdate extends EasCommand_1.default {
|
|
17
|
+
async runAsync() {
|
|
18
|
+
const { flags } = await this.parse(_a);
|
|
19
|
+
let { name, value, scope, 'non-interactive': nonInteractive, environment, visibility, } = this.validateFlags(flags);
|
|
20
|
+
const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(_a, {
|
|
21
|
+
nonInteractive,
|
|
22
|
+
});
|
|
23
|
+
const [projectDisplayName, ownerAccount] = await Promise.all([
|
|
24
|
+
(0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId),
|
|
25
|
+
(0, projectUtils_1.getOwnerAccountForProjectIdAsync)(graphqlClient, projectId),
|
|
26
|
+
]);
|
|
27
|
+
if (scope === generated_1.EnvironmentVariableScope.Project) {
|
|
28
|
+
if (!environment) {
|
|
29
|
+
environment = await (0, prompts_2.promptVariableEnvironmentAsync)(nonInteractive);
|
|
30
|
+
}
|
|
31
|
+
const existingVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient, {
|
|
32
|
+
appId: projectId,
|
|
33
|
+
environment,
|
|
34
|
+
});
|
|
35
|
+
if (!name) {
|
|
36
|
+
name = await (0, prompts_1.selectAsync)('Select variable', existingVariables.map(variable => ({
|
|
37
|
+
title: variable.name,
|
|
38
|
+
value: variable.name,
|
|
39
|
+
})));
|
|
40
|
+
}
|
|
41
|
+
const existingVariable = existingVariables.find(variable => variable.name === name);
|
|
42
|
+
if (!existingVariable) {
|
|
43
|
+
throw new Error(`Variable with name ${name} does not exist on project ${projectDisplayName}`);
|
|
44
|
+
}
|
|
45
|
+
if (!value) {
|
|
46
|
+
value = await (0, prompts_2.promptVariableValueAsync)({
|
|
47
|
+
nonInteractive,
|
|
48
|
+
required: false,
|
|
49
|
+
initial: existingVariable.value,
|
|
50
|
+
});
|
|
51
|
+
if (!value || value.length === 0) {
|
|
52
|
+
value = '';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const variable = await EnvironmentVariableMutation_1.EnvironmentVariableMutation.createForAppAsync(graphqlClient, {
|
|
56
|
+
name,
|
|
57
|
+
value,
|
|
58
|
+
environment,
|
|
59
|
+
visibility,
|
|
60
|
+
overwrite: true,
|
|
61
|
+
}, projectId);
|
|
62
|
+
if (!variable) {
|
|
63
|
+
throw new Error(`Could not update variable with name ${name} on project ${projectDisplayName}`);
|
|
64
|
+
}
|
|
65
|
+
log_1.default.withTick(`Updated variable ${chalk_1.default.bold(name)} on project ${chalk_1.default.bold(projectDisplayName)}.`);
|
|
66
|
+
}
|
|
67
|
+
else if (scope === generated_1.EnvironmentVariableScope.Shared) {
|
|
68
|
+
const sharedVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.sharedAsync(graphqlClient, {
|
|
69
|
+
appId: projectId,
|
|
70
|
+
});
|
|
71
|
+
if (!name) {
|
|
72
|
+
name = await (0, prompts_1.selectAsync)('Select variable', sharedVariables.map(variable => ({
|
|
73
|
+
title: variable.name,
|
|
74
|
+
value: variable.name,
|
|
75
|
+
})));
|
|
76
|
+
}
|
|
77
|
+
const existingVariable = sharedVariables.find(variable => variable.name === name);
|
|
78
|
+
if (!existingVariable) {
|
|
79
|
+
throw new Error("Variable with this name doesn't exist on this account. Use a different name.");
|
|
80
|
+
}
|
|
81
|
+
if (!value) {
|
|
82
|
+
value = await (0, prompts_2.promptVariableValueAsync)({
|
|
83
|
+
nonInteractive,
|
|
84
|
+
required: false,
|
|
85
|
+
initial: existingVariable.value,
|
|
86
|
+
});
|
|
87
|
+
if (!value || value.length === 0) {
|
|
88
|
+
value = '';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const variable = await EnvironmentVariableMutation_1.EnvironmentVariableMutation.createSharedVariableAsync(graphqlClient, {
|
|
92
|
+
name,
|
|
93
|
+
value,
|
|
94
|
+
visibility,
|
|
95
|
+
overwrite: true,
|
|
96
|
+
}, ownerAccount.id);
|
|
97
|
+
if (!variable) {
|
|
98
|
+
throw new Error(`Could not update variable with name ${name} on account ${ownerAccount.name}`);
|
|
99
|
+
}
|
|
100
|
+
log_1.default.withTick(`Updated shared variable ${chalk_1.default.bold(name)} on account ${chalk_1.default.bold(ownerAccount.name)}.`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
validateFlags(flags) {
|
|
104
|
+
if (flags['non-interactive']) {
|
|
105
|
+
if (!flags.name) {
|
|
106
|
+
throw new Error('Variable name is required in non-interactive mode. Run the command with --name flag.');
|
|
107
|
+
}
|
|
108
|
+
if (flags.scope === generated_1.EnvironmentVariableScope.Project && !flags.environment) {
|
|
109
|
+
throw new Error('Environment is required when updating project-wide variable in non-interactive mode. Run the command with --environment flag.');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return flags;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
_a = EnvironmentVariableUpdate;
|
|
116
|
+
EnvironmentVariableUpdate.description = 'update an environment variable on the current project or owner account';
|
|
117
|
+
EnvironmentVariableUpdate.hidden = true;
|
|
118
|
+
EnvironmentVariableUpdate.flags = {
|
|
119
|
+
name: core_1.Flags.string({
|
|
120
|
+
description: 'Name of the variable',
|
|
121
|
+
}),
|
|
122
|
+
value: core_1.Flags.string({
|
|
123
|
+
description: 'Text value or the variable',
|
|
124
|
+
}),
|
|
125
|
+
...flags_1.EASVariableVisibilityFlag,
|
|
126
|
+
...flags_1.EASVariableScopeFlag,
|
|
127
|
+
...flags_1.EASEnvironmentFlag,
|
|
128
|
+
...flags_1.EASNonInteractiveFlag,
|
|
129
|
+
};
|
|
130
|
+
EnvironmentVariableUpdate.contextDefinition = {
|
|
131
|
+
..._a.ContextOptions.ProjectConfig,
|
|
132
|
+
..._a.ContextOptions.Analytics,
|
|
133
|
+
..._a.ContextOptions.LoggedIn,
|
|
134
|
+
};
|
|
135
|
+
exports.default = EnvironmentVariableUpdate;
|
|
@@ -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;
|