eas-cli 2.5.1 → 2.6.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 +89 -49
- package/build/branch/queries.js +3 -22
- package/build/build/queries.d.ts +11 -1
- package/build/build/queries.js +39 -1
- package/build/channel/queries.js +5 -8
- package/build/channel/utils.js +22 -22
- package/build/commandUtils/context/LoggedInContextField.d.ts +3 -0
- package/build/commandUtils/context/LoggedInContextField.js +9 -1
- package/build/commandUtils/context/MaybeLoggedInContextField.d.ts +3 -0
- package/build/commandUtils/context/MaybeLoggedInContextField.js +9 -1
- package/build/commandUtils/context/contextUtils/createGraphqlClient.d.ts +2 -2
- package/build/commandUtils/gating/FeatureGateEnvOverrides.d.ts +7 -0
- package/build/commandUtils/gating/FeatureGateEnvOverrides.js +35 -0
- package/build/commandUtils/gating/FeatureGateKey.d.ts +4 -0
- package/build/commandUtils/gating/FeatureGateKey.js +11 -0
- package/build/commandUtils/gating/FeatureGateTestOverrides.d.ts +5 -0
- package/build/commandUtils/gating/FeatureGateTestOverrides.js +17 -0
- package/build/commandUtils/gating/FeatureGating.d.ts +16 -0
- package/build/commandUtils/gating/FeatureGating.js +55 -0
- package/build/commandUtils/pagination.d.ts +4 -3
- package/build/commands/branch/list.d.ts +1 -1
- package/build/commands/branch/view.d.ts +1 -1
- package/build/commands/build/configure.d.ts +1 -1
- package/build/commands/build/index.d.ts +2 -2
- package/build/commands/build/list.d.ts +4 -4
- package/build/commands/build/list.js +2 -15
- package/build/commands/build/run.d.ts +21 -0
- package/build/commands/build/run.js +149 -0
- package/build/commands/build/version/set.d.ts +1 -1
- package/build/commands/build/version/sync.d.ts +1 -1
- package/build/commands/channel/list.d.ts +1 -1
- package/build/commands/channel/view.d.ts +1 -1
- package/build/commands/config.d.ts +1 -1
- package/build/commands/credentials.d.ts +1 -1
- package/build/commands/device/list.d.ts +1 -1
- package/build/commands/metadata/lint.d.ts +12 -0
- package/build/commands/metadata/lint.js +72 -0
- package/build/commands/metadata/pull.js +20 -9
- package/build/commands/metadata/push.js +20 -9
- package/build/commands/secret/create.d.ts +1 -1
- package/build/commands/secret/list.js +12 -17
- package/build/commands/submit.d.ts +1 -1
- package/build/commands/update/configure.js +2 -0
- package/build/commands/update/list.d.ts +1 -1
- package/build/commands/webhook/create.d.ts +1 -1
- package/build/commands/webhook/list.d.ts +1 -1
- package/build/commands/webhook/update.d.ts +1 -1
- package/build/devices/actions/create/inputMethod.js +2 -15
- package/build/devices/utils/formatDevice.d.ts +2 -0
- package/build/devices/utils/formatDevice.js +32 -7
- package/build/env.d.ts +8 -0
- package/build/env.js +8 -0
- package/build/graphql/generated.d.ts +74 -6
- package/build/graphql/generated.js +10 -2
- package/build/graphql/mutations/KeystoreGenerationUrlMutation.js +1 -1
- package/build/graphql/queries/UserQuery.js +2 -2
- package/build/graphql/types/Build.js +1 -0
- package/build/metadata/apple/rules/index.d.ts +1 -0
- package/build/metadata/apple/rules/index.js +6 -0
- package/build/metadata/apple/rules/infoKeywordLength.d.ts +6 -0
- package/build/metadata/apple/rules/infoKeywordLength.js +35 -0
- package/build/metadata/apple/rules/infoRestrictedWords.d.ts +6 -0
- package/build/metadata/apple/rules/infoRestrictedWords.js +57 -0
- package/build/metadata/apple/tasks/index.d.ts +1 -2
- package/build/metadata/apple/tasks/index.js +1 -1
- package/build/metadata/auth.d.ts +21 -0
- package/build/metadata/auth.js +33 -0
- package/build/metadata/config/issue.d.ts +21 -0
- package/build/metadata/config/issue.js +9 -0
- package/build/metadata/config/resolve.d.ts +27 -0
- package/build/metadata/{config.js → config/resolve.js} +24 -25
- package/build/metadata/config/schema.d.ts +7 -0
- package/build/metadata/config/schema.js +2 -0
- package/build/metadata/config/validate.d.ts +3 -0
- package/build/metadata/config/validate.js +47 -0
- package/build/metadata/download.d.ts +11 -2
- package/build/metadata/download.js +14 -9
- package/build/metadata/errors.d.ts +3 -3
- package/build/metadata/errors.js +3 -1
- package/build/metadata/upload.d.ts +11 -2
- package/build/metadata/upload.js +16 -11
- package/build/metadata/utils/ajv.d.ts +10 -0
- package/build/metadata/utils/ajv.js +30 -0
- package/build/metadata/utils/telemetry.js +6 -6
- package/build/run/android/run.d.ts +1 -0
- package/build/run/android/run.js +9 -0
- package/build/run/ios/run.d.ts +1 -0
- package/build/run/ios/run.js +31 -0
- package/build/run/ios/simctl.d.ts +2 -0
- package/build/run/ios/simctl.js +8 -0
- package/build/run/ios/simulator.d.ts +21 -0
- package/build/run/ios/simulator.js +161 -0
- package/build/run/ios/systemRequirements.d.ts +1 -0
- package/build/run/ios/systemRequirements.js +82 -0
- package/build/run/ios/xcode.d.ts +4 -0
- package/build/run/ios/xcode.js +41 -0
- package/build/run/ios/xcrun.d.ts +4 -0
- package/build/run/ios/xcrun.js +68 -0
- package/build/run/run.d.ts +8 -0
- package/build/run/run.js +15 -0
- package/build/submit/utils/summary.d.ts +1 -1
- package/build/update/queries.js +30 -39
- package/build/update/utils.d.ts +8 -1
- package/build/update/utils.js +35 -1
- package/build/utils/buildDistribution.d.ts +3 -0
- package/build/utils/buildDistribution.js +20 -0
- package/build/utils/download.d.ts +2 -0
- package/build/utils/download.js +114 -0
- package/build/utils/expodash/filter.d.ts +2 -0
- package/build/utils/expodash/filter.js +8 -0
- package/build/utils/formatFields.d.ts +3 -2
- package/oclif.manifest.json +1 -1
- package/package.json +32 -30
- package/schema/metadata-0.json +1 -1
- package/build/metadata/config.d.ts +0 -41
- package/build/metadata/context.d.ts +0 -50
- package/build/metadata/context.js +0 -47
|
@@ -4,7 +4,7 @@ export default class ChannelList extends EasCommand {
|
|
|
4
4
|
static flags: {
|
|
5
5
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
6
6
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
limit:
|
|
7
|
+
limit: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
8
8
|
offset: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
9
9
|
};
|
|
10
10
|
static contextDefinition: {
|
|
@@ -8,7 +8,7 @@ export default class ChannelView extends EasCommand {
|
|
|
8
8
|
}[];
|
|
9
9
|
static flags: {
|
|
10
10
|
offset: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
11
|
-
limit:
|
|
11
|
+
limit: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
12
12
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
13
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
14
|
};
|
|
@@ -3,7 +3,7 @@ import EasCommand from '../commandUtils/EasCommand';
|
|
|
3
3
|
export default class Config extends EasCommand {
|
|
4
4
|
static description: string;
|
|
5
5
|
static flags: {
|
|
6
|
-
platform: import("@oclif/core/lib/interfaces").OptionFlag<Platform>;
|
|
6
|
+
platform: import("@oclif/core/lib/interfaces").OptionFlag<Platform | undefined>;
|
|
7
7
|
profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
8
8
|
};
|
|
9
9
|
static contextDefinition: {
|
|
@@ -2,7 +2,7 @@ import EasCommand from '../commandUtils/EasCommand';
|
|
|
2
2
|
export default class Credentials extends EasCommand {
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
|
-
platform: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
5
|
+
platform: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
6
6
|
};
|
|
7
7
|
static contextDefinition: {
|
|
8
8
|
analytics: import("../commandUtils/context/AnalyticsContextField").default;
|
|
@@ -5,7 +5,7 @@ export default class BuildList extends EasCommand {
|
|
|
5
5
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
6
6
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
7
|
offset: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
8
|
-
limit:
|
|
8
|
+
limit: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
9
9
|
'apple-team-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
10
10
|
};
|
|
11
11
|
static contextDefinition: {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import EasCommand from '../../commandUtils/EasCommand';
|
|
2
|
+
export default class MetadataLint extends EasCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
6
|
+
profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
7
|
+
};
|
|
8
|
+
static contextDefinition: {
|
|
9
|
+
projectDir: import("../../commandUtils/context/ProjectDirContextField").default;
|
|
10
|
+
};
|
|
11
|
+
runAsync(): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
6
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
7
|
+
const core_1 = require("@oclif/core");
|
|
8
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
9
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
10
|
+
const resolve_1 = require("../../metadata/config/resolve");
|
|
11
|
+
const errors_1 = require("../../metadata/errors");
|
|
12
|
+
const json_1 = require("../../utils/json");
|
|
13
|
+
const profiles_1 = require("../../utils/profiles");
|
|
14
|
+
class MetadataLint extends EasCommand_1.default {
|
|
15
|
+
async runAsync() {
|
|
16
|
+
const { flags } = await this.parse(MetadataLint);
|
|
17
|
+
const { projectDir } = await this.getContextAsync(MetadataLint, {
|
|
18
|
+
nonInteractive: true,
|
|
19
|
+
});
|
|
20
|
+
if (flags.json) {
|
|
21
|
+
(0, json_1.enableJsonOutput)();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
log_1.default.warn('EAS Metadata is in beta and subject to breaking changes.');
|
|
25
|
+
}
|
|
26
|
+
const submitProfiles = await (0, profiles_1.getProfilesAsync)({
|
|
27
|
+
type: 'submit',
|
|
28
|
+
easJsonAccessor: new eas_json_1.EasJsonAccessor(projectDir),
|
|
29
|
+
platforms: [eas_build_job_1.Platform.IOS],
|
|
30
|
+
profileName: flags.profile,
|
|
31
|
+
});
|
|
32
|
+
if (submitProfiles.length !== 1) {
|
|
33
|
+
throw new Error('Metadata only supports iOS and a single submit profile.');
|
|
34
|
+
}
|
|
35
|
+
const submitProfile = submitProfiles[0].profile;
|
|
36
|
+
try {
|
|
37
|
+
await (0, resolve_1.loadConfigAsync)({ projectDir, profile: submitProfile });
|
|
38
|
+
if (flags.json) {
|
|
39
|
+
return (0, json_1.printJsonOnlyOutput)([]);
|
|
40
|
+
}
|
|
41
|
+
log_1.default.log('✅ Store configuration is valid.');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (!(error instanceof errors_1.MetadataValidationError)) {
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
if (flags.json) {
|
|
48
|
+
return (0, json_1.printJsonOnlyOutput)(error.errors);
|
|
49
|
+
}
|
|
50
|
+
(0, errors_1.logMetadataValidationError)(error);
|
|
51
|
+
log_1.default.addNewLineIfNone();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.default = MetadataLint;
|
|
56
|
+
_a = MetadataLint;
|
|
57
|
+
MetadataLint.description = 'validate the local store configuration';
|
|
58
|
+
MetadataLint.flags = {
|
|
59
|
+
json: core_1.Flags.boolean({
|
|
60
|
+
description: 'Enable JSON output, non-JSON messages will be printed to stderr',
|
|
61
|
+
default: false,
|
|
62
|
+
}),
|
|
63
|
+
profile: core_1.Flags.string({
|
|
64
|
+
description: 'Name of the submit profile from eas.json. Defaults to "production" if defined in eas.json.',
|
|
65
|
+
}),
|
|
66
|
+
};
|
|
67
|
+
MetadataLint.contextDefinition = {
|
|
68
|
+
// The metadata lint command is created to integrate in other dev tooling, like vscode-expo.
|
|
69
|
+
// These integrations might spam this command, so we avoid communicating with our services here.
|
|
70
|
+
// Note that this is an exception and you should normally use `ProjectConfig` instead.
|
|
71
|
+
..._a.ContextOptions.ProjectDir,
|
|
72
|
+
};
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
6
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
5
7
|
const core_1 = require("@oclif/core");
|
|
6
8
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
9
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
@@ -9,9 +11,9 @@ const configure_1 = require("../../build/configure");
|
|
|
9
11
|
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
10
12
|
const context_1 = require("../../credentials/context");
|
|
11
13
|
const log_1 = tslib_1.__importStar(require("../../log"));
|
|
12
|
-
const context_2 = require("../../metadata/context");
|
|
13
14
|
const download_1 = require("../../metadata/download");
|
|
14
15
|
const errors_1 = require("../../metadata/errors");
|
|
16
|
+
const profiles_1 = require("../../utils/profiles");
|
|
15
17
|
class MetadataPull extends EasCommand_1.default {
|
|
16
18
|
async runAsync() {
|
|
17
19
|
log_1.default.warn('EAS Metadata is in beta and subject to breaking changes.');
|
|
@@ -21,6 +23,16 @@ class MetadataPull extends EasCommand_1.default {
|
|
|
21
23
|
});
|
|
22
24
|
// this command is interactive (all nonInteractive flags passed to utility functions are false)
|
|
23
25
|
await (0, configure_1.ensureProjectConfiguredAsync)({ projectDir, nonInteractive: false });
|
|
26
|
+
const submitProfiles = await (0, profiles_1.getProfilesAsync)({
|
|
27
|
+
type: 'submit',
|
|
28
|
+
easJsonAccessor: new eas_json_1.EasJsonAccessor(projectDir),
|
|
29
|
+
platforms: [eas_build_job_1.Platform.IOS],
|
|
30
|
+
profileName: flags.profile,
|
|
31
|
+
});
|
|
32
|
+
if (submitProfiles.length !== 1) {
|
|
33
|
+
throw new Error('Metadata only supports iOS and a single submit profile.');
|
|
34
|
+
}
|
|
35
|
+
const submitProfile = submitProfiles[0].profile;
|
|
24
36
|
const credentialsCtx = new context_1.CredentialsContext({
|
|
25
37
|
projectInfo: { exp, projectId },
|
|
26
38
|
projectDir,
|
|
@@ -29,15 +41,14 @@ class MetadataPull extends EasCommand_1.default {
|
|
|
29
41
|
analytics,
|
|
30
42
|
nonInteractive: false,
|
|
31
43
|
});
|
|
32
|
-
const metadataCtx = await (0, context_2.createMetadataContextAsync)({
|
|
33
|
-
credentialsCtx,
|
|
34
|
-
analytics,
|
|
35
|
-
projectDir,
|
|
36
|
-
exp,
|
|
37
|
-
profileName: flags.profile,
|
|
38
|
-
});
|
|
39
44
|
try {
|
|
40
|
-
const filePath = await (0, download_1.downloadMetadataAsync)(
|
|
45
|
+
const filePath = await (0, download_1.downloadMetadataAsync)({
|
|
46
|
+
analytics,
|
|
47
|
+
exp,
|
|
48
|
+
credentialsCtx,
|
|
49
|
+
projectDir,
|
|
50
|
+
profile: submitProfile,
|
|
51
|
+
});
|
|
41
52
|
const relativePath = path_1.default.relative(process.cwd(), filePath);
|
|
42
53
|
log_1.default.addNewLineIfNone();
|
|
43
54
|
log_1.default.log(`🎉 Your store config is ready.
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
6
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
5
7
|
const core_1 = require("@oclif/core");
|
|
6
8
|
const configure_1 = require("../../build/configure");
|
|
7
9
|
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
8
10
|
const context_1 = require("../../credentials/context");
|
|
9
11
|
const log_1 = tslib_1.__importStar(require("../../log"));
|
|
10
|
-
const context_2 = require("../../metadata/context");
|
|
11
12
|
const errors_1 = require("../../metadata/errors");
|
|
12
13
|
const upload_1 = require("../../metadata/upload");
|
|
14
|
+
const profiles_1 = require("../../utils/profiles");
|
|
13
15
|
class MetadataPush extends EasCommand_1.default {
|
|
14
16
|
async runAsync() {
|
|
15
17
|
log_1.default.warn('EAS Metadata is in beta and subject to breaking changes.');
|
|
@@ -19,6 +21,16 @@ class MetadataPush extends EasCommand_1.default {
|
|
|
19
21
|
});
|
|
20
22
|
// this command is interactive (all nonInteractive flags passed to utility functions are false)
|
|
21
23
|
await (0, configure_1.ensureProjectConfiguredAsync)({ projectDir, nonInteractive: false });
|
|
24
|
+
const submitProfiles = await (0, profiles_1.getProfilesAsync)({
|
|
25
|
+
type: 'submit',
|
|
26
|
+
easJsonAccessor: new eas_json_1.EasJsonAccessor(projectDir),
|
|
27
|
+
platforms: [eas_build_job_1.Platform.IOS],
|
|
28
|
+
profileName: flags.profile,
|
|
29
|
+
});
|
|
30
|
+
if (submitProfiles.length !== 1) {
|
|
31
|
+
throw new Error('Metadata only supports iOS and a single submit profile.');
|
|
32
|
+
}
|
|
33
|
+
const submitProfile = submitProfiles[0].profile;
|
|
22
34
|
const credentialsCtx = new context_1.CredentialsContext({
|
|
23
35
|
projectInfo: { exp, projectId },
|
|
24
36
|
projectDir,
|
|
@@ -27,15 +39,14 @@ class MetadataPush extends EasCommand_1.default {
|
|
|
27
39
|
analytics,
|
|
28
40
|
nonInteractive: false,
|
|
29
41
|
});
|
|
30
|
-
const metadataCtx = await (0, context_2.createMetadataContextAsync)({
|
|
31
|
-
credentialsCtx,
|
|
32
|
-
analytics,
|
|
33
|
-
projectDir,
|
|
34
|
-
exp,
|
|
35
|
-
profileName: flags.profile,
|
|
36
|
-
});
|
|
37
42
|
try {
|
|
38
|
-
const { appleLink } = await (0, upload_1.uploadMetadataAsync)(
|
|
43
|
+
const { appleLink } = await (0, upload_1.uploadMetadataAsync)({
|
|
44
|
+
analytics,
|
|
45
|
+
exp,
|
|
46
|
+
credentialsCtx,
|
|
47
|
+
projectDir,
|
|
48
|
+
profile: submitProfile,
|
|
49
|
+
});
|
|
39
50
|
log_1.default.addNewLineIfNone();
|
|
40
51
|
log_1.default.log(`🎉 Store configuration is synced with the app stores.
|
|
41
52
|
|
|
@@ -8,7 +8,7 @@ export default class EnvironmentSecretCreate extends EasCommand {
|
|
|
8
8
|
scope: import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentSecretScope>;
|
|
9
9
|
name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
10
10
|
value: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
11
|
-
type: import("@oclif/core/lib/interfaces").OptionFlag<SecretType>;
|
|
11
|
+
type: import("@oclif/core/lib/interfaces").OptionFlag<SecretType | undefined>;
|
|
12
12
|
force: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
13
|
};
|
|
14
14
|
static contextDefinition: {
|
|
@@ -3,34 +3,19 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
const cli_table3_1 = tslib_1.__importDefault(require("cli-table3"));
|
|
7
6
|
const dateformat_1 = tslib_1.__importDefault(require("dateformat"));
|
|
8
7
|
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
9
8
|
const EnvironmentSecretsQuery_1 = require("../../graphql/queries/EnvironmentSecretsQuery");
|
|
10
|
-
const EnvironmentSecret_1 = require("../../graphql/types/EnvironmentSecret");
|
|
11
9
|
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
10
|
+
const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
|
|
12
11
|
class EnvironmentSecretList extends EasCommand_1.default {
|
|
13
12
|
async runAsync() {
|
|
14
13
|
const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretList, {
|
|
15
14
|
nonInteractive: true,
|
|
16
15
|
});
|
|
17
16
|
const secrets = await EnvironmentSecretsQuery_1.EnvironmentSecretsQuery.allAsync(graphqlClient, projectId);
|
|
18
|
-
const table = new cli_table3_1.default({
|
|
19
|
-
head: ['Name', 'Type', 'Scope', 'ID', 'Updated at'],
|
|
20
|
-
wordWrap: true,
|
|
21
|
-
});
|
|
22
|
-
for (const secret of secrets) {
|
|
23
|
-
const { name, createdAt: updatedAt, scope, id, type } = secret;
|
|
24
|
-
table.push([
|
|
25
|
-
name,
|
|
26
|
-
EnvironmentSecret_1.EnvironmentSecretTypeToSecretType[type],
|
|
27
|
-
scope,
|
|
28
|
-
id,
|
|
29
|
-
(0, dateformat_1.default)(updatedAt, 'mmm dd HH:MM:ss'),
|
|
30
|
-
]);
|
|
31
|
-
}
|
|
32
17
|
log_1.default.log((0, chalk_1.default) `{bold Secrets for this account and project:}`);
|
|
33
|
-
log_1.default.log(
|
|
18
|
+
log_1.default.log(secrets.map(secret => formatSecret(secret)).join(`\n\n${chalk_1.default.dim('———')}\n\n`));
|
|
34
19
|
}
|
|
35
20
|
}
|
|
36
21
|
exports.default = EnvironmentSecretList;
|
|
@@ -40,3 +25,13 @@ EnvironmentSecretList.contextDefinition = {
|
|
|
40
25
|
..._a.ContextOptions.ProjectConfig,
|
|
41
26
|
..._a.ContextOptions.LoggedIn,
|
|
42
27
|
};
|
|
28
|
+
function formatSecret(secret) {
|
|
29
|
+
return (0, formatFields_1.default)([
|
|
30
|
+
{ label: 'ID', value: secret.id },
|
|
31
|
+
{ label: 'Name', value: secret.name },
|
|
32
|
+
{ label: 'Scope', value: secret.scope },
|
|
33
|
+
{ label: 'Type', value: secret.type },
|
|
34
|
+
// TODO: Figure out why do we name it updated, while it's created at?
|
|
35
|
+
{ label: 'Updated at', value: (0, dateformat_1.default)(secret.createdAt, 'mmm dd HH:MM:ss') },
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
@@ -3,7 +3,7 @@ export default class Submit extends EasCommand {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static aliases: string[];
|
|
5
5
|
static flags: {
|
|
6
|
-
platform: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
6
|
+
platform: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
7
7
|
profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
8
8
|
latest: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
9
|
id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
@@ -56,6 +56,8 @@ class UpdateConfigure extends EasCommand_1.default {
|
|
|
56
56
|
log_1.default.withTick(`Configured ${chalk_1.default.bold('Expo.plist')} for EAS Update`);
|
|
57
57
|
}
|
|
58
58
|
log_1.default.addNewLineIfNone();
|
|
59
|
+
log_1.default.warn(`All builds of your app going forward will be eligible to receive updates published with EAS Update.`);
|
|
60
|
+
log_1.default.addNewLineIfNone();
|
|
59
61
|
log_1.default.log(`🎉 Your app is configured to run EAS Update!`);
|
|
60
62
|
}
|
|
61
63
|
}
|
|
@@ -4,7 +4,7 @@ export default class UpdateList extends EasCommand {
|
|
|
4
4
|
static flags: {
|
|
5
5
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
6
6
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
limit:
|
|
7
|
+
limit: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
8
8
|
offset: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
9
9
|
branch: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
10
10
|
all: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
@@ -4,7 +4,7 @@ export default class WebhookCreate extends EasCommand {
|
|
|
4
4
|
static description: string;
|
|
5
5
|
static flags: {
|
|
6
6
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
event: import("@oclif/core/lib/interfaces").OptionFlag<WebhookType>;
|
|
7
|
+
event: import("@oclif/core/lib/interfaces").OptionFlag<WebhookType | undefined>;
|
|
8
8
|
url: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
9
9
|
secret: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
10
10
|
};
|
|
@@ -3,7 +3,7 @@ import { WebhookType } from '../../graphql/generated';
|
|
|
3
3
|
export default class WebhookList extends EasCommand {
|
|
4
4
|
static description: string;
|
|
5
5
|
static flags: {
|
|
6
|
-
event: import("@oclif/core/lib/interfaces").OptionFlag<WebhookType>;
|
|
6
|
+
event: import("@oclif/core/lib/interfaces").OptionFlag<WebhookType | undefined>;
|
|
7
7
|
};
|
|
8
8
|
static contextDefinition: {
|
|
9
9
|
loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
|
|
@@ -5,7 +5,7 @@ export default class WebhookUpdate extends EasCommand {
|
|
|
5
5
|
static flags: {
|
|
6
6
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
7
|
id: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
8
|
-
event: import("@oclif/core/lib/interfaces").OptionFlag<WebhookType>;
|
|
8
|
+
event: import("@oclif/core/lib/interfaces").OptionFlag<WebhookType | undefined>;
|
|
9
9
|
url: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
10
10
|
secret: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
11
11
|
};
|
|
@@ -3,17 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.promptForUDIDAsync = exports.runInputMethodAsync = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
-
const cli_table3_1 = tslib_1.__importDefault(require("cli-table3"));
|
|
7
6
|
const AppleDeviceMutation_1 = require("../../../credentials/ios/api/graphql/mutations/AppleDeviceMutation");
|
|
8
7
|
const generated_1 = require("../../../graphql/generated");
|
|
9
8
|
const log_1 = tslib_1.__importDefault(require("../../../log"));
|
|
10
9
|
const ora_1 = require("../../../ora");
|
|
11
10
|
const prompts_1 = require("../../../prompts");
|
|
12
11
|
const udids_1 = require("../../udids");
|
|
13
|
-
const
|
|
14
|
-
[generated_1.AppleDeviceClass.Iphone]: 'iPhone',
|
|
15
|
-
[generated_1.AppleDeviceClass.Ipad]: 'iPad',
|
|
16
|
-
};
|
|
12
|
+
const formatDevice_1 = require("../../utils/formatDevice");
|
|
17
13
|
async function runInputMethodAsync(graphqlClient, accountId, appleTeam) {
|
|
18
14
|
log_1.default.newLine();
|
|
19
15
|
log_1.default.log(chalk_1.default.yellow('This is an advanced option. Use at your own risk.'));
|
|
@@ -58,7 +54,7 @@ async function collectDeviceDataAsync(appleTeam, initialValues = {}) {
|
|
|
58
54
|
log_1.default.log(`We are going to register the following device in our database.
|
|
59
55
|
This will ${chalk_1.default.bold('not')} register the device on the Apple Developer Portal yet.`);
|
|
60
56
|
log_1.default.newLine();
|
|
61
|
-
|
|
57
|
+
log_1.default.log((0, formatDevice_1.formatNewDevice)({ ...deviceData, identifier: deviceData.udid }, appleTeam));
|
|
62
58
|
log_1.default.newLine();
|
|
63
59
|
const registrationConfirmed = await (0, prompts_1.confirmAsync)({
|
|
64
60
|
message: 'Is this what you want to register?',
|
|
@@ -123,12 +119,3 @@ async function promptForDeviceClassAsync(initial) {
|
|
|
123
119
|
});
|
|
124
120
|
return deviceClass;
|
|
125
121
|
}
|
|
126
|
-
function printDeviceDataSummary({ udid, name, deviceClass }, appleTeam) {
|
|
127
|
-
var _a;
|
|
128
|
-
const deviceSummary = new cli_table3_1.default({
|
|
129
|
-
colWidths: [25, 55],
|
|
130
|
-
wordWrap: true,
|
|
131
|
-
});
|
|
132
|
-
deviceSummary.push(['Apple Team ID', appleTeam.appleTeamIdentifier], ['Apple Team Name', (_a = appleTeam.appleTeamName) !== null && _a !== void 0 ? _a : '(unknown)'], ['Device UDID', udid], ['Device Name', name !== null && name !== void 0 ? name : '(empty)'], ['Device Class', deviceClass ? DEVICE_CLASS_DISPLAY_NAMES[deviceClass] : '(unknown)']);
|
|
133
|
-
log_1.default.log(deviceSummary.toString());
|
|
134
|
-
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { AppleDevice, AppleTeam } from '../../graphql/generated';
|
|
2
2
|
declare type Device = Pick<AppleDevice, 'id' | 'identifier' | 'name' | 'deviceClass' | 'enabled' | 'model'>;
|
|
3
|
+
declare type NewDevice = Pick<AppleDevice, 'identifier' | 'name' | 'deviceClass'>;
|
|
3
4
|
export declare type AppleTeamIdAndName = Pick<AppleTeam, 'appleTeamIdentifier' | 'appleTeamName'>;
|
|
4
5
|
export default function formatDevice(device: Device, team?: AppleTeamIdAndName): string;
|
|
6
|
+
export declare function formatNewDevice(device: NewDevice, team?: AppleTeamIdAndName): string;
|
|
5
7
|
export {};
|
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatNewDevice = void 0;
|
|
3
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const generated_1 = require("../../graphql/generated");
|
|
4
6
|
const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
|
|
7
|
+
const DEVICE_CLASS_DISPLAY_NAMES = {
|
|
8
|
+
[generated_1.AppleDeviceClass.Iphone]: 'iPhone',
|
|
9
|
+
[generated_1.AppleDeviceClass.Ipad]: 'iPad',
|
|
10
|
+
};
|
|
11
|
+
function formatDeviceClass(device) {
|
|
12
|
+
if (!device.deviceClass || !DEVICE_CLASS_DISPLAY_NAMES[device.deviceClass]) {
|
|
13
|
+
return 'Unknown';
|
|
14
|
+
}
|
|
15
|
+
return [DEVICE_CLASS_DISPLAY_NAMES[device.deviceClass], 'model' in device ? device.model : '']
|
|
16
|
+
.filter(value => !!value)
|
|
17
|
+
.join(' ');
|
|
18
|
+
}
|
|
5
19
|
function formatDevice(device, team) {
|
|
6
20
|
var _a, _b;
|
|
7
21
|
const fields = [
|
|
@@ -9,18 +23,29 @@ function formatDevice(device, team) {
|
|
|
9
23
|
{ label: 'Name', value: (_a = device.name) !== null && _a !== void 0 ? _a : 'Unknown' },
|
|
10
24
|
{
|
|
11
25
|
label: 'Class',
|
|
12
|
-
value: device
|
|
13
|
-
? `${device.deviceClass}${device.model ? ` ${device.model}` : ''}`
|
|
14
|
-
: 'Unknown',
|
|
26
|
+
value: formatDeviceClass(device),
|
|
15
27
|
},
|
|
16
28
|
{ label: 'UDID', value: device.identifier },
|
|
17
29
|
];
|
|
18
30
|
if (team) {
|
|
19
|
-
fields.push(
|
|
20
|
-
{ label: 'Apple Team ID', value: team.appleTeamIdentifier },
|
|
21
|
-
{ label: 'Apple Team Name', value: (_b = team.appleTeamName) !== null && _b !== void 0 ? _b : 'Unknown' },
|
|
22
|
-
]);
|
|
31
|
+
fields.push({ label: 'Apple Team ID', value: team.appleTeamIdentifier }, { label: 'Apple Team Name', value: (_b = team.appleTeamName) !== null && _b !== void 0 ? _b : 'Unknown' });
|
|
23
32
|
}
|
|
24
33
|
return (0, formatFields_1.default)(fields);
|
|
25
34
|
}
|
|
26
35
|
exports.default = formatDevice;
|
|
36
|
+
function formatNewDevice(device, team) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const fields = [
|
|
39
|
+
{ label: 'Name', value: (_a = device.name) !== null && _a !== void 0 ? _a : '(empty)' },
|
|
40
|
+
{
|
|
41
|
+
label: 'Class',
|
|
42
|
+
value: formatDeviceClass(device),
|
|
43
|
+
},
|
|
44
|
+
{ label: 'UDID', value: device.identifier },
|
|
45
|
+
];
|
|
46
|
+
if (team) {
|
|
47
|
+
fields.push({ label: 'Apple Team ID', value: team.appleTeamIdentifier }, { label: 'Apple Team Name', value: (_b = team.appleTeamName) !== null && _b !== void 0 ? _b : 'Unknown' });
|
|
48
|
+
}
|
|
49
|
+
return (0, formatFields_1.default)(fields);
|
|
50
|
+
}
|
|
51
|
+
exports.formatNewDevice = formatNewDevice;
|
package/build/env.d.ts
CHANGED
|
@@ -7,5 +7,13 @@ declare const _default: {
|
|
|
7
7
|
* ignore failures when parsing build.gradle.
|
|
8
8
|
*/
|
|
9
9
|
overrideAndroidApplicationId: string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Comma separated list of feature gate keys of feature gates to evaluate override to true.
|
|
12
|
+
*/
|
|
13
|
+
featureGateEnable: string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Comma separated list of feature gate keys of feature gates to evaluate override to false.
|
|
16
|
+
*/
|
|
17
|
+
featureGateDisable: string | undefined;
|
|
10
18
|
};
|
|
11
19
|
export default _default;
|
package/build/env.js
CHANGED
|
@@ -9,4 +9,12 @@ exports.default = {
|
|
|
9
9
|
* ignore failures when parsing build.gradle.
|
|
10
10
|
*/
|
|
11
11
|
overrideAndroidApplicationId: process.env.EAS_DANGEROUS_OVERRIDE_ANDROID_APPLICATION_ID,
|
|
12
|
+
/**
|
|
13
|
+
* Comma separated list of feature gate keys of feature gates to evaluate override to true.
|
|
14
|
+
*/
|
|
15
|
+
featureGateEnable: process.env.EAS_FG_ENABLE,
|
|
16
|
+
/**
|
|
17
|
+
* Comma separated list of feature gate keys of feature gates to evaluate override to false.
|
|
18
|
+
*/
|
|
19
|
+
featureGateDisable: process.env.EAS_FG_DISABLE,
|
|
12
20
|
};
|