eas-cli 14.4.1 → 14.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 +147 -91
- package/build/build/android/graphql.js +2 -0
- package/build/build/android/prepareJob.js +1 -0
- package/build/build/android/version.d.ts +1 -0
- package/build/build/android/version.js +5 -1
- package/build/build/build.js +4 -3
- package/build/build/configure.d.ts +11 -0
- package/build/build/configure.js +46 -1
- package/build/build/evaluateConfigWithEnvVarsAsync.js +2 -4
- package/build/build/ios/build.js +2 -0
- package/build/build/ios/graphql.js +2 -0
- package/build/build/ios/prepareJob.js +1 -0
- package/build/build/ios/version.js +4 -1
- package/build/build/local.js +1 -1
- package/build/build/metadata.js +0 -1
- package/build/build/runBuildAndSubmit.d.ts +12 -1
- package/build/build/runBuildAndSubmit.js +16 -13
- package/build/build/utils/environment.d.ts +4 -0
- package/build/build/utils/environment.js +20 -0
- package/build/commands/build/dev.d.ts +23 -0
- package/build/commands/build/dev.js +225 -0
- package/build/commands/build/index.js +9 -1
- package/build/commands/build/inspect.js +26 -18
- package/build/commands/build/internal.js +22 -14
- package/build/commands/build/list.d.ts +1 -0
- package/build/commands/build/list.js +4 -0
- package/build/commands/{worker → deploy}/alias.js +4 -4
- package/build/commands/{worker/deploy.js → deploy/index.js} +5 -5
- package/build/commands/fingerprint/compare.d.ts +14 -1
- package/build/commands/fingerprint/compare.js +192 -53
- package/build/commands/project/onboarding.js +23 -14
- package/build/commands/update/index.js +3 -6
- package/build/commands/update/roll-back-to-embedded.js +2 -2
- package/build/credentials/ios/appstore/ensureAppExists.d.ts +22 -1
- package/build/credentials/ios/appstore/ensureAppExists.js +73 -2
- package/build/credentials/ios/appstore/ensureTestFlightGroup.d.ts +7 -0
- package/build/credentials/ios/appstore/ensureTestFlightGroup.js +158 -0
- package/build/credentials/ios/appstore/provisioningProfile.js +1 -0
- package/build/credentials/ios/appstore/resolveCredentials.js +6 -1
- package/build/graphql/generated.d.ts +313 -3
- package/build/graphql/generated.js +11 -2
- package/build/graphql/queries/FingerprintQuery.d.ts +16 -0
- package/build/graphql/queries/FingerprintQuery.js +61 -0
- package/build/graphql/types/Fingerprint.js +18 -0
- package/build/project/ios/exemptEncryption.d.ts +7 -0
- package/build/project/ios/exemptEncryption.js +80 -0
- package/build/project/publish.d.ts +4 -4
- package/build/project/publish.js +9 -8
- package/build/project/resolveRuntimeVersionAsync.d.ts +4 -4
- package/build/project/resolveRuntimeVersionAsync.js +4 -4
- package/build/submit/ios/AppProduce.js +12 -23
- package/build/utils/fingerprintCli.d.ts +2 -1
- package/build/utils/fingerprintCli.js +11 -3
- package/build/worker/upload.js +19 -3
- package/oclif.manifest.json +217 -155
- package/package.json +6 -6
- /package/build/commands/{worker → deploy}/alias.d.ts +0 -0
- /package/build/commands/{worker/deploy.d.ts → deploy/index.d.ts} +0 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
5
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
6
|
+
const core_1 = require("@oclif/core");
|
|
7
|
+
const configure_1 = require("../../build/configure");
|
|
8
|
+
const evaluateConfigWithEnvVarsAsync_1 = require("../../build/evaluateConfigWithEnvVarsAsync");
|
|
9
|
+
const runBuildAndSubmit_1 = require("../../build/runBuildAndSubmit");
|
|
10
|
+
const repository_1 = require("../../build/utils/repository");
|
|
11
|
+
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
12
|
+
const generated_1 = require("../../graphql/generated");
|
|
13
|
+
const BuildQuery_1 = require("../../graphql/queries/BuildQuery");
|
|
14
|
+
const AppPlatform_1 = require("../../graphql/types/AppPlatform");
|
|
15
|
+
const log_1 = tslib_1.__importDefault(require("../../log"));
|
|
16
|
+
const platform_1 = require("../../platform");
|
|
17
|
+
const workflow_1 = require("../../project/workflow");
|
|
18
|
+
const prompts_1 = require("../../prompts");
|
|
19
|
+
const run_1 = require("../../run/run");
|
|
20
|
+
const download_1 = require("../../utils/download");
|
|
21
|
+
const fingerprintCli_1 = require("../../utils/fingerprintCli");
|
|
22
|
+
const profiles_1 = require("../../utils/profiles");
|
|
23
|
+
const DEFAULT_EAS_BUILD_RUN_PROFILE_NAME = 'development-simulator';
|
|
24
|
+
class BuildDev extends EasCommand_1.default {
|
|
25
|
+
static hidden;
|
|
26
|
+
static description = 'run dev client simulator/emulator build with matching fingerprint or create a new one';
|
|
27
|
+
static flags = {
|
|
28
|
+
platform: core_1.Flags.enum({
|
|
29
|
+
char: 'p',
|
|
30
|
+
options: [eas_build_job_1.Platform.IOS, eas_build_job_1.Platform.ANDROID],
|
|
31
|
+
}),
|
|
32
|
+
profile: core_1.Flags.string({
|
|
33
|
+
char: 'e',
|
|
34
|
+
description: `Name of the build profile from eas.json. It must be a profile allowing to create emulator/simulator internal distribution dev client builds. The "${DEFAULT_EAS_BUILD_RUN_PROFILE_NAME}" build profile will be selected by default.`,
|
|
35
|
+
helpValue: 'PROFILE_NAME',
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
static contextDefinition = {
|
|
39
|
+
...this.ContextOptions.LoggedIn,
|
|
40
|
+
...this.ContextOptions.DynamicProjectConfig,
|
|
41
|
+
...this.ContextOptions.ProjectDir,
|
|
42
|
+
...this.ContextOptions.Vcs,
|
|
43
|
+
...this.ContextOptions.Analytics,
|
|
44
|
+
...this.ContextOptions.ProjectId,
|
|
45
|
+
};
|
|
46
|
+
async runAsync() {
|
|
47
|
+
const { flags } = await this.parse(BuildDev);
|
|
48
|
+
const { loggedIn: { actor, graphqlClient }, getDynamicPrivateProjectConfigAsync, projectDir, analytics, vcsClient, projectId, } = await this.getContextAsync(BuildDev, {
|
|
49
|
+
nonInteractive: false,
|
|
50
|
+
withServerSideEnvironment: null,
|
|
51
|
+
});
|
|
52
|
+
const platform = await this.selectPlatformAsync(flags.platform);
|
|
53
|
+
if (process.platform !== 'darwin' && platform === eas_build_job_1.Platform.IOS) {
|
|
54
|
+
core_1.Errors.error('Running iOS builds in simulator is only supported on macOS.', { exit: 1 });
|
|
55
|
+
}
|
|
56
|
+
await vcsClient.ensureRepoExistsAsync();
|
|
57
|
+
await (0, repository_1.ensureRepoIsCleanAsync)(vcsClient, flags.nonInteractive);
|
|
58
|
+
await (0, configure_1.ensureProjectConfiguredAsync)({
|
|
59
|
+
projectDir,
|
|
60
|
+
nonInteractive: false,
|
|
61
|
+
vcsClient,
|
|
62
|
+
});
|
|
63
|
+
const buildProfile = await this.ensureValidBuildRunProfileExistsAsync({
|
|
64
|
+
projectDir,
|
|
65
|
+
platform,
|
|
66
|
+
selectedBuildProfileName: flags.profile,
|
|
67
|
+
vcsClient,
|
|
68
|
+
});
|
|
69
|
+
const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, platform, vcsClient);
|
|
70
|
+
const { env } = await (0, evaluateConfigWithEnvVarsAsync_1.evaluateConfigWithEnvVarsAsync)({
|
|
71
|
+
buildProfile: buildProfile.profile,
|
|
72
|
+
buildProfileName: buildProfile.profileName,
|
|
73
|
+
graphqlClient,
|
|
74
|
+
getProjectConfig: getDynamicPrivateProjectConfigAsync,
|
|
75
|
+
opts: { env: buildProfile.profile.env },
|
|
76
|
+
});
|
|
77
|
+
const fingerprint = await (0, fingerprintCli_1.createFingerprintAsync)(projectDir, {
|
|
78
|
+
env,
|
|
79
|
+
workflow,
|
|
80
|
+
platforms: [platform],
|
|
81
|
+
});
|
|
82
|
+
if (!fingerprint) {
|
|
83
|
+
core_1.Errors.error('Failed to calculate fingerprint', { exit: 1 });
|
|
84
|
+
}
|
|
85
|
+
log_1.default.log(`✨ Calculated fingerprint hash: ${fingerprint.hash}`);
|
|
86
|
+
log_1.default.newLine();
|
|
87
|
+
const builds = await BuildQuery_1.BuildQuery.viewBuildsOnAppAsync(graphqlClient, {
|
|
88
|
+
appId: projectId,
|
|
89
|
+
filter: {
|
|
90
|
+
platform: (0, AppPlatform_1.toAppPlatform)(platform),
|
|
91
|
+
fingerprintHash: fingerprint.hash,
|
|
92
|
+
status: generated_1.BuildStatus.Finished,
|
|
93
|
+
simulator: platform === eas_build_job_1.Platform.IOS ? true : undefined,
|
|
94
|
+
distribution: platform === eas_build_job_1.Platform.ANDROID ? generated_1.DistributionType.Internal : undefined,
|
|
95
|
+
developmentClient: true,
|
|
96
|
+
},
|
|
97
|
+
offset: 0,
|
|
98
|
+
limit: 1,
|
|
99
|
+
});
|
|
100
|
+
if (builds.length !== 0) {
|
|
101
|
+
const build = builds[0];
|
|
102
|
+
log_1.default.succeed(`🎯 Found successful build with matching fingerprint on EAS servers. Running it...`);
|
|
103
|
+
if (build.artifacts?.applicationArchiveUrl) {
|
|
104
|
+
const buildPath = await (0, download_1.downloadAndMaybeExtractAppAsync)(build.artifacts.applicationArchiveUrl, build.platform);
|
|
105
|
+
await (0, run_1.runAsync)(buildPath, build.platform);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
log_1.default.warn('Artifacts for this build expired. New build will be started.');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
log_1.default.log('🚀 No successful build with matching fingerprint found. Starting a new build...');
|
|
113
|
+
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)({
|
|
114
|
+
graphqlClient,
|
|
115
|
+
analytics,
|
|
116
|
+
vcsClient,
|
|
117
|
+
projectDir,
|
|
118
|
+
flags: {
|
|
119
|
+
requestedPlatform: platform === eas_build_job_1.Platform.ANDROID ? platform_1.RequestedPlatform.Android : platform_1.RequestedPlatform.Ios,
|
|
120
|
+
nonInteractive: false,
|
|
121
|
+
freezeCredentials: false,
|
|
122
|
+
wait: true,
|
|
123
|
+
clearCache: false,
|
|
124
|
+
json: false,
|
|
125
|
+
autoSubmit: false,
|
|
126
|
+
localBuildOptions: {},
|
|
127
|
+
repack: false,
|
|
128
|
+
profile: flags.profile ?? DEFAULT_EAS_BUILD_RUN_PROFILE_NAME,
|
|
129
|
+
},
|
|
130
|
+
actor,
|
|
131
|
+
getDynamicPrivateProjectConfigAsync,
|
|
132
|
+
downloadSimBuildAutoConfirm: true,
|
|
133
|
+
envOverride: env,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
async selectPlatformAsync(platform) {
|
|
137
|
+
if (platform) {
|
|
138
|
+
return platform;
|
|
139
|
+
}
|
|
140
|
+
const { resolvedPlatform } = await (0, prompts_1.promptAsync)({
|
|
141
|
+
type: 'select',
|
|
142
|
+
message: 'Select platform',
|
|
143
|
+
name: 'resolvedPlatform',
|
|
144
|
+
choices: [
|
|
145
|
+
{ title: 'Android', value: eas_build_job_1.Platform.ANDROID },
|
|
146
|
+
{ title: 'iOS', value: eas_build_job_1.Platform.IOS },
|
|
147
|
+
],
|
|
148
|
+
});
|
|
149
|
+
return resolvedPlatform;
|
|
150
|
+
}
|
|
151
|
+
async validateBuildRunProfileAsync({ platform, buildProfile, buildProfileName, }) {
|
|
152
|
+
if (buildProfile.developmentClient !== true) {
|
|
153
|
+
core_1.Errors.error(`Profile "${buildProfileName}" must specify "developmentClient: true" to create a dev client build. Select a different profile or update the profile in eas.json.`, { exit: 1 });
|
|
154
|
+
}
|
|
155
|
+
if (buildProfile.distribution !== 'internal') {
|
|
156
|
+
core_1.Errors.error(`Profile "${buildProfileName}" must specify "distribution: internal" in order to work with eas build:dev command. Select a different profile or update the profile in eas.json.`, { exit: 1 });
|
|
157
|
+
}
|
|
158
|
+
if (platform === eas_build_job_1.Platform.IOS) {
|
|
159
|
+
const iosProfile = buildProfile;
|
|
160
|
+
if (iosProfile.simulator !== true && iosProfile.withoutCredentials !== true) {
|
|
161
|
+
core_1.Errors.error(`Profile "${buildProfileName}" must specify "ios.simulator: true" or "withoutCredentials: true" to create an iOS simulator build. Select a different profile or update the profile in eas.json.`, { exit: 1 });
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const androidProfile = buildProfile;
|
|
166
|
+
if (androidProfile.distribution !== 'internal' &&
|
|
167
|
+
androidProfile.withoutCredentials !== true) {
|
|
168
|
+
core_1.Errors.error(`Profile "${buildProfileName}" must specify "distribution: internal" or "withoutCredentials: true" to create an Android emulator build. Select a different profile or update the profile in eas.json.`, { exit: 1 });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async ensureValidBuildRunProfileExistsAsync({ projectDir, platform, selectedBuildProfileName, vcsClient, }) {
|
|
173
|
+
if (!!selectedBuildProfileName ||
|
|
174
|
+
(await (0, configure_1.doesBuildProfileExistAsync)({
|
|
175
|
+
projectDir,
|
|
176
|
+
profileName: DEFAULT_EAS_BUILD_RUN_PROFILE_NAME,
|
|
177
|
+
}))) {
|
|
178
|
+
const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
|
|
179
|
+
const [buildProfile] = await (0, profiles_1.getProfilesAsync)({
|
|
180
|
+
type: 'build',
|
|
181
|
+
easJsonAccessor,
|
|
182
|
+
platforms: [platform],
|
|
183
|
+
profileName: selectedBuildProfileName ?? DEFAULT_EAS_BUILD_RUN_PROFILE_NAME,
|
|
184
|
+
projectDir,
|
|
185
|
+
});
|
|
186
|
+
await this.validateBuildRunProfileAsync({
|
|
187
|
+
buildProfileName: selectedBuildProfileName ?? DEFAULT_EAS_BUILD_RUN_PROFILE_NAME,
|
|
188
|
+
platform,
|
|
189
|
+
buildProfile: buildProfile.profile,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
const createBuildProfile = await (0, prompts_1.confirmAsync)({
|
|
194
|
+
message: `We want to go ahead and generate "${DEFAULT_EAS_BUILD_RUN_PROFILE_NAME}" build profile for you, that matches eas build:dev criteria. Do you want to proceed?`,
|
|
195
|
+
});
|
|
196
|
+
if (!createBuildProfile) {
|
|
197
|
+
core_1.Errors.error('Come back later or specify different build compliant with eas build:dev requirements by using "--profile" flag.', { exit: 1 });
|
|
198
|
+
}
|
|
199
|
+
await (0, configure_1.createBuildProfileAsync)({
|
|
200
|
+
projectDir,
|
|
201
|
+
profileName: DEFAULT_EAS_BUILD_RUN_PROFILE_NAME,
|
|
202
|
+
profileContents: {
|
|
203
|
+
developmentClient: true,
|
|
204
|
+
distribution: 'internal',
|
|
205
|
+
ios: {
|
|
206
|
+
simulator: true,
|
|
207
|
+
},
|
|
208
|
+
environment: 'development',
|
|
209
|
+
},
|
|
210
|
+
nonInteractive: false,
|
|
211
|
+
vcsClient,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
|
|
215
|
+
const [buildProfile] = await (0, profiles_1.getProfilesAsync)({
|
|
216
|
+
type: 'build',
|
|
217
|
+
easJsonAccessor,
|
|
218
|
+
platforms: [platform],
|
|
219
|
+
profileName: selectedBuildProfileName ?? DEFAULT_EAS_BUILD_RUN_PROFILE_NAME,
|
|
220
|
+
projectDir,
|
|
221
|
+
});
|
|
222
|
+
return buildProfile;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.default = BuildDev;
|
|
@@ -118,7 +118,15 @@ class Build extends EasCommand_1.default {
|
|
|
118
118
|
: [generated_1.StatuspageServiceName.EasBuild]);
|
|
119
119
|
}
|
|
120
120
|
const flagsWithPlatform = await this.ensurePlatformSelectedAsync(flags);
|
|
121
|
-
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)(
|
|
121
|
+
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)({
|
|
122
|
+
graphqlClient,
|
|
123
|
+
analytics,
|
|
124
|
+
vcsClient,
|
|
125
|
+
projectDir,
|
|
126
|
+
flags: flagsWithPlatform,
|
|
127
|
+
actor,
|
|
128
|
+
getDynamicPrivateProjectConfigAsync,
|
|
129
|
+
});
|
|
122
130
|
}
|
|
123
131
|
sanitizeFlags(flags) {
|
|
124
132
|
const nonInteractive = flags['non-interactive'];
|
|
@@ -83,25 +83,33 @@ class BuildInspect extends EasCommand_1.default {
|
|
|
83
83
|
}
|
|
84
84
|
else {
|
|
85
85
|
try {
|
|
86
|
-
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
86
|
+
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)({
|
|
87
|
+
graphqlClient,
|
|
88
|
+
analytics,
|
|
89
|
+
vcsClient,
|
|
90
|
+
projectDir,
|
|
91
|
+
flags: {
|
|
92
|
+
nonInteractive: false,
|
|
93
|
+
freezeCredentials: false,
|
|
94
|
+
wait: true,
|
|
95
|
+
clearCache: false,
|
|
96
|
+
json: false,
|
|
97
|
+
autoSubmit: false,
|
|
98
|
+
requestedPlatform: flags.platform,
|
|
99
|
+
profile: flags.profile,
|
|
100
|
+
localBuildOptions: {
|
|
101
|
+
localBuildMode: local_1.LocalBuildMode.LOCAL_BUILD_PLUGIN,
|
|
102
|
+
...(flags.stage === InspectStage.PRE_BUILD ? { skipNativeBuild: true } : {}),
|
|
103
|
+
...(flags.stage === InspectStage.POST_BUILD ? { skipCleanup: true } : {}),
|
|
104
|
+
verbose: flags.verbose,
|
|
105
|
+
workingdir: tmpWorkingdir,
|
|
106
|
+
artifactsDir: path_1.default.join(tmpWorkingdir, 'artifacts'),
|
|
107
|
+
},
|
|
108
|
+
repack: false,
|
|
102
109
|
},
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
actor,
|
|
111
|
+
getDynamicPrivateProjectConfigAsync,
|
|
112
|
+
});
|
|
105
113
|
if (!flags.verbose) {
|
|
106
114
|
log_1.default.log(chalk_1.default.green('Build successful'));
|
|
107
115
|
}
|
|
@@ -56,21 +56,29 @@ class BuildInternal extends EasCommand_1.default {
|
|
|
56
56
|
withServerSideEnvironment: null,
|
|
57
57
|
});
|
|
58
58
|
await (0, _1.handleDeprecatedEasJsonAsync)(projectDir, flags.nonInteractive);
|
|
59
|
-
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
59
|
+
await (0, runBuildAndSubmit_1.runBuildAndSubmitAsync)({
|
|
60
|
+
graphqlClient,
|
|
61
|
+
analytics,
|
|
62
|
+
vcsClient,
|
|
63
|
+
projectDir,
|
|
64
|
+
flags: {
|
|
65
|
+
requestedPlatform: flags.platform,
|
|
66
|
+
profile: flags.profile,
|
|
67
|
+
nonInteractive: true,
|
|
68
|
+
freezeCredentials: false,
|
|
69
|
+
wait: false,
|
|
70
|
+
clearCache: false,
|
|
71
|
+
json: true,
|
|
72
|
+
autoSubmit: flags['auto-submit'] || flags['auto-submit-with-profile'] !== undefined,
|
|
73
|
+
localBuildOptions: {
|
|
74
|
+
localBuildMode: local_1.LocalBuildMode.INTERNAL,
|
|
75
|
+
},
|
|
76
|
+
submitProfile: flags['auto-submit-with-profile'] ?? flags.profile,
|
|
77
|
+
repack: false,
|
|
70
78
|
},
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
79
|
+
actor,
|
|
80
|
+
getDynamicPrivateProjectConfigAsync,
|
|
81
|
+
});
|
|
74
82
|
}
|
|
75
83
|
}
|
|
76
84
|
exports.default = BuildInternal;
|
|
@@ -20,6 +20,7 @@ export default class BuildList extends EasCommand {
|
|
|
20
20
|
'app-identifier': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
21
21
|
'build-profile': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
22
22
|
'git-commit-hash': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
23
|
+
'fingerprint-hash': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
23
24
|
};
|
|
24
25
|
static contextDefinition: {
|
|
25
26
|
vcsClient: import("../../commandUtils/context/VcsClientContextField").default;
|
|
@@ -58,6 +58,9 @@ class BuildList extends EasCommand_1.default {
|
|
|
58
58
|
aliases: ['gitCommitHash'],
|
|
59
59
|
description: 'Filter only builds created with the specified git commit hash',
|
|
60
60
|
}),
|
|
61
|
+
'fingerprint-hash': core_1.Flags.string({
|
|
62
|
+
description: 'Filter only builds with the specified fingerprint hash',
|
|
63
|
+
}),
|
|
61
64
|
...pagination_1.EasPaginatedQueryFlags,
|
|
62
65
|
limit: (0, pagination_1.getLimitFlagWithCustomValues)({ defaultTo: 10, limit: queries_1.BUILDS_LIMIT }),
|
|
63
66
|
...flags_1.EasNonInteractiveAndJsonFlags,
|
|
@@ -107,6 +110,7 @@ class BuildList extends EasCommand_1.default {
|
|
|
107
110
|
buildProfile: flags['build-profile'],
|
|
108
111
|
gitCommitHash: flags['git-commit-hash'],
|
|
109
112
|
simulator: flags.simulator,
|
|
113
|
+
fingerprintHash: flags['fingerprint-hash'],
|
|
110
114
|
},
|
|
111
115
|
paginatedQueryOptions,
|
|
112
116
|
});
|
|
@@ -12,9 +12,9 @@ const json_1 = require("../../utils/json");
|
|
|
12
12
|
const deployment_1 = require("../../worker/deployment");
|
|
13
13
|
const logs_1 = require("../../worker/utils/logs");
|
|
14
14
|
class WorkerAlias extends EasCommand_1.default {
|
|
15
|
-
static description = 'Assign deployment aliases';
|
|
16
|
-
static aliases = ['
|
|
17
|
-
static state = '
|
|
15
|
+
static description = 'Assign deployment aliases.';
|
|
16
|
+
static aliases = ['worker:alias', 'deploy:promote'];
|
|
17
|
+
static state = 'preview';
|
|
18
18
|
static flags = {
|
|
19
19
|
prod: core_1.Flags.boolean({
|
|
20
20
|
aliases: ['production'],
|
|
@@ -44,7 +44,7 @@ class WorkerAlias extends EasCommand_1.default {
|
|
|
44
44
|
if (flags.json) {
|
|
45
45
|
(0, json_1.enableJsonOutput)();
|
|
46
46
|
}
|
|
47
|
-
log_1.default.warn('EAS Hosting is still in
|
|
47
|
+
log_1.default.warn('EAS Hosting is still in preview and subject to changes.');
|
|
48
48
|
const { getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, } = await this.getContextAsync(WorkerAlias, {
|
|
49
49
|
nonInteractive: true,
|
|
50
50
|
withServerSideEnvironment: null,
|
|
@@ -21,10 +21,10 @@ const isDirectory = (directoryPath) => node_fs_1.default.promises
|
|
|
21
21
|
.then(stat => stat.isDirectory())
|
|
22
22
|
.catch(() => false);
|
|
23
23
|
class WorkerDeploy extends EasCommand_1.default {
|
|
24
|
-
static description = 'Deploy your Expo web build';
|
|
25
|
-
static aliases = ['deploy'];
|
|
24
|
+
static description = 'Deploy your Expo Router web build and API Routes.';
|
|
25
|
+
static aliases = ['worker:deploy'];
|
|
26
26
|
static usage = [(0, chalk_1.default) `deploy {dim [options]}`, `deploy --prod`];
|
|
27
|
-
static state = '
|
|
27
|
+
static state = 'preview';
|
|
28
28
|
static flags = {
|
|
29
29
|
prod: core_1.Flags.boolean({
|
|
30
30
|
aliases: ['production'],
|
|
@@ -62,7 +62,7 @@ class WorkerDeploy extends EasCommand_1.default {
|
|
|
62
62
|
if (flags.json) {
|
|
63
63
|
(0, json_1.enableJsonOutput)();
|
|
64
64
|
}
|
|
65
|
-
log_1.default.warn('EAS Hosting is still in
|
|
65
|
+
log_1.default.warn('EAS Hosting is still in preview and subject to changes.');
|
|
66
66
|
const { getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, projectDir, } = await this.getContextAsync(WorkerDeploy, { ...flags, withServerSideEnvironment: null });
|
|
67
67
|
const projectDist = await resolveExportedProjectAsync(flags, projectDir);
|
|
68
68
|
const { projectId } = await getDynamicPrivateProjectConfigAsync();
|
|
@@ -331,7 +331,7 @@ function logExportedProjectInfo(project) {
|
|
|
331
331
|
// Only show the timestamp for exports older than 1 minute
|
|
332
332
|
if (project.modifiedAt && Date.now() - project.modifiedAt.getTime() > 60000) {
|
|
333
333
|
modifiedAgo = ` - exported ${(0, timeago_js_1.format)(project.modifiedAt)}`;
|
|
334
|
-
log_1.default.warn(`> Project export: ${project.type}${modifiedAgo}
|
|
334
|
+
log_1.default.warn(`> Project export: ${project.type}${modifiedAgo}`);
|
|
335
335
|
}
|
|
336
336
|
else {
|
|
337
337
|
log_1.default.log((0, chalk_1.default) `{dim > Project export: ${project.type}}`);
|
|
@@ -2,9 +2,22 @@ import EasCommand from '../../commandUtils/EasCommand';
|
|
|
2
2
|
import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
|
|
3
3
|
import { BuildStatus } from '../../graphql/generated';
|
|
4
4
|
import { RequestedPlatform } from '../../platform';
|
|
5
|
+
export interface FingerprintCompareFlags {
|
|
6
|
+
buildId?: string;
|
|
7
|
+
hash1?: string;
|
|
8
|
+
hash2?: string;
|
|
9
|
+
nonInteractive: boolean;
|
|
10
|
+
json: boolean;
|
|
11
|
+
}
|
|
5
12
|
export default class FingerprintCompare extends EasCommand {
|
|
6
13
|
static description: string;
|
|
7
|
-
static
|
|
14
|
+
static strict: boolean;
|
|
15
|
+
static examples: string[];
|
|
16
|
+
static args: {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
required: boolean;
|
|
20
|
+
}[];
|
|
8
21
|
static flags: {
|
|
9
22
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
23
|
'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|