eas-cli 16.3.2 → 16.4.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.
@@ -58,7 +58,10 @@ async function prepareJobAsync(ctx, jobData) {
58
58
  bun: buildProfile.bun,
59
59
  yarn: buildProfile.yarn,
60
60
  ndk: buildProfile.ndk,
61
- env: buildProfile.env,
61
+ env: {
62
+ ...buildProfile.env,
63
+ ...(ctx.isVerboseLoggingEnabled ? { EAS_VERBOSE: '1' } : {}),
64
+ },
62
65
  },
63
66
  cache: {
64
67
  ...cacheDefaults,
@@ -58,5 +58,6 @@ export interface BuildContext<T extends Platform> {
58
58
  vcsClient: Client;
59
59
  loggerLevel?: LoggerLevel;
60
60
  repack: boolean;
61
+ isVerboseLoggingEnabled: boolean;
61
62
  env: Record<string, string>;
62
63
  }
@@ -9,7 +9,7 @@ import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGr
9
9
  import { CustomBuildConfigMetadata } from '../project/customBuildConfig';
10
10
  import { Actor } from '../user/User';
11
11
  import { Client } from '../vcs/vcs';
12
- export declare function createBuildContextAsync<T extends Platform>({ buildProfileName, buildProfile, easJsonCliConfig, clearCache, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials, repack, env, }: {
12
+ export declare function createBuildContextAsync<T extends Platform>({ buildProfileName, buildProfile, easJsonCliConfig, clearCache, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials, repack, isVerboseLoggingEnabled, env, }: {
13
13
  buildProfileName: string;
14
14
  buildProfile: BuildProfile<T>;
15
15
  easJsonCliConfig: EasJson['cli'];
@@ -30,5 +30,6 @@ export declare function createBuildContextAsync<T extends Platform>({ buildProfi
30
30
  buildLoggerLevel?: LoggerLevel;
31
31
  freezeCredentials: boolean;
32
32
  repack: boolean;
33
+ isVerboseLoggingEnabled: boolean;
33
34
  env: Record<string, string>;
34
35
  }): Promise<BuildContext<T>>;
@@ -16,7 +16,7 @@ const AnalyticsManager_1 = require("../analytics/AnalyticsManager");
16
16
  const context_1 = require("../credentials/context");
17
17
  const projectUtils_1 = require("../project/projectUtils");
18
18
  const workflow_1 = require("../project/workflow");
19
- async function createBuildContextAsync({ buildProfileName, buildProfile, easJsonCliConfig, clearCache = false, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials, repack, env, }) {
19
+ async function createBuildContextAsync({ buildProfileName, buildProfile, easJsonCliConfig, clearCache = false, localBuildOptions, nonInteractive, noWait, platform, projectDir, resourceClassFlag, message, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, buildLoggerLevel, freezeCredentials, repack, isVerboseLoggingEnabled, env, }) {
20
20
  const { exp, projectId } = await getDynamicPrivateProjectConfigAsync({
21
21
  env,
22
22
  });
@@ -91,6 +91,7 @@ async function createBuildContextAsync({ buildProfileName, buildProfile, easJson
91
91
  requiredPackageManager,
92
92
  loggerLevel: buildLoggerLevel,
93
93
  repack,
94
+ isVerboseLoggingEnabled,
94
95
  env,
95
96
  };
96
97
  if (platform === eas_build_job_1.Platform.ANDROID) {
@@ -51,7 +51,10 @@ async function prepareJobAsync(ctx, jobData) {
51
51
  bundler: buildProfile.bundler,
52
52
  cocoapods: buildProfile.cocoapods,
53
53
  fastlane: buildProfile.fastlane,
54
- env: buildProfile.env,
54
+ env: {
55
+ ...buildProfile.env,
56
+ ...(ctx.isVerboseLoggingEnabled ? { EAS_VERBOSE: '1' } : {}),
57
+ },
55
58
  },
56
59
  cache: {
57
60
  ...cacheDefaults,
@@ -25,6 +25,7 @@ export interface BuildFlags {
25
25
  buildLoggerLevel?: LoggerLevel;
26
26
  freezeCredentials: boolean;
27
27
  repack: boolean;
28
+ isVerboseLoggingEnabled?: boolean;
28
29
  }
29
30
  export declare function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, projectDir, flags, actor, getDynamicPrivateProjectConfigAsync, downloadSimBuildAutoConfirm, envOverride, }: {
30
31
  graphqlClient: ExpoGraphqlClient;
@@ -237,6 +237,7 @@ async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildP
237
237
  buildLoggerLevel: flags.buildLoggerLevel ?? (log_1.default.isDebug ? logger_1.LoggerLevel.DEBUG : undefined),
238
238
  freezeCredentials: flags.freezeCredentials,
239
239
  repack: flags.repack,
240
+ isVerboseLoggingEnabled: flags.isVerboseLoggingEnabled ?? false,
240
241
  env,
241
242
  });
242
243
  if (moreBuilds) {
@@ -21,6 +21,7 @@ export default class Build extends EasCommand {
21
21
  'build-logger-level': import("@oclif/core/lib/interfaces").OptionFlag<LoggerLevel | undefined>;
22
22
  'freeze-credentials': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
23
23
  repack: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
24
+ 'verbose-logs': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
24
25
  };
25
26
  static contextDefinition: {
26
27
  vcsClient: import("../../commandUtils/context/VcsClientContextField").default;
@@ -94,6 +94,10 @@ class Build extends EasCommand_1.default {
94
94
  hidden: true,
95
95
  description: 'Use the golden dev client build repack flow as it works for onboarding',
96
96
  }),
97
+ 'verbose-logs': core_1.Flags.boolean({
98
+ default: false,
99
+ description: 'Use verbose logs for the build process',
100
+ }),
97
101
  ...flags_1.EasNonInteractiveAndJsonFlags,
98
102
  };
99
103
  static contextDefinition = {
@@ -182,6 +186,7 @@ class Build extends EasCommand_1.default {
182
186
  message,
183
187
  buildLoggerLevel: flags['build-logger-level'],
184
188
  freezeCredentials: flags['freeze-credentials'],
189
+ isVerboseLoggingEnabled: flags['verbose-logs'],
185
190
  repack: flags.repack,
186
191
  };
187
192
  }
@@ -20,6 +20,7 @@ const AppQuery_1 = require("../../graphql/queries/AppQuery");
20
20
  const log_1 = tslib_1.__importStar(require("../../log"));
21
21
  const ora_1 = require("../../ora");
22
22
  const platform_1 = require("../../platform");
23
+ const maybeUploadAssetMapAsync_1 = require("../../project/maybeUploadAssetMapAsync");
23
24
  const maybeUploadFingerprintAsync_1 = require("../../project/maybeUploadFingerprintAsync");
24
25
  const projectUtils_1 = require("../../project/projectUtils");
25
26
  const publish_1 = require("../../project/publish");
@@ -165,8 +166,13 @@ class UpdatePublish extends EasCommand_1.default {
165
166
  let uploadedAssetCount = 0;
166
167
  let assetLimitPerUpdateGroup = 0;
167
168
  let realizedPlatforms = [];
169
+ let assetMapSource = null;
168
170
  try {
169
- const collectedAssets = await (0, publish_1.collectAssetsAsync)(distRoot);
171
+ const [collectedAssets, maybeAssetMapSource] = await Promise.all([
172
+ (0, publish_1.collectAssetsAsync)(distRoot),
173
+ (0, maybeUploadAssetMapAsync_1.maybeUploadAssetMapAsync)(distRoot, graphqlClient),
174
+ ]);
175
+ assetMapSource = maybeAssetMapSource;
170
176
  const assets = (0, publish_1.filterCollectedAssetsByRequestedPlatforms)(collectedAssets, requestedPlatform);
171
177
  realizedPlatforms = Object.keys(assets);
172
178
  // Timeout mechanism:
@@ -320,11 +326,15 @@ class UpdatePublish extends EasCommand_1.default {
320
326
  },
321
327
  };
322
328
  }, {});
329
+ const assetMapGroup = assetMapSource
330
+ ? Object.fromEntries(platforms.map(platform => [platform, assetMapSource]))
331
+ : null;
323
332
  return {
324
333
  branchId: branch.id,
325
334
  updateInfoGroup: localUpdateInfoGroup,
326
335
  rolloutInfoGroup: localRolloutInfoGroup,
327
336
  fingerprintInfoGroup: transformedFingerprintInfoGroup,
337
+ assetMapGroup,
328
338
  runtimeVersion,
329
339
  message: updateMessage,
330
340
  gitCommitHash,
@@ -2162,6 +2162,18 @@ export type AscApiKeyInput = {
2162
2162
  keyIdentifier: Scalars['String']['input'];
2163
2163
  keyP8: Scalars['String']['input'];
2164
2164
  };
2165
+ export type AssetMapGroup = {
2166
+ android?: InputMaybe<AssetMapSourceInput>;
2167
+ ios?: InputMaybe<AssetMapSourceInput>;
2168
+ web?: InputMaybe<AssetMapSourceInput>;
2169
+ };
2170
+ export type AssetMapSourceInput = {
2171
+ bucketKey?: InputMaybe<Scalars['String']['input']>;
2172
+ type?: InputMaybe<AssetMapSourceType>;
2173
+ };
2174
+ export declare enum AssetMapSourceType {
2175
+ Gcs = "GCS"
2176
+ }
2165
2177
  export type AssetMetadataResult = {
2166
2178
  __typename?: 'AssetMetadataResult';
2167
2179
  status: AssetMetadataStatus;
@@ -2258,6 +2270,10 @@ export declare enum AuthProviderIdentifier {
2258
2270
  OneLogin = "ONE_LOGIN",
2259
2271
  StubIdp = "STUB_IDP"
2260
2272
  }
2273
+ export type AverageMetrics = {
2274
+ __typename?: 'AverageMetrics';
2275
+ averageDownloadSize: Scalars['Int']['output'];
2276
+ };
2261
2277
  export type BackgroundJobReceipt = {
2262
2278
  __typename?: 'BackgroundJobReceipt';
2263
2279
  account: Account;
@@ -4871,7 +4887,6 @@ export declare enum ProjectArchiveSourceType {
4871
4887
  Gcs = "GCS",
4872
4888
  Git = "GIT",
4873
4889
  None = "NONE",
4874
- S3 = "S3",
4875
4890
  Url = "URL"
4876
4891
  }
4877
4892
  export type ProjectPublicData = {
@@ -4896,6 +4911,7 @@ export type PublicArtifacts = {
4896
4911
  buildUrl?: Maybe<Scalars['String']['output']>;
4897
4912
  };
4898
4913
  export type PublishUpdateGroupInput = {
4914
+ assetMapGroup?: InputMaybe<AssetMapGroup>;
4899
4915
  awaitingCodeSigningInfo?: InputMaybe<Scalars['Boolean']['input']>;
4900
4916
  branchId: Scalars['String']['input'];
4901
4917
  environment?: InputMaybe<EnvironmentVariableEnvironment>;
@@ -5870,6 +5886,7 @@ export type Update = ActivityTimelineProjectActivity & {
5870
5886
  activityTimestamp: Scalars['DateTime']['output'];
5871
5887
  actor?: Maybe<Actor>;
5872
5888
  app: App;
5889
+ assetMapUrl?: Maybe<Scalars['String']['output']>;
5873
5890
  awaitingCodeSigningInfo: Scalars['Boolean']['output'];
5874
5891
  branch: UpdateBranch;
5875
5892
  branchId: Scalars['ID']['output'];
@@ -6070,6 +6087,7 @@ export type UpdateInfoGroup = {
6070
6087
  };
6071
6088
  export type UpdateInsights = {
6072
6089
  __typename?: 'UpdateInsights';
6090
+ averageMetrics: AverageMetrics;
6073
6091
  cumulativeMetrics: CumulativeMetrics;
6074
6092
  id: Scalars['ID']['output'];
6075
6093
  totalUniqueUsers: Scalars['Int']['output'];
@@ -6082,7 +6100,10 @@ export type UpdateInsightsTotalUniqueUsersArgs = {
6082
6100
  };
6083
6101
  export type UpdateMutation = {
6084
6102
  __typename?: 'UpdateMutation';
6085
- /** Delete an EAS update group */
6103
+ /**
6104
+ * Delete an EAS update group
6105
+ * @deprecated Use scheduleUpdateGroupDeletion instead
6106
+ */
6086
6107
  deleteUpdateGroup: DeleteUpdateGroupResult;
6087
6108
  /** Delete an EAS update group in the background */
6088
6109
  scheduleUpdateGroupDeletion: BackgroundJobReceipt;
@@ -6168,6 +6189,7 @@ export declare enum UploadSessionType {
6168
6189
  /** @deprecated Use EAS_SUBMIT_GCS_APP_ARCHIVE instead. */
6169
6190
  EasSubmitAppArchive = "EAS_SUBMIT_APP_ARCHIVE",
6170
6191
  EasSubmitGcsAppArchive = "EAS_SUBMIT_GCS_APP_ARCHIVE",
6192
+ EasUpdateAssetsMetadata = "EAS_UPDATE_ASSETS_METADATA",
6171
6193
  EasUpdateFingerprint = "EAS_UPDATE_FINGERPRINT"
6172
6194
  }
6173
6195
  export type UsageMetricTotal = {
@@ -7102,7 +7124,7 @@ export type WorkerDeploymentRequestsCacheStatusEdge = {
7102
7124
  };
7103
7125
  export type WorkerDeploymentRequestsContinentEdge = {
7104
7126
  __typename?: 'WorkerDeploymentRequestsContinentEdge';
7105
- continent: ContinentCode;
7127
+ continent?: Maybe<ContinentCode>;
7106
7128
  node: WorkerDeploymentRequestsAggregationNode;
7107
7129
  };
7108
7130
  export type WorkerDeploymentRequestsCountryEdge = {
@@ -7259,6 +7281,7 @@ export declare enum WorkflowJobType {
7259
7281
  GetBuild = "GET_BUILD",
7260
7282
  MaestroTest = "MAESTRO_TEST",
7261
7283
  RequireApproval = "REQUIRE_APPROVAL",
7284
+ Slack = "SLACK",
7262
7285
  Submission = "SUBMISSION",
7263
7286
  Update = "UPDATE"
7264
7287
  }
@@ -11851,6 +11874,95 @@ export type CreateKeystoreGenerationUrlMutation = {
11851
11874
  };
11852
11875
  };
11853
11876
  };
11877
+ export type CreateLocalBuildMutationVariables = Exact<{
11878
+ appId: Scalars['ID']['input'];
11879
+ jobInput: LocalBuildJobInput;
11880
+ artifactSource: LocalBuildArchiveSourceInput;
11881
+ metadata?: InputMaybe<BuildMetadataInput>;
11882
+ }>;
11883
+ export type CreateLocalBuildMutation = {
11884
+ __typename?: 'RootMutation';
11885
+ build: {
11886
+ __typename?: 'BuildMutation';
11887
+ createLocalBuild: {
11888
+ __typename?: 'CreateBuildResult';
11889
+ build: {
11890
+ __typename?: 'Build';
11891
+ id: string;
11892
+ status: BuildStatus;
11893
+ platform: AppPlatform;
11894
+ channel?: string | null;
11895
+ distribution?: DistributionType | null;
11896
+ iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
11897
+ buildProfile?: string | null;
11898
+ sdkVersion?: string | null;
11899
+ appVersion?: string | null;
11900
+ appBuildVersion?: string | null;
11901
+ runtimeVersion?: string | null;
11902
+ gitCommitHash?: string | null;
11903
+ gitCommitMessage?: string | null;
11904
+ initialQueuePosition?: number | null;
11905
+ queuePosition?: number | null;
11906
+ estimatedWaitTimeLeftSeconds?: number | null;
11907
+ priority: BuildPriority;
11908
+ createdAt: any;
11909
+ updatedAt: any;
11910
+ message?: string | null;
11911
+ completedAt?: any | null;
11912
+ expirationDate?: any | null;
11913
+ isForIosSimulator: boolean;
11914
+ error?: {
11915
+ __typename?: 'BuildError';
11916
+ errorCode: string;
11917
+ message: string;
11918
+ docsUrl?: string | null;
11919
+ } | null;
11920
+ artifacts?: {
11921
+ __typename?: 'BuildArtifacts';
11922
+ buildUrl?: string | null;
11923
+ xcodeBuildLogsUrl?: string | null;
11924
+ applicationArchiveUrl?: string | null;
11925
+ buildArtifactsUrl?: string | null;
11926
+ } | null;
11927
+ initiatingActor?: {
11928
+ __typename: 'Robot';
11929
+ id: string;
11930
+ displayName: string;
11931
+ } | {
11932
+ __typename: 'SSOUser';
11933
+ id: string;
11934
+ displayName: string;
11935
+ } | {
11936
+ __typename: 'User';
11937
+ id: string;
11938
+ displayName: string;
11939
+ } | null;
11940
+ project: {
11941
+ __typename: 'App';
11942
+ id: string;
11943
+ name: string;
11944
+ slug: string;
11945
+ ownerAccount: {
11946
+ __typename?: 'Account';
11947
+ id: string;
11948
+ name: string;
11949
+ };
11950
+ } | {
11951
+ __typename: 'Snack';
11952
+ id: string;
11953
+ name: string;
11954
+ slug: string;
11955
+ };
11956
+ metrics?: {
11957
+ __typename?: 'BuildMetrics';
11958
+ buildWaitTime?: number | null;
11959
+ buildQueueTime?: number | null;
11960
+ buildDuration?: number | null;
11961
+ } | null;
11962
+ };
11963
+ };
11964
+ };
11965
+ };
11854
11966
  export type GetSignedUploadMutationVariables = Exact<{
11855
11967
  contentTypes: Array<Scalars['String']['input']> | Scalars['String']['input'];
11856
11968
  }>;
@@ -12013,95 +12125,6 @@ export type SetRolloutPercentageMutation = {
12013
12125
  };
12014
12126
  };
12015
12127
  };
12016
- export type CreateLocalBuildMutationVariables = Exact<{
12017
- appId: Scalars['ID']['input'];
12018
- jobInput: LocalBuildJobInput;
12019
- artifactSource: LocalBuildArchiveSourceInput;
12020
- metadata?: InputMaybe<BuildMetadataInput>;
12021
- }>;
12022
- export type CreateLocalBuildMutation = {
12023
- __typename?: 'RootMutation';
12024
- build: {
12025
- __typename?: 'BuildMutation';
12026
- createLocalBuild: {
12027
- __typename?: 'CreateBuildResult';
12028
- build: {
12029
- __typename?: 'Build';
12030
- id: string;
12031
- status: BuildStatus;
12032
- platform: AppPlatform;
12033
- channel?: string | null;
12034
- distribution?: DistributionType | null;
12035
- iosEnterpriseProvisioning?: BuildIosEnterpriseProvisioning | null;
12036
- buildProfile?: string | null;
12037
- sdkVersion?: string | null;
12038
- appVersion?: string | null;
12039
- appBuildVersion?: string | null;
12040
- runtimeVersion?: string | null;
12041
- gitCommitHash?: string | null;
12042
- gitCommitMessage?: string | null;
12043
- initialQueuePosition?: number | null;
12044
- queuePosition?: number | null;
12045
- estimatedWaitTimeLeftSeconds?: number | null;
12046
- priority: BuildPriority;
12047
- createdAt: any;
12048
- updatedAt: any;
12049
- message?: string | null;
12050
- completedAt?: any | null;
12051
- expirationDate?: any | null;
12052
- isForIosSimulator: boolean;
12053
- error?: {
12054
- __typename?: 'BuildError';
12055
- errorCode: string;
12056
- message: string;
12057
- docsUrl?: string | null;
12058
- } | null;
12059
- artifacts?: {
12060
- __typename?: 'BuildArtifacts';
12061
- buildUrl?: string | null;
12062
- xcodeBuildLogsUrl?: string | null;
12063
- applicationArchiveUrl?: string | null;
12064
- buildArtifactsUrl?: string | null;
12065
- } | null;
12066
- initiatingActor?: {
12067
- __typename: 'Robot';
12068
- id: string;
12069
- displayName: string;
12070
- } | {
12071
- __typename: 'SSOUser';
12072
- id: string;
12073
- displayName: string;
12074
- } | {
12075
- __typename: 'User';
12076
- id: string;
12077
- displayName: string;
12078
- } | null;
12079
- project: {
12080
- __typename: 'App';
12081
- id: string;
12082
- name: string;
12083
- slug: string;
12084
- ownerAccount: {
12085
- __typename?: 'Account';
12086
- id: string;
12087
- name: string;
12088
- };
12089
- } | {
12090
- __typename: 'Snack';
12091
- id: string;
12092
- name: string;
12093
- slug: string;
12094
- };
12095
- metrics?: {
12096
- __typename?: 'BuildMetrics';
12097
- buildWaitTime?: number | null;
12098
- buildQueueTime?: number | null;
12099
- buildDuration?: number | null;
12100
- } | null;
12101
- };
12102
- };
12103
- };
12104
- };
12105
12128
  export type CreateAndroidSubmissionMutationVariables = Exact<{
12106
12129
  appId: Scalars['ID']['input'];
12107
12130
  config: AndroidSubmissionConfigInput;
@@ -6,9 +6,9 @@
6
6
  * For more info and docs, visit https://graphql-code-generator.com/
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
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.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.LocalBuildArchiveSourceType = 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.UserAgentPlatform = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = void 0;
9
+ 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.AssetMapSourceType = 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.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.LocalBuildArchiveSourceType = 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 = exports.Feature = void 0;
11
+ exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserEntityTypeName = exports.UserAgentPlatform = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.TargetEntityMutationType = void 0;
12
12
  var AccountAppsSortByField;
13
13
  (function (AccountAppsSortByField) {
14
14
  AccountAppsSortByField["LatestActivityTime"] = "LATEST_ACTIVITY_TIME";
@@ -115,6 +115,10 @@ var AppsFilter;
115
115
  /** New Projects */
116
116
  AppsFilter["New"] = "NEW";
117
117
  })(AppsFilter || (exports.AppsFilter = AppsFilter = {}));
118
+ var AssetMapSourceType;
119
+ (function (AssetMapSourceType) {
120
+ AssetMapSourceType["Gcs"] = "GCS";
121
+ })(AssetMapSourceType || (exports.AssetMapSourceType = AssetMapSourceType = {}));
118
122
  var AssetMetadataStatus;
119
123
  (function (AssetMetadataStatus) {
120
124
  AssetMetadataStatus["DoesNotExist"] = "DOES_NOT_EXIST";
@@ -583,7 +587,6 @@ var ProjectArchiveSourceType;
583
587
  ProjectArchiveSourceType["Gcs"] = "GCS";
584
588
  ProjectArchiveSourceType["Git"] = "GIT";
585
589
  ProjectArchiveSourceType["None"] = "NONE";
586
- ProjectArchiveSourceType["S3"] = "S3";
587
590
  ProjectArchiveSourceType["Url"] = "URL";
588
591
  })(ProjectArchiveSourceType || (exports.ProjectArchiveSourceType = ProjectArchiveSourceType = {}));
589
592
  var RequestMethod;
@@ -759,6 +762,7 @@ var UploadSessionType;
759
762
  /** @deprecated Use EAS_SUBMIT_GCS_APP_ARCHIVE instead. */
760
763
  UploadSessionType["EasSubmitAppArchive"] = "EAS_SUBMIT_APP_ARCHIVE";
761
764
  UploadSessionType["EasSubmitGcsAppArchive"] = "EAS_SUBMIT_GCS_APP_ARCHIVE";
765
+ UploadSessionType["EasUpdateAssetsMetadata"] = "EAS_UPDATE_ASSETS_METADATA";
762
766
  UploadSessionType["EasUpdateFingerprint"] = "EAS_UPDATE_FINGERPRINT";
763
767
  })(UploadSessionType || (exports.UploadSessionType = UploadSessionType = {}));
764
768
  var UsageMetricType;
@@ -877,6 +881,7 @@ var WorkflowJobType;
877
881
  WorkflowJobType["GetBuild"] = "GET_BUILD";
878
882
  WorkflowJobType["MaestroTest"] = "MAESTRO_TEST";
879
883
  WorkflowJobType["RequireApproval"] = "REQUIRE_APPROVAL";
884
+ WorkflowJobType["Slack"] = "SLACK";
880
885
  WorkflowJobType["Submission"] = "SUBMISSION";
881
886
  WorkflowJobType["Update"] = "UPDATE";
882
887
  })(WorkflowJobType || (exports.WorkflowJobType = WorkflowJobType = {}));
@@ -0,0 +1,3 @@
1
+ import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
2
+ import { AssetMapSourceInput } from '../graphql/generated';
3
+ export declare function maybeUploadAssetMapAsync(distRoot: string, graphqlClient: ExpoGraphqlClient): Promise<AssetMapSourceInput | null>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maybeUploadAssetMapAsync = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
7
+ const path_1 = tslib_1.__importDefault(require("path"));
8
+ const generated_1 = require("../graphql/generated");
9
+ const log_1 = tslib_1.__importDefault(require("../log"));
10
+ const uploads_1 = require("../uploads");
11
+ const files_1 = require("../utils/files");
12
+ const progress_1 = require("../utils/progress");
13
+ async function maybeUploadAssetMapAsync(distRoot, graphqlClient) {
14
+ const assetMapPath = path_1.default.join(distRoot, 'assetmap.json');
15
+ if (!(await fs_extra_1.default.pathExists(assetMapPath))) {
16
+ return null;
17
+ }
18
+ let gcsBucketKey = undefined;
19
+ const fileStat = await fs_extra_1.default.promises.stat(assetMapPath);
20
+ try {
21
+ gcsBucketKey = await (0, uploads_1.uploadFileAtPathToGCSAsync)(graphqlClient, generated_1.UploadSessionType.EasUpdateAssetsMetadata, assetMapPath, (0, progress_1.createProgressTracker)({
22
+ total: fileStat.size,
23
+ message: ratio => `Uploading assetmap.json (${(0, files_1.formatBytes)(fileStat.size * ratio)} / ${(0, files_1.formatBytes)(fileStat.size)})`,
24
+ completedMessage: (duration) => `Uploaded assetmap.json ${chalk_1.default.dim(duration)}`,
25
+ }));
26
+ }
27
+ catch (err) {
28
+ let errMessage = 'Failed to upload assetmap to EAS';
29
+ if (err.message) {
30
+ errMessage += `\n\nReason: ${err.message}`;
31
+ }
32
+ log_1.default.warn(errMessage);
33
+ return null;
34
+ }
35
+ return {
36
+ type: generated_1.AssetMapSourceType.Gcs,
37
+ bucketKey: gcsBucketKey,
38
+ };
39
+ }
40
+ exports.maybeUploadAssetMapAsync = maybeUploadAssetMapAsync;
@@ -12,8 +12,11 @@ async function validateMetroConfigForManagedWorkflowAsync(ctx) {
12
12
  return;
13
13
  }
14
14
  const metroConfig = await loadConfigAsync(ctx.projectDir);
15
+ // SDK <50 | plugins whose presence can be used to determine if the config is extending Expo's Metro config
15
16
  const hasHashAssetFilesPlugin = metroConfig.transformer?.assetPlugins?.find((plugin) => plugin.match(/expo-asset[/|\\]tools[/|\\]hashAssetFiles/));
16
- if (!hasHashAssetFilesPlugin) {
17
+ // SDK >=51 | this is a custom property that we inject to ensure cache invalidation between projects.
18
+ const isExtendingExpoMetroConfig = metroConfig.transformer.hasOwnProperty('_expoRelativeProjectRoot');
19
+ if (!isExtendingExpoMetroConfig && !hasHashAssetFilesPlugin) {
17
20
  log_1.default.warn(`It looks like that you are using a custom ${chalk_1.default.bold('metro.config.js')} that does not extend ${chalk_1.default.bold('@expo/metro-config')}.`);
18
21
  log_1.default.warn('This can result in unexpected and hard to debug issues, like missing assets in the production bundle.');
19
22
  if (!ctx.nonInteractive) {
@@ -49,7 +49,7 @@ type ManifestFragment = {
49
49
  type UpdateInfoGroup = {
50
50
  [key in UpdatePublishPlatform]: ManifestFragment;
51
51
  };
52
- type AssetMap = Record<string, {
52
+ export type AssetMap = Record<string, {
53
53
  httpServerLocation: string;
54
54
  name: string;
55
55
  type: string;
@@ -102,8 +102,23 @@ async function uploadAsync(params) {
102
102
  return retry(error);
103
103
  }
104
104
  const getErrorMessageAsync = async () => {
105
- const body = await response.json().catch(() => null);
106
- return body?.error ?? `Upload of "${filePath}" failed: ${response.statusText}`;
105
+ const rayId = response.headers.get('cf-ray');
106
+ const contentType = response.headers.get('Content-Type');
107
+ if (contentType?.startsWith('text/html')) {
108
+ // NOTE(@kitten): We've received a CDN error most likely. There's not much we can do
109
+ // except for quoting the Request ID, so a user can send it to us. We can check
110
+ // why a request was blocked by looking up a WAF event via the "Ray ID" here:
111
+ // https://dash.cloudflare.com/e6f39f67f543faa6038768e8f37e4234/expo.app/security/events
112
+ let message = `CDN firewall has aborted the upload with ${response.statusText}.`;
113
+ if (rayId) {
114
+ message += `\nReport this error quoting Request ID ${rayId}`;
115
+ }
116
+ return `Upload of "${filePath}" failed: ${message}`;
117
+ }
118
+ else {
119
+ const json = await response.json().catch(() => null);
120
+ return json?.error ?? `Upload of "${filePath}" failed: ${response.statusText}`;
121
+ }
107
122
  };
108
123
  if (response.status === 408 ||
109
124
  response.status === 409 ||
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "16.3.2",
2
+ "version": "16.4.0",
3
3
  "commands": {
4
4
  "analytics": {
5
5
  "id": "analytics",
@@ -913,6 +913,12 @@
913
913
  "hidden": true,
914
914
  "allowNo": false
915
915
  },
916
+ "verbose-logs": {
917
+ "name": "verbose-logs",
918
+ "type": "boolean",
919
+ "description": "Use verbose logs for the build process",
920
+ "allowNo": false
921
+ },
916
922
  "json": {
917
923
  "name": "json",
918
924
  "type": "boolean",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eas-cli",
3
3
  "description": "EAS command line tool",
4
- "version": "16.3.2",
4
+ "version": "16.4.0",
5
5
  "author": "Expo <support@expo.dev>",
6
6
  "bin": {
7
7
  "eas": "./bin/run"
@@ -13,7 +13,7 @@
13
13
  "@expo/config": "10.0.6",
14
14
  "@expo/config-plugins": "9.0.12",
15
15
  "@expo/eas-build-job": "1.0.173",
16
- "@expo/eas-json": "16.1.0",
16
+ "@expo/eas-json": "16.4.0",
17
17
  "@expo/env": "^1.0.0",
18
18
  "@expo/json-file": "8.3.3",
19
19
  "@expo/logger": "1.0.117",
@@ -239,5 +239,5 @@
239
239
  "node": "20.11.0",
240
240
  "yarn": "1.22.21"
241
241
  },
242
- "gitHead": "c42a34092f442e8bcdd27aba7c8db85fd81c80d0"
242
+ "gitHead": "da4c41b9b715ff89d241deea1e24b3e179798620"
243
243
  }