mirror of
https://github.com/expo/eas-cli.git
synced 2026-11-13 20:28:08 -10:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f20d970616 | ||
|
|
f3712d5dfb | ||
|
|
cba211d82c |
No files matched your search
Generated
+10
-24
@@ -22838,6 +22838,16 @@
|
||||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "SCALAR",
|
||||
"name": "DevDomainName",
|
||||
"description": "A DevDomainName for a deployed serverless app",
|
||||
"fields": null,
|
||||
"inputFields": null,
|
||||
"interfaces": null,
|
||||
"enumValues": null,
|
||||
"possibleTypes": null
|
||||
},
|
||||
{
|
||||
"kind": "OBJECT",
|
||||
"name": "DeploymentsMutation",
|
||||
@@ -25024,18 +25034,6 @@
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "repack",
|
||||
"description": "Repack the golden dev client build instead of running full build process. Used for onboarding. Do not use outside of onboarding flow, as for now it's only created with this specific use case in mind.",
|
||||
"type": {
|
||||
"kind": "SCALAR",
|
||||
"name": "Boolean",
|
||||
"ofType": null
|
||||
},
|
||||
"defaultValue": null,
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "submitProfile",
|
||||
"description": null,
|
||||
@@ -29854,18 +29852,6 @@
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "gitCommitMessage",
|
||||
"description": null,
|
||||
"args": [],
|
||||
"type": {
|
||||
"kind": "SCALAR",
|
||||
"name": "String",
|
||||
"ofType": null
|
||||
},
|
||||
"isDeprecated": false,
|
||||
"deprecationReason": null
|
||||
},
|
||||
{
|
||||
"name": "gitRef",
|
||||
"description": null,
|
||||
|
||||
@@ -16,6 +16,7 @@ import { Analytics, AnalyticsEventProperties, BuildEvent } from '../analytics/An
|
||||
import { DynamicConfigContextFn } from '../commandUtils/context/DynamicProjectConfigContextField';
|
||||
import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
|
||||
import { CredentialsContext } from '../credentials/context';
|
||||
import { AppStoreApiKeyPurpose } from '../credentials/ios/actions/AscApiKeyUtils';
|
||||
import { getAppFromContextAsync } from '../credentials/ios/actions/BuildCredentialsUtils';
|
||||
import { GetAscApiKey } from '../credentials/ios/actions/GetAscApiKey';
|
||||
import { CustomBuildConfigMetadata } from '../project/customBuildConfig';
|
||||
@@ -165,12 +166,13 @@ export async function createBuildContextAsync<T extends Platform>({
|
||||
...(await getAppFromContextAsync(credentialsCtx)),
|
||||
bundleIdentifier: (iosBuildCtx as BuildContext<Platform.IOS>).ios.bundleIdentifier,
|
||||
};
|
||||
const ascForBuilds = await GetAscApiKey.getForBuildServiceAsync(
|
||||
const getAscApiKeyAction = new GetAscApiKey(
|
||||
appLookupParams,
|
||||
credentialsCtx
|
||||
AppStoreApiKeyPurpose.BUILD_SERVICE
|
||||
);
|
||||
if (ascForBuilds) {
|
||||
credentialsCtx.configureAppStoreAuth(ascForBuilds);
|
||||
const ascApiKeyManagedByExpo = await getAscApiKeyAction.runAsync(credentialsCtx);
|
||||
if (ascApiKeyManagedByExpo) {
|
||||
// TODO: set credentialCtx with the correct options
|
||||
}
|
||||
|
||||
return iosBuildCtx;
|
||||
|
||||
@@ -7,9 +7,10 @@ import * as AndroidGraphqlClient from './android/api/GraphqlClient';
|
||||
import * as IosGraphqlClient from './ios/api/GraphqlClient';
|
||||
import AppStoreApi from './ios/appstore/AppStoreApi';
|
||||
import { AuthenticationMode } from './ios/appstore/authenticateTypes';
|
||||
import { MinimalAscApiKey } from './ios/credentials';
|
||||
import { Analytics } from '../analytics/AnalyticsManager';
|
||||
import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
|
||||
import { AppStoreConnectApiKeyFragment, AppleTeamType } from '../graphql/generated';
|
||||
import { AppStoreConnectApiKeyFragment } from '../graphql/generated';
|
||||
import Log from '../log';
|
||||
import { getPrivateExpoConfig } from '../project/expoConfig';
|
||||
import { confirmAsync } from '../prompts';
|
||||
@@ -87,16 +88,23 @@ export class CredentialsContext {
|
||||
}
|
||||
|
||||
public configureAppStoreAuth(ascApiKey: AppStoreConnectApiKeyFragment): void {
|
||||
/* keyP8: string;
|
||||
keyId: string;
|
||||
issuerId: string;
|
||||
teamId?: string;
|
||||
teamName?: string;
|
||||
roles?: UserRole[];
|
||||
name?: string; */
|
||||
this.appStore.authCtx = {
|
||||
ascApiKey: {
|
||||
keyP8: ascApiKey.keyP8,
|
||||
keyId: ascApiKey.keyIdentifier,
|
||||
issuerId: ascApiKey.issuerIdentifier,
|
||||
},
|
||||
team: {
|
||||
id: ascApiKey.appleTeam?.appleTeamIdentifier ?? '',
|
||||
name: ascApiKey.appleTeam?.appleTeamName ?? undefined,
|
||||
inHouse: ascApiKey.appleTeam?.appleTeamType === AppleTeamType.InHouse ?? false,
|
||||
appleTeam: {
|
||||
teamIdentifier: ascApiKey.appleTeam?.appleTeamIdentifier ?? '',
|
||||
teamName: ascApiKey.appleTeam?.appleTeamName,
|
||||
teamType: ascApiKey.appleTeam,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,32 +1,39 @@
|
||||
import { AppStoreApiKeyPurpose } from './AscApiKeyUtils';
|
||||
import { AppStoreConnectApiKeyFragment } from '../../../graphql/generated';
|
||||
import Log from '../../../log';
|
||||
import { CredentialsContext } from '../../context';
|
||||
import { AppLookupParams } from '../api/graphql/types/AppLookupParams';
|
||||
|
||||
export class GetAscApiKey {
|
||||
static async getForBuildServiceAsync(
|
||||
app: AppLookupParams,
|
||||
ctx: CredentialsContext
|
||||
): Promise<AppStoreConnectApiKeyFragment | null> {
|
||||
constructor(
|
||||
private app: AppLookupParams,
|
||||
private purpose: AppStoreApiKeyPurpose
|
||||
) {}
|
||||
|
||||
public async runAsync(ctx: CredentialsContext): Promise<AppStoreConnectApiKeyFragment | null> {
|
||||
const appCredentials = await ctx.ios.getIosAppCredentialsWithCommonFieldsAsync(
|
||||
ctx.graphqlClient,
|
||||
app
|
||||
this.app
|
||||
);
|
||||
const ascApiKey = appCredentials?.appStoreConnectApiKeyForBuilds;
|
||||
if (!ascApiKey) {
|
||||
return null;
|
||||
if (this.purpose === AppStoreApiKeyPurpose.SUBMISSION_SERVICE) {
|
||||
return appCredentials?.appStoreConnectApiKeyForSubmissions ?? null;
|
||||
} else if (this.purpose === AppStoreApiKeyPurpose.BUILD_SERVICE) {
|
||||
const ascApiKey = appCredentials?.appStoreConnectApiKeyForBuilds;
|
||||
if (!ascApiKey) {
|
||||
return null;
|
||||
}
|
||||
const appleTeam = ascApiKey.appleTeam;
|
||||
const hasAppleTeamInfo =
|
||||
!!appleTeam && !!appleTeam.appleTeamIdentifier && !!appleTeam.appleTeamType;
|
||||
if (!hasAppleTeamInfo) {
|
||||
Log.warn(
|
||||
`App Store Connect API Key for ${this.purpose} is missing Apple Team information. Run "eas credentials" and select "Use an existing API Key" to update the missing information.`
|
||||
);
|
||||
return null;
|
||||
}
|
||||
return ascApiKey;
|
||||
} else {
|
||||
throw new Error(`App Store Connect API Keys are not yet supported for ${this.purpose}.`);
|
||||
}
|
||||
const appleTeam = ascApiKey.appleTeam;
|
||||
const appleTeamIdentifier = appleTeam?.appleTeamIdentifier;
|
||||
const appleTeamType = appleTeam?.appleTeamType;
|
||||
const hasAppleTeamInfo = !!appleTeamIdentifier && !!appleTeamType;
|
||||
if (!hasAppleTeamInfo) {
|
||||
Log.warn(
|
||||
`App Store Connect API Key for EAS Build is missing Apple Team information. Run "eas credentials" and select "Use an existing API Key" to update the missing information.`
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
return ascApiKey;
|
||||
}
|
||||
}
|
||||
@@ -49,7 +49,7 @@ import { AppleTeamType } from '../../../graphql/generated';
|
||||
import Log from '../../../log';
|
||||
import { MinimalAscApiKey } from '../credentials';
|
||||
|
||||
export type AscApiKeyAuth = {
|
||||
type AscApiKeyAuth = {
|
||||
ascApiKey: MinimalAscApiKey;
|
||||
appleTeam: { teamIdentifier: string; teamName?: string; teamType: AppleTeamType };
|
||||
};
|
||||
|
||||
+6026
-848
File diff suppressed because it is too large.
Load diff
@@ -12,7 +12,6 @@ export const AppStoreConnectApiKeyFragmentNode = gql`
|
||||
}
|
||||
issuerIdentifier
|
||||
keyIdentifier
|
||||
keyP8
|
||||
name
|
||||
roles
|
||||
createdAt
|
||||
|
||||
Reference in new issue
Block a user