eas-cli 14.5.0 → 14.7.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 +130 -76
- 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/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 +11 -1
- package/build/commands/build/inspect.js +26 -18
- package/build/commands/build/internal.js +22 -14
- 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/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/graphql/generated.d.ts +193 -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 +81 -0
- package/build/submit/ios/AppProduce.js +12 -23
- package/build/utils/fingerprintCli.d.ts +2 -1
- package/build/utils/fingerprintCli.js +11 -3
- package/oclif.manifest.json +64 -4
- package/package.json +4 -4
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureTestFlightGroupExistsAsync = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const apple_utils_1 = require("@expo/apple-utils");
|
|
6
|
+
const ensureAppExists_1 = require("./ensureAppExists");
|
|
7
|
+
const log_1 = tslib_1.__importDefault(require("../../../log"));
|
|
8
|
+
const ora_1 = require("../../../ora");
|
|
9
|
+
const prompts_1 = require("../../../prompts");
|
|
10
|
+
// The name of the internal TestFlight group, this should probably never change.
|
|
11
|
+
const AUTO_GROUP_NAME = 'Team (Expo)';
|
|
12
|
+
/**
|
|
13
|
+
* Ensure a TestFlight internal group with access to all builds exists for the app and has all admin users invited to it.
|
|
14
|
+
* This allows users to instantly access their builds from TestFlight after it finishes processing.
|
|
15
|
+
*/
|
|
16
|
+
async function ensureTestFlightGroupExistsAsync(app) {
|
|
17
|
+
const group = await ensureInternalGroupAsync(app);
|
|
18
|
+
const users = await apple_utils_1.User.getAsync(app.context);
|
|
19
|
+
const admins = users.filter(user => user.attributes.roles?.includes(apple_utils_1.UserRole.ADMIN));
|
|
20
|
+
await addAllUsersToInternalGroupAsync(group, admins);
|
|
21
|
+
}
|
|
22
|
+
exports.ensureTestFlightGroupExistsAsync = ensureTestFlightGroupExistsAsync;
|
|
23
|
+
async function ensureInternalGroupAsync(app) {
|
|
24
|
+
const groups = await app.getBetaGroupsAsync({
|
|
25
|
+
query: {
|
|
26
|
+
includes: ['betaTesters'],
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
let betaGroup = groups.find(group => group.attributes.name === AUTO_GROUP_NAME);
|
|
30
|
+
if (!betaGroup) {
|
|
31
|
+
const spinner = (0, ora_1.ora)().start('Creating TestFlight group...');
|
|
32
|
+
try {
|
|
33
|
+
// Apple throw an error if you create the group too quickly after creating the app. We'll retry a few times.
|
|
34
|
+
await pollRetryAsync(async () => {
|
|
35
|
+
betaGroup = await app.createBetaGroupAsync({
|
|
36
|
+
name: AUTO_GROUP_NAME,
|
|
37
|
+
publicLinkEnabled: false,
|
|
38
|
+
publicLinkLimitEnabled: false,
|
|
39
|
+
isInternalGroup: true,
|
|
40
|
+
// Automatically add latest builds to the group without needing to run the command.
|
|
41
|
+
hasAccessToAllBuilds: true,
|
|
42
|
+
});
|
|
43
|
+
}, {
|
|
44
|
+
shouldRetry(error) {
|
|
45
|
+
if ((0, ensureAppExists_1.isAppleError)(error)) {
|
|
46
|
+
spinner.text = `TestFlight not ready, retrying in 25 seconds...`;
|
|
47
|
+
return error.data.errors.some(error => error.code === 'ENTITY_ERROR.RELATIONSHIP.INVALID');
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
spinner.succeed(`TestFlight group created: ${AUTO_GROUP_NAME}`);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
spinner.fail('Failed to create TestFlight group...');
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!betaGroup) {
|
|
60
|
+
throw new Error('Failed to create internal TestFlight group');
|
|
61
|
+
}
|
|
62
|
+
// `hasAccessToAllBuilds` is a newer feature that allows the group to automatically have access to all builds. This cannot be patched so we need to recreate the group.
|
|
63
|
+
if (!betaGroup.attributes.hasAccessToAllBuilds) {
|
|
64
|
+
if (await (0, prompts_1.confirmAsync)({
|
|
65
|
+
message: 'Regenerate internal TestFlight group to allow automatic access to all builds?',
|
|
66
|
+
})) {
|
|
67
|
+
await apple_utils_1.BetaGroup.deleteAsync(app.context, { id: betaGroup.id });
|
|
68
|
+
return await ensureInternalGroupAsync(app);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return betaGroup;
|
|
72
|
+
}
|
|
73
|
+
async function addAllUsersToInternalGroupAsync(group, users) {
|
|
74
|
+
let emails = users
|
|
75
|
+
.filter(user => user.attributes.email)
|
|
76
|
+
.map(user => ({
|
|
77
|
+
email: user.attributes.email,
|
|
78
|
+
firstName: user.attributes.firstName ?? '',
|
|
79
|
+
lastName: user.attributes.lastName ?? '',
|
|
80
|
+
}));
|
|
81
|
+
const { betaTesters } = group.attributes;
|
|
82
|
+
const existingEmails = betaTesters?.map(tester => tester.attributes.email).filter(Boolean) ?? [];
|
|
83
|
+
// Filter out existing beta testers.
|
|
84
|
+
if (betaTesters) {
|
|
85
|
+
emails = emails.filter(user => !existingEmails.find(existingEmail => existingEmail === user.email));
|
|
86
|
+
}
|
|
87
|
+
// No new users to add to the internal group.
|
|
88
|
+
if (!emails.length) {
|
|
89
|
+
// No need to log which users are here on subsequent runs as devs already know the drill at this point.
|
|
90
|
+
log_1.default.debug(`All current admins are already added to the group: ${group.attributes.name}`);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
log_1.default.debug(`Adding ${emails.length} users to internal group: ${group.attributes.name}`);
|
|
94
|
+
log_1.default.debug(`Users: ${emails.map(user => user.email).join(', ')}`);
|
|
95
|
+
const data = await group.createBulkBetaTesterAssignmentsAsync(emails);
|
|
96
|
+
const success = data.attributes.betaTesters.every(tester => {
|
|
97
|
+
if (tester.assignmentResult === 'FAILED') {
|
|
98
|
+
if (tester.errors && Array.isArray(tester.errors) && tester.errors.length) {
|
|
99
|
+
if (tester.errors.length === 1 &&
|
|
100
|
+
tester.errors[0].key === 'Halliday.tester.already.exists') {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
for (const error of tester.errors) {
|
|
104
|
+
log_1.default.error(`Error adding user ${tester.email} to TestFlight group "${group.attributes.name}": ${error.key}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (tester.assignmentResult === 'NOT_QUALIFIED_FOR_INTERNAL_GROUP') {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
});
|
|
114
|
+
if (!success) {
|
|
115
|
+
const groupUrl = await getTestFlightGroupUrlAsync(group);
|
|
116
|
+
log_1.default.error(`Unable to add all admins to TestFlight group "${group.attributes.name}". You can add them manually in App Store Connect. ${groupUrl ?? ''}`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
log_1.default.log(`TestFlight access enabled for: ` +
|
|
120
|
+
data.attributes.betaTesters
|
|
121
|
+
.map(tester => tester.email)
|
|
122
|
+
.filter(Boolean)
|
|
123
|
+
.join(', '));
|
|
124
|
+
// TODO: When we have more TestFlight functionality, we can link to it from here.
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function getTestFlightGroupUrlAsync(group) {
|
|
128
|
+
if (group.context.providerId) {
|
|
129
|
+
try {
|
|
130
|
+
const session = await apple_utils_1.Session.getSessionForProviderIdAsync(group.context.providerId);
|
|
131
|
+
return `https://appstoreconnect.apple.com/teams/${session.provider.publicProviderId}/apps/6741088859/testflight/groups/${group.id}`;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
// Avoid crashing if we can't get the session.
|
|
135
|
+
log_1.default.debug('Failed to get session for provider ID', error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
async function pollRetryAsync(fn, { shouldRetry, retries = 10,
|
|
141
|
+
// 25 seconds was the minium interval I calculated when measuring against 5 second intervals.
|
|
142
|
+
interval = 25000, } = {}) {
|
|
143
|
+
let lastError = null;
|
|
144
|
+
for (let i = 0; i < retries; i++) {
|
|
145
|
+
try {
|
|
146
|
+
return await fn();
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (shouldRetry && !shouldRetry(error)) {
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
lastError = error;
|
|
153
|
+
await new Promise(resolve => setTimeout(resolve, interval));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// eslint-disable-next-line @typescript-eslint/no-throw-literal
|
|
157
|
+
throw lastError;
|
|
158
|
+
}
|
|
@@ -20,6 +20,7 @@ function resolveProfileType(applePlatform, profileClass, isEnterprise) {
|
|
|
20
20
|
return resolveProfileTypeIos(profileClass, isEnterprise);
|
|
21
21
|
case constants_1.ApplePlatform.TV_OS:
|
|
22
22
|
return resolveProfileTypeAppleTv(profileClass, isEnterprise);
|
|
23
|
+
case constants_1.ApplePlatform.VISION_OS:
|
|
23
24
|
case constants_1.ApplePlatform.MAC_OS:
|
|
24
25
|
throw new Error(`${applePlatform} profiles are not supported`);
|
|
25
26
|
}
|
|
@@ -959,6 +959,7 @@ export type AndroidJobInput = {
|
|
|
959
959
|
cache?: InputMaybe<BuildCacheInput>;
|
|
960
960
|
customBuildConfig?: InputMaybe<CustomBuildConfigInput>;
|
|
961
961
|
developmentClient?: InputMaybe<Scalars['Boolean']['input']>;
|
|
962
|
+
environment?: InputMaybe<EnvironmentVariableEnvironment>;
|
|
962
963
|
experimental?: InputMaybe<Scalars['JSONObject']['input']>;
|
|
963
964
|
gradleCommand?: InputMaybe<Scalars['String']['input']>;
|
|
964
965
|
loggerLevel?: InputMaybe<WorkerLoggerLevel>;
|
|
@@ -1401,6 +1402,7 @@ export type AppUpdatesArgs = {
|
|
|
1401
1402
|
export type AppUpdatesPaginatedArgs = {
|
|
1402
1403
|
after?: InputMaybe<Scalars['String']['input']>;
|
|
1403
1404
|
before?: InputMaybe<Scalars['String']['input']>;
|
|
1405
|
+
filter?: InputMaybe<UpdateFilterInput>;
|
|
1404
1406
|
first?: InputMaybe<Scalars['Int']['input']>;
|
|
1405
1407
|
last?: InputMaybe<Scalars['Int']['input']>;
|
|
1406
1408
|
};
|
|
@@ -2460,7 +2462,7 @@ export type BuildArtifacts = {
|
|
|
2460
2462
|
applicationArchiveUrl?: Maybe<Scalars['String']['output']>;
|
|
2461
2463
|
buildArtifactsUrl?: Maybe<Scalars['String']['output']>;
|
|
2462
2464
|
buildUrl?: Maybe<Scalars['String']['output']>;
|
|
2463
|
-
/** @deprecated Use 'runtime.
|
|
2465
|
+
/** @deprecated Use 'runtime.fingerprint.debugInfoUrl' instead. */
|
|
2464
2466
|
fingerprintUrl?: Maybe<Scalars['String']['output']>;
|
|
2465
2467
|
xcodeBuildLogsUrl?: Maybe<Scalars['String']['output']>;
|
|
2466
2468
|
};
|
|
@@ -2487,6 +2489,7 @@ export type BuildFilter = {
|
|
|
2487
2489
|
appVersion?: InputMaybe<Scalars['String']['input']>;
|
|
2488
2490
|
buildProfile?: InputMaybe<Scalars['String']['input']>;
|
|
2489
2491
|
channel?: InputMaybe<Scalars['String']['input']>;
|
|
2492
|
+
developmentClient?: InputMaybe<Scalars['Boolean']['input']>;
|
|
2490
2493
|
distribution?: InputMaybe<DistributionType>;
|
|
2491
2494
|
fingerprintHash?: InputMaybe<Scalars['String']['input']>;
|
|
2492
2495
|
gitCommitHash?: InputMaybe<Scalars['String']['input']>;
|
|
@@ -3454,6 +3457,8 @@ export type EnvironmentVariableMutation = {
|
|
|
3454
3457
|
createEnvironmentVariableForAccount: EnvironmentVariable;
|
|
3455
3458
|
/** Create an environment variable for an App */
|
|
3456
3459
|
createEnvironmentVariableForApp: EnvironmentVariable;
|
|
3460
|
+
/** Bulk delete environment variables */
|
|
3461
|
+
deleteBulkEnvironmentVariables: Array<DeleteEnvironmentVariableResult>;
|
|
3457
3462
|
/** Delete an environment variable */
|
|
3458
3463
|
deleteEnvironmentVariable: DeleteEnvironmentVariableResult;
|
|
3459
3464
|
/** Bulk link shared environment variables */
|
|
@@ -3462,6 +3467,8 @@ export type EnvironmentVariableMutation = {
|
|
|
3462
3467
|
linkSharedEnvironmentVariable: EnvironmentVariable;
|
|
3463
3468
|
/** Unlink shared environment variable */
|
|
3464
3469
|
unlinkSharedEnvironmentVariable: EnvironmentVariable;
|
|
3470
|
+
/** Bulk update environment variables */
|
|
3471
|
+
updateBulkEnvironmentVariables: Array<EnvironmentVariable>;
|
|
3465
3472
|
/** Update an environment variable */
|
|
3466
3473
|
updateEnvironmentVariable: EnvironmentVariable;
|
|
3467
3474
|
};
|
|
@@ -3481,6 +3488,9 @@ export type EnvironmentVariableMutationCreateEnvironmentVariableForAppArgs = {
|
|
|
3481
3488
|
appId: Scalars['ID']['input'];
|
|
3482
3489
|
environmentVariableData: CreateEnvironmentVariableInput;
|
|
3483
3490
|
};
|
|
3491
|
+
export type EnvironmentVariableMutationDeleteBulkEnvironmentVariablesArgs = {
|
|
3492
|
+
ids: Array<Scalars['ID']['input']>;
|
|
3493
|
+
};
|
|
3484
3494
|
export type EnvironmentVariableMutationDeleteEnvironmentVariableArgs = {
|
|
3485
3495
|
id: Scalars['ID']['input'];
|
|
3486
3496
|
};
|
|
@@ -3497,6 +3507,9 @@ export type EnvironmentVariableMutationUnlinkSharedEnvironmentVariableArgs = {
|
|
|
3497
3507
|
environment?: InputMaybe<EnvironmentVariableEnvironment>;
|
|
3498
3508
|
environmentVariableId: Scalars['ID']['input'];
|
|
3499
3509
|
};
|
|
3510
|
+
export type EnvironmentVariableMutationUpdateBulkEnvironmentVariablesArgs = {
|
|
3511
|
+
environmentVariablesData: Array<UpdateEnvironmentVariableInput>;
|
|
3512
|
+
};
|
|
3500
3513
|
export type EnvironmentVariableMutationUpdateEnvironmentVariableArgs = {
|
|
3501
3514
|
environmentVariableData: UpdateEnvironmentVariableInput;
|
|
3502
3515
|
};
|
|
@@ -3691,6 +3704,7 @@ export declare enum GitHubAppEnvironment {
|
|
|
3691
3704
|
}
|
|
3692
3705
|
export type GitHubAppInstallation = {
|
|
3693
3706
|
__typename?: 'GitHubAppInstallation';
|
|
3707
|
+
/** The Expo account that owns the installation entity. */
|
|
3694
3708
|
account: Account;
|
|
3695
3709
|
actor?: Maybe<Actor>;
|
|
3696
3710
|
id: Scalars['ID']['output'];
|
|
@@ -3708,10 +3722,16 @@ export type GitHubAppInstallationAccessibleRepository = {
|
|
|
3708
3722
|
private: Scalars['Boolean']['output'];
|
|
3709
3723
|
url: Scalars['String']['output'];
|
|
3710
3724
|
};
|
|
3725
|
+
export declare enum GitHubAppInstallationAccountType {
|
|
3726
|
+
Organization = "ORGANIZATION",
|
|
3727
|
+
User = "USER"
|
|
3728
|
+
}
|
|
3711
3729
|
export type GitHubAppInstallationMetadata = {
|
|
3712
3730
|
__typename?: 'GitHubAppInstallationMetadata';
|
|
3713
3731
|
githubAccountAvatarUrl?: Maybe<Scalars['String']['output']>;
|
|
3732
|
+
/** The login of the GitHub account that owns the installation. Not the display name. */
|
|
3714
3733
|
githubAccountName?: Maybe<Scalars['String']['output']>;
|
|
3734
|
+
githubAccountType?: Maybe<GitHubAppInstallationAccountType>;
|
|
3715
3735
|
installationStatus: GitHubAppInstallationStatus;
|
|
3716
3736
|
};
|
|
3717
3737
|
export type GitHubAppInstallationMutation = {
|
|
@@ -4237,6 +4257,7 @@ export type IosJobInput = {
|
|
|
4237
4257
|
developmentClient?: InputMaybe<Scalars['Boolean']['input']>;
|
|
4238
4258
|
/** @deprecated */
|
|
4239
4259
|
distribution?: InputMaybe<DistributionType>;
|
|
4260
|
+
environment?: InputMaybe<EnvironmentVariableEnvironment>;
|
|
4240
4261
|
experimental?: InputMaybe<Scalars['JSONObject']['input']>;
|
|
4241
4262
|
loggerLevel?: InputMaybe<WorkerLoggerLevel>;
|
|
4242
4263
|
mode?: InputMaybe<BuildMode>;
|
|
@@ -4320,6 +4341,7 @@ export type IosSubmissionConfigInput = {
|
|
|
4320
4341
|
export type JobRun = {
|
|
4321
4342
|
__typename?: 'JobRun';
|
|
4322
4343
|
app: App;
|
|
4344
|
+
artifacts: Array<WorkflowArtifact>;
|
|
4323
4345
|
/** @deprecated No longer supported */
|
|
4324
4346
|
childJobRun?: Maybe<JobRun>;
|
|
4325
4347
|
createdAt: Scalars['DateTime']['output'];
|
|
@@ -4809,7 +4831,6 @@ export type PublishUpdateGroupInput = {
|
|
|
4809
4831
|
message?: InputMaybe<Scalars['String']['input']>;
|
|
4810
4832
|
rollBackToEmbeddedInfoGroup?: InputMaybe<UpdateRollBackToEmbeddedGroup>;
|
|
4811
4833
|
rolloutInfoGroup?: InputMaybe<UpdateRolloutInfoGroup>;
|
|
4812
|
-
runtimeFingerprintSource?: InputMaybe<FingerprintSourceInput>;
|
|
4813
4834
|
runtimeVersion: Scalars['String']['input'];
|
|
4814
4835
|
turtleJobRunId?: InputMaybe<Scalars['String']['input']>;
|
|
4815
4836
|
updateInfoGroup?: InputMaybe<UpdateInfoGroup>;
|
|
@@ -5206,7 +5227,7 @@ export type Runtime = {
|
|
|
5206
5227
|
builds: AppBuildsConnection;
|
|
5207
5228
|
createdAt: Scalars['DateTime']['output'];
|
|
5208
5229
|
deployments: DeploymentsConnection;
|
|
5209
|
-
|
|
5230
|
+
fingerprint?: Maybe<Fingerprint>;
|
|
5210
5231
|
firstBuildCreatedAt?: Maybe<Scalars['DateTime']['output']>;
|
|
5211
5232
|
id: Scalars['ID']['output'];
|
|
5212
5233
|
updatedAt: Scalars['DateTime']['output'];
|
|
@@ -5885,6 +5906,11 @@ export type UpdateEnvironmentVariableInput = {
|
|
|
5885
5906
|
value?: InputMaybe<Scalars['String']['input']>;
|
|
5886
5907
|
visibility?: InputMaybe<EnvironmentVariableVisibility>;
|
|
5887
5908
|
};
|
|
5909
|
+
export type UpdateFilterInput = {
|
|
5910
|
+
fingerprintHash?: InputMaybe<Scalars['String']['input']>;
|
|
5911
|
+
hasFingerprint?: InputMaybe<Scalars['Boolean']['input']>;
|
|
5912
|
+
runtimeVersion?: InputMaybe<Scalars['String']['input']>;
|
|
5913
|
+
};
|
|
5888
5914
|
export type UpdateGitHubBuildTriggerInput = {
|
|
5889
5915
|
autoSubmit: Scalars['Boolean']['input'];
|
|
5890
5916
|
buildProfile: Scalars['String']['input'];
|
|
@@ -6993,6 +7019,18 @@ export type WorkflowRunsPaginatedArgs = {
|
|
|
6993
7019
|
first?: InputMaybe<Scalars['Int']['input']>;
|
|
6994
7020
|
last?: InputMaybe<Scalars['Int']['input']>;
|
|
6995
7021
|
};
|
|
7022
|
+
export type WorkflowArtifact = {
|
|
7023
|
+
__typename?: 'WorkflowArtifact';
|
|
7024
|
+
contentType?: Maybe<Scalars['String']['output']>;
|
|
7025
|
+
createdAt: Scalars['DateTime']['output'];
|
|
7026
|
+
downloadUrl?: Maybe<Scalars['String']['output']>;
|
|
7027
|
+
fileSizeBytes?: Maybe<Scalars['Int']['output']>;
|
|
7028
|
+
filename: Scalars['String']['output'];
|
|
7029
|
+
id: Scalars['ID']['output'];
|
|
7030
|
+
jobRun: JobRun;
|
|
7031
|
+
name: Scalars['String']['output'];
|
|
7032
|
+
updatedAt: Scalars['DateTime']['output'];
|
|
7033
|
+
};
|
|
6996
7034
|
export type WorkflowJob = {
|
|
6997
7035
|
__typename?: 'WorkflowJob';
|
|
6998
7036
|
createdAt: Scalars['DateTime']['output'];
|
|
@@ -7158,6 +7196,7 @@ export type WorkflowRunMutationCreateWorkflowRunArgs = {
|
|
|
7158
7196
|
workflowRunInput: WorkflowRunInput;
|
|
7159
7197
|
};
|
|
7160
7198
|
export type WorkflowRunMutationRetryWorkflowRunArgs = {
|
|
7199
|
+
fromFailedJobs?: InputMaybe<Scalars['Boolean']['input']>;
|
|
7161
7200
|
workflowRunId: Scalars['ID']['input'];
|
|
7162
7201
|
};
|
|
7163
7202
|
export type WorkflowRunQuery = {
|
|
@@ -7178,6 +7217,10 @@ export declare enum WorkflowRunStatus {
|
|
|
7178
7217
|
}
|
|
7179
7218
|
export declare enum WorkflowRunTriggerEventType {
|
|
7180
7219
|
Github = "GITHUB",
|
|
7220
|
+
GithubPullRequestOpened = "GITHUB_PULL_REQUEST_OPENED",
|
|
7221
|
+
GithubPullRequestReopened = "GITHUB_PULL_REQUEST_REOPENED",
|
|
7222
|
+
GithubPullRequestSynchronize = "GITHUB_PULL_REQUEST_SYNCHRONIZE",
|
|
7223
|
+
GithubPush = "GITHUB_PUSH",
|
|
7181
7224
|
Manual = "MANUAL"
|
|
7182
7225
|
}
|
|
7183
7226
|
export type WorkflowRunsConnection = {
|
|
@@ -11558,6 +11601,28 @@ export type CreateFingeprintMutation = {
|
|
|
11558
11601
|
id: string;
|
|
11559
11602
|
hash: string;
|
|
11560
11603
|
debugInfoUrl?: string | null;
|
|
11604
|
+
builds: {
|
|
11605
|
+
__typename?: 'AppBuildsConnection';
|
|
11606
|
+
edges: Array<{
|
|
11607
|
+
__typename?: 'AppBuildEdge';
|
|
11608
|
+
node: {
|
|
11609
|
+
__typename?: 'Build';
|
|
11610
|
+
platform: AppPlatform;
|
|
11611
|
+
id: string;
|
|
11612
|
+
};
|
|
11613
|
+
}>;
|
|
11614
|
+
};
|
|
11615
|
+
updates: {
|
|
11616
|
+
__typename?: 'AppUpdatesConnection';
|
|
11617
|
+
edges: Array<{
|
|
11618
|
+
__typename?: 'AppUpdateEdge';
|
|
11619
|
+
node: {
|
|
11620
|
+
__typename?: 'Update';
|
|
11621
|
+
id: string;
|
|
11622
|
+
platform: string;
|
|
11623
|
+
};
|
|
11624
|
+
}>;
|
|
11625
|
+
};
|
|
11561
11626
|
};
|
|
11562
11627
|
};
|
|
11563
11628
|
};
|
|
@@ -12547,6 +12612,28 @@ export type BuildsWithFingerprintByIdQuery = {
|
|
|
12547
12612
|
id: string;
|
|
12548
12613
|
hash: string;
|
|
12549
12614
|
debugInfoUrl?: string | null;
|
|
12615
|
+
builds: {
|
|
12616
|
+
__typename?: 'AppBuildsConnection';
|
|
12617
|
+
edges: Array<{
|
|
12618
|
+
__typename?: 'AppBuildEdge';
|
|
12619
|
+
node: {
|
|
12620
|
+
__typename?: 'Build';
|
|
12621
|
+
platform: AppPlatform;
|
|
12622
|
+
id: string;
|
|
12623
|
+
};
|
|
12624
|
+
}>;
|
|
12625
|
+
};
|
|
12626
|
+
updates: {
|
|
12627
|
+
__typename?: 'AppUpdatesConnection';
|
|
12628
|
+
edges: Array<{
|
|
12629
|
+
__typename?: 'AppUpdateEdge';
|
|
12630
|
+
node: {
|
|
12631
|
+
__typename?: 'Update';
|
|
12632
|
+
id: string;
|
|
12633
|
+
platform: string;
|
|
12634
|
+
};
|
|
12635
|
+
}>;
|
|
12636
|
+
};
|
|
12550
12637
|
} | null;
|
|
12551
12638
|
error?: {
|
|
12552
12639
|
__typename?: 'BuildError';
|
|
@@ -13035,6 +13122,65 @@ export type EnvironmentVariablesSharedWithSensitiveQuery = {
|
|
|
13035
13122
|
};
|
|
13036
13123
|
};
|
|
13037
13124
|
};
|
|
13125
|
+
export type FingerprintsByAppIdQueryVariables = Exact<{
|
|
13126
|
+
appId: Scalars['String']['input'];
|
|
13127
|
+
after?: InputMaybe<Scalars['String']['input']>;
|
|
13128
|
+
first?: InputMaybe<Scalars['Int']['input']>;
|
|
13129
|
+
before?: InputMaybe<Scalars['String']['input']>;
|
|
13130
|
+
last?: InputMaybe<Scalars['Int']['input']>;
|
|
13131
|
+
fingerprintFilter?: InputMaybe<FingerprintFilterInput>;
|
|
13132
|
+
}>;
|
|
13133
|
+
export type FingerprintsByAppIdQuery = {
|
|
13134
|
+
__typename?: 'RootQuery';
|
|
13135
|
+
app: {
|
|
13136
|
+
__typename?: 'AppQuery';
|
|
13137
|
+
byId: {
|
|
13138
|
+
__typename?: 'App';
|
|
13139
|
+
id: string;
|
|
13140
|
+
fingerprintsPaginated: {
|
|
13141
|
+
__typename?: 'AppFingerprintsConnection';
|
|
13142
|
+
edges: Array<{
|
|
13143
|
+
__typename?: 'AppFingerprintEdge';
|
|
13144
|
+
node: {
|
|
13145
|
+
__typename?: 'Fingerprint';
|
|
13146
|
+
id: string;
|
|
13147
|
+
hash: string;
|
|
13148
|
+
debugInfoUrl?: string | null;
|
|
13149
|
+
builds: {
|
|
13150
|
+
__typename?: 'AppBuildsConnection';
|
|
13151
|
+
edges: Array<{
|
|
13152
|
+
__typename?: 'AppBuildEdge';
|
|
13153
|
+
node: {
|
|
13154
|
+
__typename?: 'Build';
|
|
13155
|
+
platform: AppPlatform;
|
|
13156
|
+
id: string;
|
|
13157
|
+
};
|
|
13158
|
+
}>;
|
|
13159
|
+
};
|
|
13160
|
+
updates: {
|
|
13161
|
+
__typename?: 'AppUpdatesConnection';
|
|
13162
|
+
edges: Array<{
|
|
13163
|
+
__typename?: 'AppUpdateEdge';
|
|
13164
|
+
node: {
|
|
13165
|
+
__typename?: 'Update';
|
|
13166
|
+
id: string;
|
|
13167
|
+
platform: string;
|
|
13168
|
+
};
|
|
13169
|
+
}>;
|
|
13170
|
+
};
|
|
13171
|
+
};
|
|
13172
|
+
}>;
|
|
13173
|
+
pageInfo: {
|
|
13174
|
+
__typename?: 'PageInfo';
|
|
13175
|
+
hasNextPage: boolean;
|
|
13176
|
+
hasPreviousPage: boolean;
|
|
13177
|
+
startCursor?: string | null;
|
|
13178
|
+
endCursor?: string | null;
|
|
13179
|
+
};
|
|
13180
|
+
};
|
|
13181
|
+
};
|
|
13182
|
+
};
|
|
13183
|
+
};
|
|
13038
13184
|
export type GoogleServiceAccountKeyByIdQueryVariables = Exact<{
|
|
13039
13185
|
ascApiKeyId: Scalars['ID']['input'];
|
|
13040
13186
|
}>;
|
|
@@ -13941,6 +14087,28 @@ export type BuildWithFingerprintFragment = {
|
|
|
13941
14087
|
id: string;
|
|
13942
14088
|
hash: string;
|
|
13943
14089
|
debugInfoUrl?: string | null;
|
|
14090
|
+
builds: {
|
|
14091
|
+
__typename?: 'AppBuildsConnection';
|
|
14092
|
+
edges: Array<{
|
|
14093
|
+
__typename?: 'AppBuildEdge';
|
|
14094
|
+
node: {
|
|
14095
|
+
__typename?: 'Build';
|
|
14096
|
+
platform: AppPlatform;
|
|
14097
|
+
id: string;
|
|
14098
|
+
};
|
|
14099
|
+
}>;
|
|
14100
|
+
};
|
|
14101
|
+
updates: {
|
|
14102
|
+
__typename?: 'AppUpdatesConnection';
|
|
14103
|
+
edges: Array<{
|
|
14104
|
+
__typename?: 'AppUpdateEdge';
|
|
14105
|
+
node: {
|
|
14106
|
+
__typename?: 'Update';
|
|
14107
|
+
id: string;
|
|
14108
|
+
platform: string;
|
|
14109
|
+
};
|
|
14110
|
+
}>;
|
|
14111
|
+
};
|
|
13944
14112
|
} | null;
|
|
13945
14113
|
error?: {
|
|
13946
14114
|
__typename?: 'BuildError';
|
|
@@ -14021,6 +14189,28 @@ export type FingerprintFragment = {
|
|
|
14021
14189
|
id: string;
|
|
14022
14190
|
hash: string;
|
|
14023
14191
|
debugInfoUrl?: string | null;
|
|
14192
|
+
builds: {
|
|
14193
|
+
__typename?: 'AppBuildsConnection';
|
|
14194
|
+
edges: Array<{
|
|
14195
|
+
__typename?: 'AppBuildEdge';
|
|
14196
|
+
node: {
|
|
14197
|
+
__typename?: 'Build';
|
|
14198
|
+
platform: AppPlatform;
|
|
14199
|
+
id: string;
|
|
14200
|
+
};
|
|
14201
|
+
}>;
|
|
14202
|
+
};
|
|
14203
|
+
updates: {
|
|
14204
|
+
__typename?: 'AppUpdatesConnection';
|
|
14205
|
+
edges: Array<{
|
|
14206
|
+
__typename?: 'AppUpdateEdge';
|
|
14207
|
+
node: {
|
|
14208
|
+
__typename?: 'Update';
|
|
14209
|
+
id: string;
|
|
14210
|
+
platform: string;
|
|
14211
|
+
};
|
|
14212
|
+
}>;
|
|
14213
|
+
};
|
|
14024
14214
|
};
|
|
14025
14215
|
export type RuntimeFragment = {
|
|
14026
14216
|
__typename?: 'Runtime';
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.Feature = exports.Experiment = exports.EnvironmentVariableVisibility = exports.EnvironmentVariableScope = exports.EnvironmentVariableEnvironment = exports.EnvironmentSecretType = exports.EntityTypeName = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildWaiverType = exports.EasBuildDeprecationInfoType = exports.EasBuildBillingResourceClass = exports.DistributionType = exports.CustomDomainStatus = exports.CustomDomainDnsRecordType = exports.CrashSampleFor = exports.ContinentCode = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildRetryDisabledReason = exports.BuildResourceClass = exports.BuildPriority = exports.BuildPhase = exports.BuildMode = exports.BuildLimitThresholdExceededMetadataType = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.BackgroundJobState = exports.BackgroundJobResultType = exports.AuthProviderIdentifier = exports.AuthProtocolType = exports.AuditLogsExportFormat = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleTeamType = exports.AppleDeviceClass = exports.AppUploadSessionType = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AppInternalDistributionBuildPrivacy = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = exports.AccountUploadSessionType = exports.AccountAppsSortByField = void 0;
|
|
10
|
-
exports.
|
|
11
|
-
exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserEntityTypeName = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = void 0;
|
|
10
|
+
exports.UploadSessionType = exports.TargetEntityMutationType = exports.SubmissionStatus = exports.SubmissionPriority = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ResponseType = exports.ResponseStatusType = exports.ResponseCacheStatus = exports.ResourceClassExperiment = exports.RequestsOrderByField = exports.RequestsOrderByDirection = exports.RequestMethod = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OnboardingEnvironment = exports.OnboardingDeviceType = exports.OfferType = exports.NotificationType = exports.NotificationEvent = exports.MailchimpTag = exports.MailchimpAudience = exports.JobRunStatus = exports.JobRunPriority = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.InsightsFilterType = exports.GitHubJobRunTriggerType = exports.GitHubJobRunTriggerRunStatus = exports.GitHubJobRunJobType = exports.GitHubBuildTriggerType = exports.GitHubBuildTriggerRunStatus = exports.GitHubBuildTriggerExecutionBehavior = exports.GitHubAppInstallationStatus = exports.GitHubAppInstallationAccountType = exports.GitHubAppEnvironment = exports.FingerprintSourceType = void 0;
|
|
11
|
+
exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserEntityTypeName = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = void 0;
|
|
12
12
|
var AccountAppsSortByField;
|
|
13
13
|
(function (AccountAppsSortByField) {
|
|
14
14
|
AccountAppsSortByField["LatestActivityTime"] = "LATEST_ACTIVITY_TIME";
|
|
@@ -422,6 +422,11 @@ var GitHubAppEnvironment;
|
|
|
422
422
|
GitHubAppEnvironment["Production"] = "PRODUCTION";
|
|
423
423
|
GitHubAppEnvironment["Staging"] = "STAGING";
|
|
424
424
|
})(GitHubAppEnvironment || (exports.GitHubAppEnvironment = GitHubAppEnvironment = {}));
|
|
425
|
+
var GitHubAppInstallationAccountType;
|
|
426
|
+
(function (GitHubAppInstallationAccountType) {
|
|
427
|
+
GitHubAppInstallationAccountType["Organization"] = "ORGANIZATION";
|
|
428
|
+
GitHubAppInstallationAccountType["User"] = "USER";
|
|
429
|
+
})(GitHubAppInstallationAccountType || (exports.GitHubAppInstallationAccountType = GitHubAppInstallationAccountType = {}));
|
|
425
430
|
var GitHubAppInstallationStatus;
|
|
426
431
|
(function (GitHubAppInstallationStatus) {
|
|
427
432
|
GitHubAppInstallationStatus["Active"] = "ACTIVE";
|
|
@@ -876,5 +881,9 @@ var WorkflowRunStatus;
|
|
|
876
881
|
var WorkflowRunTriggerEventType;
|
|
877
882
|
(function (WorkflowRunTriggerEventType) {
|
|
878
883
|
WorkflowRunTriggerEventType["Github"] = "GITHUB";
|
|
884
|
+
WorkflowRunTriggerEventType["GithubPullRequestOpened"] = "GITHUB_PULL_REQUEST_OPENED";
|
|
885
|
+
WorkflowRunTriggerEventType["GithubPullRequestReopened"] = "GITHUB_PULL_REQUEST_REOPENED";
|
|
886
|
+
WorkflowRunTriggerEventType["GithubPullRequestSynchronize"] = "GITHUB_PULL_REQUEST_SYNCHRONIZE";
|
|
887
|
+
WorkflowRunTriggerEventType["GithubPush"] = "GITHUB_PUSH";
|
|
879
888
|
WorkflowRunTriggerEventType["Manual"] = "MANUAL";
|
|
880
889
|
})(WorkflowRunTriggerEventType || (exports.WorkflowRunTriggerEventType = WorkflowRunTriggerEventType = {}));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
|
|
2
|
+
import { FingerprintFilterInput, FingerprintFragment, FingerprintsByAppIdQuery } from '../generated';
|
|
3
|
+
export declare const FingerprintQuery: {
|
|
4
|
+
byHashAsync(graphqlClient: ExpoGraphqlClient, { appId, hash, }: {
|
|
5
|
+
appId: string;
|
|
6
|
+
hash: string;
|
|
7
|
+
}): Promise<FingerprintFragment | null>;
|
|
8
|
+
getFingerprintsAsync(graphqlClient: ExpoGraphqlClient, { appId, first, after, last, before, fingerprintFilter, }: {
|
|
9
|
+
appId: string;
|
|
10
|
+
first?: number | undefined;
|
|
11
|
+
after?: string | undefined;
|
|
12
|
+
last?: number | undefined;
|
|
13
|
+
before?: string | undefined;
|
|
14
|
+
fingerprintFilter?: FingerprintFilterInput | undefined;
|
|
15
|
+
}): Promise<FingerprintsByAppIdQuery['app']['byId']['fingerprintsPaginated']>;
|
|
16
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FingerprintQuery = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const graphql_1 = require("graphql");
|
|
6
|
+
const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
|
|
7
|
+
const client_1 = require("../client");
|
|
8
|
+
const Fingerprint_1 = require("../types/Fingerprint");
|
|
9
|
+
exports.FingerprintQuery = {
|
|
10
|
+
async byHashAsync(graphqlClient, { appId, hash, }) {
|
|
11
|
+
const fingerprintConnection = await exports.FingerprintQuery.getFingerprintsAsync(graphqlClient, {
|
|
12
|
+
appId,
|
|
13
|
+
fingerprintFilter: { hashes: [hash] },
|
|
14
|
+
first: 1,
|
|
15
|
+
});
|
|
16
|
+
const fingerprints = fingerprintConnection.edges.map(edge => edge.node);
|
|
17
|
+
return fingerprints[0] ?? null;
|
|
18
|
+
},
|
|
19
|
+
async getFingerprintsAsync(graphqlClient, { appId, first, after, last, before, fingerprintFilter, }) {
|
|
20
|
+
const data = await (0, client_1.withErrorHandlingAsync)(graphqlClient
|
|
21
|
+
.query((0, graphql_tag_1.default) `
|
|
22
|
+
query FingerprintsByAppId(
|
|
23
|
+
$appId: String!
|
|
24
|
+
$after: String
|
|
25
|
+
$first: Int
|
|
26
|
+
$before: String
|
|
27
|
+
$last: Int
|
|
28
|
+
$fingerprintFilter: FingerprintFilterInput
|
|
29
|
+
) {
|
|
30
|
+
app {
|
|
31
|
+
byId(appId: $appId) {
|
|
32
|
+
id
|
|
33
|
+
fingerprintsPaginated(
|
|
34
|
+
after: $after
|
|
35
|
+
first: $first
|
|
36
|
+
before: $before
|
|
37
|
+
last: $last
|
|
38
|
+
filter: $fingerprintFilter
|
|
39
|
+
) {
|
|
40
|
+
edges {
|
|
41
|
+
node {
|
|
42
|
+
id
|
|
43
|
+
...FingerprintFragment
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
pageInfo {
|
|
47
|
+
hasNextPage
|
|
48
|
+
hasPreviousPage
|
|
49
|
+
startCursor
|
|
50
|
+
endCursor
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
${(0, graphql_1.print)(Fingerprint_1.FingerprintFragmentNode)}
|
|
57
|
+
`, { appId, after, first, before, last, fingerprintFilter }, { additionalTypenames: ['Fingerprint'] })
|
|
58
|
+
.toPromise());
|
|
59
|
+
return data.app?.byId.fingerprintsPaginated;
|
|
60
|
+
},
|
|
61
|
+
};
|
|
@@ -8,5 +8,23 @@ exports.FingerprintFragmentNode = (0, graphql_tag_1.default) `
|
|
|
8
8
|
id
|
|
9
9
|
hash
|
|
10
10
|
debugInfoUrl
|
|
11
|
+
builds(first: 1) {
|
|
12
|
+
edges {
|
|
13
|
+
node {
|
|
14
|
+
id
|
|
15
|
+
... on Build {
|
|
16
|
+
platform
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
updates(first: 1) {
|
|
22
|
+
edges {
|
|
23
|
+
node {
|
|
24
|
+
id
|
|
25
|
+
platform
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
11
29
|
}
|
|
12
30
|
`;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ExpoConfig } from '@expo/config';
|
|
2
|
+
/** Non-exempt encryption must be set on every build in App Store Connect, we move it to before the build process to attempt only setting it once for the entire life-cycle of the project. */
|
|
3
|
+
export declare function ensureNonExemptEncryptionIsDefinedForManagedProjectAsync({ projectDir, exp, nonInteractive, }: {
|
|
4
|
+
projectDir: string;
|
|
5
|
+
exp: ExpoConfig;
|
|
6
|
+
nonInteractive: boolean;
|
|
7
|
+
}): Promise<void>;
|