Skip to content

Commit 0371cfa

Browse files
committed
Use credentials types from eas-build-job where possible
1 parent e9064b7 commit 0371cfa

13 files changed

+88
-128
lines changed

packages/eas-cli/src/build/ios/build.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { transformJob } from './graphql';
66
import { prepareJobAsync } from './prepareJob';
77
import { syncProjectConfigurationAsync } from './syncProjectConfiguration';
88
import { resolveRemoteBuildNumberAsync } from './version';
9-
import { IosCredentials } from '../../credentials/ios/types';
109
import { BuildParamsInput } from '../../graphql/generated';
1110
import { BuildMutation, BuildResult } from '../../graphql/mutations/BuildMutation';
1211
import { ensureBundleIdentifierIsDefinedForManagedProjectAsync } from '../../project/ios/bundleIdentifier';
@@ -94,7 +93,7 @@ export async function prepareIosBuildAsync(
9493
},
9594
prepareJobAsync: async (
9695
ctx: BuildContext<Platform.IOS>,
97-
jobData: JobData<IosCredentials>
96+
jobData: JobData<Ios.BuildCredentials>
9897
): Promise<Job> => {
9998
return await prepareJobAsync(ctx, {
10099
...jobData,

packages/eas-cli/src/build/ios/credentials.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
import { Platform } from '@expo/eas-build-job';
1+
import { Ios, Platform } from '@expo/eas-build-job';
22
import { BuildProfile } from '@expo/eas-json';
33

44
import { CredentialsContext } from '../../credentials/context';
55
import IosCredentialsProvider from '../../credentials/ios/IosCredentialsProvider';
66
import { getAppFromContextAsync } from '../../credentials/ios/actions/BuildCredentialsUtils';
7-
import { IosCredentials, Target } from '../../credentials/ios/types';
7+
import { Target } from '../../credentials/ios/types';
88
import { CredentialsResult } from '../build';
99
import { BuildContext } from '../context';
1010
import { logCredentialsSource } from '../utils/credentials';
1111

1212
export async function ensureIosCredentialsAsync(
1313
buildCtx: BuildContext<Platform.IOS>,
1414
targets: Target[]
15-
): Promise<CredentialsResult<IosCredentials> | undefined> {
15+
): Promise<CredentialsResult<Ios.BuildCredentials> | undefined> {
1616
if (!shouldProvideCredentials(buildCtx)) {
1717
return;
1818
}
@@ -37,7 +37,7 @@ export async function ensureIosCredentialsForBuildResignAsync(
3737
credentialsCtx: CredentialsContext,
3838
targets: Target[],
3939
buildProfile: BuildProfile<Platform.IOS>
40-
): Promise<CredentialsResult<IosCredentials>> {
40+
): Promise<CredentialsResult<Ios.BuildCredentials>> {
4141
const provider = new IosCredentialsProvider(credentialsCtx, {
4242
app: await getAppFromContextAsync(credentialsCtx),
4343
targets,

packages/eas-cli/src/build/ios/prepareJob.ts

+6-17
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,14 @@ import nullthrows from 'nullthrows';
1212
import path from 'path';
1313
import slash from 'slash';
1414

15-
import { IosCredentials, TargetCredentials } from '../../credentials/ios/types';
1615
import { IosJobSecretsInput } from '../../graphql/generated';
1716
import { getCustomBuildConfigPath } from '../../project/customBuildConfig';
1817
import { getUsername } from '../../project/projectUtils';
1918
import { BuildContext } from '../context';
2019

2120
interface JobData {
2221
projectArchive: ArchiveSource;
23-
credentials?: IosCredentials;
22+
credentials?: Ios.BuildCredentials;
2423
buildScheme: string;
2524
}
2625

@@ -41,7 +40,7 @@ export async function prepareJobAsync(
4140
if (jobData.credentials) {
4241
const targetNames = Object.keys(jobData.credentials);
4342
for (const targetName of targetNames) {
44-
buildCredentials[targetName] = prepareTargetCredentials(jobData.credentials[targetName]);
43+
buildCredentials[targetName] = jobData.credentials[targetName];
4544
}
4645
}
4746

@@ -102,28 +101,18 @@ export async function prepareJobAsync(
102101
return sanitizeJob(job);
103102
}
104103

105-
export function prepareCredentialsToResign(credentials: IosCredentials): IosJobSecretsInput {
104+
export function prepareCredentialsToResign(credentials: Ios.BuildCredentials): IosJobSecretsInput {
106105
const buildCredentials: IosJobSecretsInput['buildCredentials'] = [];
107106
for (const targetName of Object.keys(credentials ?? {})) {
108107
buildCredentials.push({
109108
targetName,
110-
provisioningProfileBase64: nullthrows(credentials?.[targetName].provisioningProfile),
109+
provisioningProfileBase64: nullthrows(credentials?.[targetName].provisioningProfileBase64),
111110
distributionCertificate: {
112-
dataBase64: nullthrows(credentials?.[targetName].distributionCertificate.certificateP12),
113-
password: nullthrows(credentials?.[targetName].distributionCertificate.certificatePassword),
111+
dataBase64: nullthrows(credentials?.[targetName].distributionCertificate.dataBase64),
112+
password: nullthrows(credentials?.[targetName].distributionCertificate.password),
114113
},
115114
});
116115
}
117116

118117
return { buildCredentials };
119118
}
120-
121-
function prepareTargetCredentials(targetCredentials: TargetCredentials): Ios.TargetCredentials {
122-
return {
123-
provisioningProfileBase64: targetCredentials.provisioningProfile,
124-
distributionCertificate: {
125-
dataBase64: targetCredentials.distributionCertificate.certificateP12,
126-
password: targetCredentials.distributionCertificate.certificatePassword,
127-
},
128-
};
129-
}

packages/eas-cli/src/credentials/credentialsJson/read.ts

+9-11
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1+
import { Ios } from '@expo/eas-build-job';
12
import fs from 'fs-extra';
23
import path from 'path';
34

45
import {
56
AndroidCredentials,
67
CredentialsJson,
7-
CredentialsJsonIosCredentials,
88
CredentialsJsonIosTargetCredentials,
99
CredentialsJsonSchema,
10-
IosCredentials,
11-
IosTargetCredentials,
1210
} from './types';
1311
import { getCredentialsJsonPath } from './utils';
1412
import { Target } from '../ios/types';
@@ -32,15 +30,15 @@ export async function readAndroidCredentialsAsync(projectDir: string): Promise<A
3230
export async function readIosCredentialsAsync(
3331
projectDir: string,
3432
applicationTarget: Target
35-
): Promise<IosCredentials> {
33+
): Promise<Ios.BuildCredentials> {
3634
const credentialsJson = await readAsync(projectDir);
3735
if (!credentialsJson.ios) {
3836
throw new Error('iOS credentials are missing in credentials.json');
3937
}
4038

4139
if (isCredentialsMap(credentialsJson.ios)) {
4240
const targets = Object.keys(credentialsJson.ios);
43-
const iosCredentials: IosCredentials = {};
41+
const iosCredentials: Ios.BuildCredentials = {};
4442
for (const target of targets) {
4543
iosCredentials[target] = await readCredentialsForTargetAsync(
4644
projectDir,
@@ -60,26 +58,26 @@ export async function readIosCredentialsAsync(
6058
}
6159

6260
function isCredentialsMap(
63-
ios: CredentialsJsonIosTargetCredentials | CredentialsJsonIosCredentials
64-
): ios is CredentialsJsonIosCredentials {
61+
ios: Exclude<CredentialsJson['ios'], undefined>
62+
): ios is Record<string, CredentialsJsonIosTargetCredentials> {
6563
return typeof ios.provisioningProfilePath !== 'string';
6664
}
6765

6866
async function readCredentialsForTargetAsync(
6967
projectDir: string,
7068
targetCredentials: CredentialsJsonIosTargetCredentials
71-
): Promise<IosTargetCredentials> {
69+
): Promise<Ios.TargetCredentials> {
7270
return {
73-
provisioningProfile: await fs.readFile(
71+
provisioningProfileBase64: await fs.readFile(
7472
getAbsolutePath(projectDir, targetCredentials.provisioningProfilePath),
7573
'base64'
7674
),
7775
distributionCertificate: {
78-
certificateP12: await fs.readFile(
76+
dataBase64: await fs.readFile(
7977
getAbsolutePath(projectDir, targetCredentials.distributionCertificate.path),
8078
'base64'
8179
),
82-
certificatePassword: targetCredentials.distributionCertificate.password,
80+
password: targetCredentials.distributionCertificate.password,
8381
},
8482
};
8583
}

packages/eas-cli/src/credentials/credentialsJson/types.ts

+14-26
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,39 @@ import Joi from 'joi';
22

33
import { Keystore } from '../android/credentials';
44

5-
export interface CredentialsJson {
6-
android?: CredentialsJsonAndroidCredentials;
7-
ios?: CredentialsJsonIosTargetCredentials | CredentialsJsonIosCredentials;
8-
}
9-
10-
export interface CredentialsJsonAndroidCredentials {
11-
keystore: {
12-
keystorePath: string;
13-
keystorePassword: string;
14-
keyAlias: string;
15-
keyPassword?: string;
16-
};
17-
}
18-
195
export interface CredentialsJsonIosTargetCredentials {
206
provisioningProfilePath: string;
217
distributionCertificate: {
228
path: string;
239
password: string;
2410
};
2511
}
26-
export type CredentialsJsonIosCredentials = Record<string, CredentialsJsonIosTargetCredentials>;
2712

2813
export interface AndroidCredentials {
2914
keystore: Keystore;
3015
}
3116

32-
export interface IosTargetCredentials {
33-
provisioningProfile: string;
34-
distributionCertificate: {
35-
certificateP12: string;
36-
certificatePassword: string;
37-
};
38-
}
39-
export type IosCredentials = Record<string, IosTargetCredentials>;
40-
41-
const CredentialsJsonIosTargetCredentialsSchema = Joi.object({
17+
const CredentialsJsonIosTargetCredentialsSchema = Joi.object<CredentialsJsonIosTargetCredentials>({
4218
provisioningProfilePath: Joi.string().required(),
4319
distributionCertificate: Joi.object({
4420
path: Joi.string().required(),
4521
password: Joi.string().allow('').required(),
4622
}).required(),
4723
});
4824

49-
export const CredentialsJsonSchema = Joi.object({
25+
export type CredentialsJson = {
26+
android?: {
27+
keystore: {
28+
keystorePath: string;
29+
keystorePassword: string;
30+
keyAlias: string;
31+
keyPassword?: string;
32+
};
33+
};
34+
ios?: CredentialsJsonIosTargetCredentials | Record<string, CredentialsJsonIosTargetCredentials>;
35+
};
36+
37+
export const CredentialsJsonSchema = Joi.object<CredentialsJson>({
5038
android: Joi.object({
5139
keystore: Joi.object({
5240
keystorePath: Joi.string().required(),

packages/eas-cli/src/credentials/credentialsJson/update.ts

+14-17
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1+
import { Ios } from '@expo/eas-build-job';
12
import fs from 'fs-extra';
23
import nullthrows from 'nullthrows';
34
import path from 'path';
45

56
import { readRawAsync } from './read';
6-
import {
7-
CredentialsJson,
8-
CredentialsJsonIosCredentials,
9-
CredentialsJsonIosTargetCredentials,
10-
} from './types';
7+
import { CredentialsJson, CredentialsJsonIosTargetCredentials } from './types';
118
import { getCredentialsJsonPath } from './utils';
129
import { AndroidAppBuildCredentialsFragment, IosDistributionType } from '../../graphql/generated';
1310
import Log from '../../log';
@@ -16,7 +13,7 @@ import zipObject from '../../utils/expodash/zipObject';
1613
import GitClient from '../../vcs/clients/git';
1714
import { Client } from '../../vcs/vcs';
1815
import { CredentialsContext } from '../context';
19-
import { App, Target, TargetCredentials } from '../ios/types';
16+
import { App, Target } from '../ios/types';
2017

2118
/**
2219
* Update Android credentials.json with values from www, content of credentials.json
@@ -112,7 +109,7 @@ export async function updateIosCredentialsAsync(
112109
throw new Error(errorMessage);
113110
}
114111

115-
const iosCredentials: CredentialsJsonIosCredentials = {};
112+
const iosCredentials: CredentialsJson['ios'] = {};
116113
const targetCredentialsPathsMap = createTargetCredentialsPathsMap(
117114
targets,
118115
rawCredentialsJson.ios
@@ -209,7 +206,7 @@ async function getTargetBuildCredentialsAsync(
209206
app: App,
210207
target: Target,
211208
iosDistributionType: IosDistributionType
212-
): Promise<TargetCredentials | null> {
209+
): Promise<Ios.TargetCredentials | null> {
213210
const appCredentials = await ctx.ios.getIosAppCredentialsWithCommonFieldsAsync(
214211
ctx.graphqlClient,
215212
{
@@ -237,12 +234,12 @@ async function getTargetBuildCredentialsAsync(
237234
}
238235
return {
239236
distributionCertificate: {
240-
certificateP12: nullthrows(appBuildCredentials.distributionCertificate.certificateP12),
241-
certificatePassword: nullthrows(
242-
appBuildCredentials.distributionCertificate.certificatePassword
243-
),
237+
dataBase64: nullthrows(appBuildCredentials.distributionCertificate.certificateP12),
238+
password: nullthrows(appBuildCredentials.distributionCertificate.certificatePassword),
244239
},
245-
provisioningProfile: nullthrows(appBuildCredentials.provisioningProfile.provisioningProfile),
240+
provisioningProfileBase64: nullthrows(
241+
appBuildCredentials.provisioningProfile.provisioningProfile
242+
),
246243
};
247244
}
248245

@@ -252,7 +249,7 @@ async function backupTargetCredentialsAsync(
252249
targetCredentials,
253250
targetCredentialsPaths,
254251
}: {
255-
targetCredentials: TargetCredentials;
252+
targetCredentials: Ios.TargetCredentials;
256253
targetCredentialsPaths: TargetCredentialsPaths;
257254
}
258255
): Promise<CredentialsJsonIosTargetCredentials> {
@@ -262,20 +259,20 @@ async function backupTargetCredentialsAsync(
262259
await updateFileAsync(
263260
ctx.projectDir,
264261
provisioningProfilePath,
265-
targetCredentials.provisioningProfile
262+
targetCredentials.provisioningProfileBase64
266263
);
267264

268265
Log.log(`Writing Distribution Certificate to ${distCertPath}`);
269266
await updateFileAsync(
270267
ctx.projectDir,
271268
distCertPath,
272-
targetCredentials.distributionCertificate.certificateP12
269+
targetCredentials.distributionCertificate.dataBase64
273270
);
274271

275272
return {
276273
distributionCertificate: {
277274
path: distCertPath,
278-
password: targetCredentials.distributionCertificate.certificatePassword,
275+
password: targetCredentials.distributionCertificate.password,
279276
},
280277
provisioningProfilePath,
281278
};

packages/eas-cli/src/credentials/credentialsJson/utils.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { Ios } from '@expo/eas-build-job';
12
import path from 'path';
23

3-
import { IosCredentials } from './types';
44
import { Target } from '../ios/types';
55

66
export function getCredentialsJsonPath(projectDir: string): string {
@@ -9,7 +9,7 @@ export function getCredentialsJsonPath(projectDir: string): string {
99

1010
export function ensureAllTargetsAreConfigured(
1111
targets: Target[],
12-
credentialsJson: IosCredentials
12+
credentialsJson: Ios.BuildCredentials
1313
): void {
1414
const notConfiguredTargets: string[] = [];
1515
for (const target of targets) {

0 commit comments

Comments
 (0)