@expo/build-tools 1.0.113 → 1.0.115

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.
@@ -26,7 +26,7 @@ async function androidBuilder(ctx) {
26
26
  else if (ctx.job.mode === eas_build_job_1.BuildMode.RESIGN) {
27
27
  throw new Error('Not implemented');
28
28
  }
29
- else if (ctx.job.mode === eas_build_job_1.BuildMode.CUSTOM) {
29
+ else if (ctx.job.mode === eas_build_job_1.BuildMode.CUSTOM || ctx.job.mode === eas_build_job_1.BuildMode.REPACK) {
30
30
  return await (0, custom_1.runCustomBuildAsync)(ctx);
31
31
  }
32
32
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/builders/android.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport { Android, BuildMode, BuildPhase, Workflow } from '@expo/eas-build-job';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, BuildContext, SkipNativeBuildError } from '../context';\nimport {\n configureExpoUpdatesIfInstalledAsync,\n resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync,\n} from '../utils/expoUpdates';\nimport {\n runGradleCommand,\n ensureLFLineEndingsInGradlewScript,\n resolveGradleCommand,\n} from '../android/gradle';\nimport { uploadApplicationArchive } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { restoreCredentials } from '../android/credentials';\nimport { configureBuildGradle } from '../android/gradleConfig';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\nimport { prepareExecutableAsync } from '../utils/prepareBuildExecutable';\n\nimport { runBuilderWithHooksAsync } from './common';\nimport { runCustomBuildAsync } from './custom';\n\nexport default async function androidBuilder(ctx: BuildContext<Android.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n await prepareExecutableAsync(ctx);\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else if (ctx.job.mode === BuildMode.RESIGN) {\n throw new Error('Not implemented');\n } else if (ctx.job.mode === BuildMode.CUSTOM) {\n return await runCustomBuildAsync(ctx);\n } else {\n throw new Error('Not implemented');\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Android.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n if (hasNativeCode) {\n await ctx.runBuildPhase(BuildPhase.FIX_GRADLEW, async () => {\n await ensureLFLineEndingsInGradlewScript(ctx);\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"android\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/android-builds/'\n );\n return;\n }\n await prebuildAsync(ctx, {\n logger: ctx.logger,\n workingDir: ctx.getReactNativeProjectDirectory(),\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n const resolvedExpoUpdatesRuntimeVersion = await ctx.runBuildPhase(\n BuildPhase.CALCULATE_EXPO_UPDATES_RUNTIME_VERSION,\n async () => {\n return await resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({\n cwd: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n appConfig: ctx.appConfig,\n platform: ctx.job.platform,\n workflow: ctx.job.type,\n env: ctx.env,\n });\n }\n );\n\n if (\n nullthrows(ctx.job.secrets, 'Secrets must be defined for non-custom builds').buildCredentials\n ) {\n await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n await restoreCredentials(ctx);\n await configureBuildGradle(ctx);\n });\n }\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx, {\n resolvedRuntimeVersion: resolvedExpoUpdatesRuntimeVersion,\n });\n });\n\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping Gradle build');\n }\n await ctx.runBuildPhase(BuildPhase.RUN_GRADLEW, async () => {\n const gradleCommand = resolveGradleCommand(ctx.job);\n await runGradleCommand(ctx, {\n logger: ctx.logger,\n gradleCommand,\n androidDir: path.join(ctx.getReactNativeProjectDirectory(), 'android'),\n ...(resolvedExpoUpdatesRuntimeVersion\n ? {\n extraEnv: {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE: resolvedExpoUpdatesRuntimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n },\n }\n : null),\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n await uploadApplicationArchive(ctx, {\n patternOrPath: ctx.job.applicationArchivePath ?? 'android/app/build/outputs/**/*.{apk,aab}',\n rootDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n });\n });\n}\n"]}
1
+ {"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/builders/android.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,uDAA+E;AAC/E,4DAAoC;AAEpC,wCAA2E;AAC3E,sDAG8B;AAC9B,8CAI2B;AAC3B,kDAA8D;AAC9D,0CAAwD;AACxD,wDAA4D;AAC5D,0DAA+D;AAC/D,2CAA6C;AAC7C,iDAAmD;AACnD,4EAAyE;AAEzE,qCAAoD;AACpD,qCAA+C;AAEhC,KAAK,UAAU,cAAc,CAAC,GAA8B;IACzE,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,yBAAS,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,IAAA,+CAAsB,EAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,IAAA,iCAAwB,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,yBAAS,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,yBAAS,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,yBAAS,CAAC,MAAM,EAAE,CAAC;QAClF,OAAO,MAAM,IAAA,4BAAmB,EAAC,GAAG,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAXD,iCAWC;AAED,KAAK,UAAU,UAAU,CAAC,GAA8B;IACtD,MAAM,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,wBAAQ,CAAC,OAAO,CAAC;IAExD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,IAAA,2CAAkC,EAAC,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtD,IAAI,aAAa,EAAE,CAAC;YAClB,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,2KAA2K,CAC5K,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,IAAA,wBAAa,EAAC,GAAG,EAAE;YACvB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,8BAA8B,EAAE;SACjD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;;QAC3D,MAAM,CAAA,MAAA,GAAG,CAAC,YAAY,0CAAE,YAAY,CAAC,GAAG,CAAC,CAAA,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,IAAA,wBAAgB,EAAC,GAAG,EAAE,YAAI,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,iCAAiC,GAAG,MAAM,GAAG,CAAC,aAAa,CAC/D,0BAAU,CAAC,sCAAsC,EACjD,KAAK,IAAI,EAAE;QACT,OAAO,MAAM,IAAA,kEAAoD,EAAC;YAChE,GAAG,EAAE,GAAG,CAAC,8BAA8B,EAAE;YACzC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ;YAC1B,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI;YACtB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,IACE,IAAA,oBAAU,EAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,+CAA+C,CAAC,CAAC,gBAAgB,EAC7F,CAAC;QACD,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,IAAA,gCAAkB,EAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,IAAA,mCAAoB,EAAC,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,IAAA,kDAAoC,EAAC,GAAG,EAAE;YAC9C,sBAAsB,EAAE,iCAAiC;SAC1D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,IAAI,8BAAoB,CAAC,uBAAuB,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,aAAa,GAAG,IAAA,6BAAoB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,IAAA,yBAAgB,EAAC,GAAG,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,aAAa;YACb,UAAU,EAAE,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,SAAS,CAAC;YACtE,GAAG,CAAC,iCAAiC;gBACnC,CAAC,CAAC;oBACE,QAAQ,EAAE;wBACR,iCAAiC,EAAE,iCAAiC;wBACpE,8BAA8B,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI;qBAC7C;iBACF;gBACH,CAAC,CAAC,IAAI,CAAC;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,IAAA,wBAAgB,EAAC,GAAG,EAAE,YAAI,CAAC,oBAAoB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;;QACxD,MAAM,CAAA,MAAA,GAAG,CAAC,YAAY,0CAAE,SAAS,CAAC,GAAG,CAAC,CAAA,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,aAAa,CAAC,0BAAU,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;;QACxE,MAAM,IAAA,oCAAwB,EAAC,GAAG,EAAE;YAClC,aAAa,EAAE,MAAA,GAAG,CAAC,GAAG,CAAC,sBAAsB,mCAAI,0CAA0C;YAC3F,OAAO,EAAE,GAAG,CAAC,8BAA8B,EAAE;YAC7C,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import path from 'path';\n\nimport { Android, BuildMode, BuildPhase, Workflow } from '@expo/eas-build-job';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, BuildContext, SkipNativeBuildError } from '../context';\nimport {\n configureExpoUpdatesIfInstalledAsync,\n resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync,\n} from '../utils/expoUpdates';\nimport {\n runGradleCommand,\n ensureLFLineEndingsInGradlewScript,\n resolveGradleCommand,\n} from '../android/gradle';\nimport { uploadApplicationArchive } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { restoreCredentials } from '../android/credentials';\nimport { configureBuildGradle } from '../android/gradleConfig';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\nimport { prepareExecutableAsync } from '../utils/prepareBuildExecutable';\n\nimport { runBuilderWithHooksAsync } from './common';\nimport { runCustomBuildAsync } from './custom';\n\nexport default async function androidBuilder(ctx: BuildContext<Android.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n await prepareExecutableAsync(ctx);\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else if (ctx.job.mode === BuildMode.RESIGN) {\n throw new Error('Not implemented');\n } else if (ctx.job.mode === BuildMode.CUSTOM || ctx.job.mode === BuildMode.REPACK) {\n return await runCustomBuildAsync(ctx);\n } else {\n throw new Error('Not implemented');\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Android.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n if (hasNativeCode) {\n await ctx.runBuildPhase(BuildPhase.FIX_GRADLEW, async () => {\n await ensureLFLineEndingsInGradlewScript(ctx);\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"android\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/android-builds/'\n );\n return;\n }\n await prebuildAsync(ctx, {\n logger: ctx.logger,\n workingDir: ctx.getReactNativeProjectDirectory(),\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n const resolvedExpoUpdatesRuntimeVersion = await ctx.runBuildPhase(\n BuildPhase.CALCULATE_EXPO_UPDATES_RUNTIME_VERSION,\n async () => {\n return await resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({\n cwd: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n appConfig: ctx.appConfig,\n platform: ctx.job.platform,\n workflow: ctx.job.type,\n env: ctx.env,\n });\n }\n );\n\n if (\n nullthrows(ctx.job.secrets, 'Secrets must be defined for non-custom builds').buildCredentials\n ) {\n await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n await restoreCredentials(ctx);\n await configureBuildGradle(ctx);\n });\n }\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx, {\n resolvedRuntimeVersion: resolvedExpoUpdatesRuntimeVersion,\n });\n });\n\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping Gradle build');\n }\n await ctx.runBuildPhase(BuildPhase.RUN_GRADLEW, async () => {\n const gradleCommand = resolveGradleCommand(ctx.job);\n await runGradleCommand(ctx, {\n logger: ctx.logger,\n gradleCommand,\n androidDir: path.join(ctx.getReactNativeProjectDirectory(), 'android'),\n ...(resolvedExpoUpdatesRuntimeVersion\n ? {\n extraEnv: {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE: resolvedExpoUpdatesRuntimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n },\n }\n : null),\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n await uploadApplicationArchive(ctx, {\n patternOrPath: ctx.job.applicationArchivePath ?? 'android/app/build/outputs/**/*.{apk,aab}',\n rootDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n });\n });\n}\n"]}
@@ -20,8 +20,13 @@ const resolve_1 = require("../ios/resolve");
20
20
  const setup_1 = require("../common/setup");
21
21
  const prebuild_1 = require("../common/prebuild");
22
22
  const prepareBuildExecutable_1 = require("../utils/prepareBuildExecutable");
23
+ const processes_1 = require("../utils/processes");
23
24
  const common_1 = require("./common");
24
25
  const custom_1 = require("./custom");
26
+ const INSTALL_PODS_WARN_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes
27
+ const INSTALL_PODS_KILL_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
28
+ class InstallPodsTimeoutError extends Error {
29
+ }
25
30
  async function iosBuilder(ctx) {
26
31
  if (ctx.job.mode === eas_build_job_1.BuildMode.BUILD) {
27
32
  await (0, prepareBuildExecutable_1.prepareExecutableAsync)(ctx);
@@ -30,7 +35,7 @@ async function iosBuilder(ctx) {
30
35
  else if (ctx.job.mode === eas_build_job_1.BuildMode.RESIGN) {
31
36
  return await resignAsync(ctx);
32
37
  }
33
- else if (ctx.job.mode === eas_build_job_1.BuildMode.CUSTOM) {
38
+ else if (ctx.job.mode === eas_build_job_1.BuildMode.CUSTOM || ctx.job.mode === eas_build_job_1.BuildMode.REPACK) {
34
39
  return await (0, custom_1.runCustomBuildAsync)(ctx);
35
40
  }
36
41
  else {
@@ -66,7 +71,7 @@ async function buildAsync(ctx) {
66
71
  await ((_a = ctx.cacheManager) === null || _a === void 0 ? void 0 : _a.restoreCache(ctx));
67
72
  });
68
73
  await ctx.runBuildPhase(eas_build_job_1.BuildPhase.INSTALL_PODS, async () => {
69
- await (0, pod_1.installPods)(ctx);
74
+ await runInstallPodsAsync(ctx);
70
75
  });
71
76
  await ctx.runBuildPhase(eas_build_job_1.BuildPhase.POST_INSTALL_HOOK, async () => {
72
77
  await (0, hooks_1.runHookIfPresent)(ctx, hooks_1.Hook.POST_INSTALL);
@@ -181,4 +186,48 @@ async function resignAsync(ctx) {
181
186
  }
182
187
  return ctx.artifacts;
183
188
  }
189
+ async function runInstallPodsAsync(ctx) {
190
+ let warnTimeout;
191
+ let killTimeout;
192
+ let timedOutToKill = false;
193
+ try {
194
+ const installPodsSpawnPromise = (await (0, pod_1.installPods)(ctx, {
195
+ infoCallbackFn: () => {
196
+ warnTimeout === null || warnTimeout === void 0 ? void 0 : warnTimeout.refresh();
197
+ killTimeout === null || killTimeout === void 0 ? void 0 : killTimeout.refresh();
198
+ },
199
+ })).spawnPromise;
200
+ warnTimeout = setTimeout(() => {
201
+ ctx.logger.warn('"Install pods" phase takes longer then expected and it did not produce any logs in the past 15 minutes');
202
+ }, INSTALL_PODS_WARN_TIMEOUT_MS);
203
+ killTimeout = setTimeout(async () => {
204
+ var _a;
205
+ timedOutToKill = true;
206
+ ctx.logger.error('"Install pods" phase takes a very long time and it did not produce any logs in the past 30 minutes. Most likely an unexpected error happened which caused the process to hang and it will be terminated');
207
+ const ppid = (0, nullthrows_1.default)(installPodsSpawnPromise.child.pid);
208
+ const pids = await (0, processes_1.getParentAndDescendantProcessPidsAsync)(ppid);
209
+ pids.forEach((pid) => {
210
+ process.kill(pid);
211
+ });
212
+ (_a = ctx.reportError) === null || _a === void 0 ? void 0 : _a.call(ctx, '"Install pods" phase takes a very long time', undefined, {
213
+ extras: { buildId: ctx.env.EAS_BUILD_ID },
214
+ });
215
+ }, INSTALL_PODS_KILL_TIMEOUT_MS);
216
+ await installPodsSpawnPromise;
217
+ }
218
+ catch (err) {
219
+ if (timedOutToKill) {
220
+ throw new InstallPodsTimeoutError('"Install pods" phase was inactive for over 30 minutes');
221
+ }
222
+ throw err;
223
+ }
224
+ finally {
225
+ if (warnTimeout) {
226
+ clearTimeout(warnTimeout);
227
+ }
228
+ if (killTimeout) {
229
+ clearTimeout(killTimeout);
230
+ }
231
+ }
232
+ }
184
233
  //# sourceMappingURL=ios.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../src/builders/ios.ts"],"names":[],"mappings":"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","sourcesContent":["import plist from '@expo/plist';\nimport { IOSConfig } from '@expo/config-plugins';\nimport { ManagedArtifactType, BuildMode, BuildPhase, Ios, Workflow } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, BuildContext } from '../context';\nimport {\n resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync,\n configureExpoUpdatesIfInstalledAsync,\n} from '../utils/expoUpdates';\nimport { uploadApplicationArchive } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { configureXcodeProject } from '../ios/configure';\nimport CredentialsManager from '../ios/credentials/manager';\nimport { runFastlaneGym, runFastlaneResign } from '../ios/fastlane';\nimport { installPods } from '../ios/pod';\nimport { downloadApplicationArchiveAsync } from '../ios/resign';\nimport { resolveArtifactPath, resolveBuildConfiguration, resolveScheme } from '../ios/resolve';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\nimport { prepareExecutableAsync } from '../utils/prepareBuildExecutable';\n\nimport { runBuilderWithHooksAsync } from './common';\nimport { runCustomBuildAsync } from './custom';\n\nexport default async function iosBuilder(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n await prepareExecutableAsync(ctx);\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else if (ctx.job.mode === BuildMode.RESIGN) {\n return await resignAsync(ctx);\n } else if (ctx.job.mode === BuildMode.CUSTOM) {\n return await runCustomBuildAsync(ctx);\n } else {\n throw new Error('Not implemented');\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Ios.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"ios\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/ios-builds/'\n );\n return;\n }\n const extraEnvs: Record<string, string> = credentials?.teamId\n ? { APPLE_TEAM_ID: credentials.teamId }\n : {};\n await prebuildAsync(ctx, {\n logger: ctx.logger,\n workingDir: ctx.getReactNativeProjectDirectory(),\n options: { extraEnvs },\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.INSTALL_PODS, async () => {\n await installPods(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n const resolvedExpoUpdatesRuntimeVersion = await ctx.runBuildPhase(\n BuildPhase.CALCULATE_EXPO_UPDATES_RUNTIME_VERSION,\n async () => {\n return await resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({\n cwd: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n appConfig: ctx.appConfig,\n platform: ctx.job.platform,\n workflow: ctx.job.type,\n env: ctx.env,\n });\n }\n );\n\n const buildConfiguration = resolveBuildConfiguration(ctx);\n if (credentials) {\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_XCODE_PROJECT, async () => {\n await configureXcodeProject(ctx, { credentials, buildConfiguration });\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx, {\n resolvedRuntimeVersion: resolvedExpoUpdatesRuntimeVersion,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n const scheme = resolveScheme(ctx);\n const entitlements = await readEntitlementsAsync(ctx, { scheme, buildConfiguration });\n await runFastlaneGym(ctx, {\n credentials,\n scheme,\n buildConfiguration,\n entitlements,\n ...(resolvedExpoUpdatesRuntimeVersion\n ? { extraEnv: { EXPO_UPDATES_FINGERPRINT_OVERRIDE: resolvedExpoUpdatesRuntimeVersion } }\n : null),\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n await uploadApplicationArchive(ctx, {\n patternOrPath: resolveArtifactPath(ctx),\n rootDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n });\n });\n}\n\nasync function readEntitlementsAsync(\n ctx: BuildContext<Ios.Job>,\n { scheme, buildConfiguration }: { scheme: string; buildConfiguration: string }\n): Promise<object | null> {\n try {\n const applicationTargetName =\n await IOSConfig.BuildScheme.getApplicationTargetNameForSchemeAsync(\n ctx.getReactNativeProjectDirectory(),\n scheme\n );\n const entitlementsPath = IOSConfig.Entitlements.getEntitlementsPath(\n ctx.getReactNativeProjectDirectory(),\n {\n buildConfiguration,\n targetName: applicationTargetName,\n }\n );\n if (!entitlementsPath) {\n return null;\n }\n const entitlementsRaw = await fs.readFile(entitlementsPath, 'utf8');\n return plist.parse(entitlementsRaw);\n } catch (err) {\n ctx.logger.warn({ err }, 'Failed to read entitlements');\n ctx.markBuildPhaseHasWarnings();\n return null;\n }\n}\n\nasync function resignAsync(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n const applicationArchivePath = await ctx.runBuildPhase(\n BuildPhase.DOWNLOAD_APPLICATION_ARCHIVE,\n async () => {\n return await downloadApplicationArchiveAsync(ctx);\n }\n );\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n await runFastlaneResign(ctx, {\n credentials: nullthrows(credentials),\n ipaPath: applicationArchivePath,\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n ctx.logger.info(`Application archive: ${applicationArchivePath}`);\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: [applicationArchivePath],\n },\n logger: ctx.logger,\n });\n });\n\n if (!ctx.artifacts.APPLICATION_ARCHIVE) {\n throw new Error('Builder must upload application archive');\n }\n return ctx.artifacts;\n}\n"]}
1
+ {"version":3,"file":"ios.js","sourceRoot":"","sources":["../../src/builders/ios.ts"],"names":[],"mappings":"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","sourcesContent":["import plist from '@expo/plist';\nimport { IOSConfig } from '@expo/config-plugins';\nimport { ManagedArtifactType, BuildMode, BuildPhase, Ios, Workflow } from '@expo/eas-build-job';\nimport fs from 'fs-extra';\nimport nullthrows from 'nullthrows';\n\nimport { Artifacts, BuildContext } from '../context';\nimport {\n resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync,\n configureExpoUpdatesIfInstalledAsync,\n} from '../utils/expoUpdates';\nimport { uploadApplicationArchive } from '../utils/artifacts';\nimport { Hook, runHookIfPresent } from '../utils/hooks';\nimport { configureXcodeProject } from '../ios/configure';\nimport CredentialsManager from '../ios/credentials/manager';\nimport { runFastlaneGym, runFastlaneResign } from '../ios/fastlane';\nimport { installPods } from '../ios/pod';\nimport { downloadApplicationArchiveAsync } from '../ios/resign';\nimport { resolveArtifactPath, resolveBuildConfiguration, resolveScheme } from '../ios/resolve';\nimport { setupAsync } from '../common/setup';\nimport { prebuildAsync } from '../common/prebuild';\nimport { prepareExecutableAsync } from '../utils/prepareBuildExecutable';\nimport { getParentAndDescendantProcessPidsAsync } from '../utils/processes';\n\nimport { runBuilderWithHooksAsync } from './common';\nimport { runCustomBuildAsync } from './custom';\n\nconst INSTALL_PODS_WARN_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes\nconst INSTALL_PODS_KILL_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes\n\nclass InstallPodsTimeoutError extends Error {}\n\nexport default async function iosBuilder(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n if (ctx.job.mode === BuildMode.BUILD) {\n await prepareExecutableAsync(ctx);\n return await runBuilderWithHooksAsync(ctx, buildAsync);\n } else if (ctx.job.mode === BuildMode.RESIGN) {\n return await resignAsync(ctx);\n } else if (ctx.job.mode === BuildMode.CUSTOM || ctx.job.mode === BuildMode.REPACK) {\n return await runCustomBuildAsync(ctx);\n } else {\n throw new Error('Not implemented');\n }\n}\n\nasync function buildAsync(ctx: BuildContext<Ios.Job>): Promise<void> {\n await setupAsync(ctx);\n const hasNativeCode = ctx.job.type === Workflow.GENERIC;\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.PREBUILD, async () => {\n if (hasNativeCode) {\n ctx.markBuildPhaseSkipped();\n ctx.logger.info(\n 'Skipped running \"expo prebuild\" because the \"ios\" directory already exists. Learn more about the build process: https://docs.expo.dev/build-reference/ios-builds/'\n );\n return;\n }\n const extraEnvs: Record<string, string> = credentials?.teamId\n ? { APPLE_TEAM_ID: credentials.teamId }\n : {};\n await prebuildAsync(ctx, {\n logger: ctx.logger,\n workingDir: ctx.getReactNativeProjectDirectory(),\n options: { extraEnvs },\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.RESTORE_CACHE, async () => {\n await ctx.cacheManager?.restoreCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.INSTALL_PODS, async () => {\n await runInstallPodsAsync(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.POST_INSTALL_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.POST_INSTALL);\n });\n\n const resolvedExpoUpdatesRuntimeVersion = await ctx.runBuildPhase(\n BuildPhase.CALCULATE_EXPO_UPDATES_RUNTIME_VERSION,\n async () => {\n return await resolveRuntimeVersionForExpoUpdatesIfConfiguredAsync({\n cwd: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n appConfig: ctx.appConfig,\n platform: ctx.job.platform,\n workflow: ctx.job.type,\n env: ctx.env,\n });\n }\n );\n\n const buildConfiguration = resolveBuildConfiguration(ctx);\n if (credentials) {\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_XCODE_PROJECT, async () => {\n await configureXcodeProject(ctx, { credentials, buildConfiguration });\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.CONFIGURE_EXPO_UPDATES, async () => {\n await configureExpoUpdatesIfInstalledAsync(ctx, {\n resolvedRuntimeVersion: resolvedExpoUpdatesRuntimeVersion,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n const scheme = resolveScheme(ctx);\n const entitlements = await readEntitlementsAsync(ctx, { scheme, buildConfiguration });\n await runFastlaneGym(ctx, {\n credentials,\n scheme,\n buildConfiguration,\n entitlements,\n ...(resolvedExpoUpdatesRuntimeVersion\n ? { extraEnv: { EXPO_UPDATES_FINGERPRINT_OVERRIDE: resolvedExpoUpdatesRuntimeVersion } }\n : null),\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.PRE_UPLOAD_ARTIFACTS_HOOK, async () => {\n await runHookIfPresent(ctx, Hook.PRE_UPLOAD_ARTIFACTS);\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n await ctx.cacheManager?.saveCache(ctx);\n });\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n await uploadApplicationArchive(ctx, {\n patternOrPath: resolveArtifactPath(ctx),\n rootDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n });\n });\n}\n\nasync function readEntitlementsAsync(\n ctx: BuildContext<Ios.Job>,\n { scheme, buildConfiguration }: { scheme: string; buildConfiguration: string }\n): Promise<object | null> {\n try {\n const applicationTargetName =\n await IOSConfig.BuildScheme.getApplicationTargetNameForSchemeAsync(\n ctx.getReactNativeProjectDirectory(),\n scheme\n );\n const entitlementsPath = IOSConfig.Entitlements.getEntitlementsPath(\n ctx.getReactNativeProjectDirectory(),\n {\n buildConfiguration,\n targetName: applicationTargetName,\n }\n );\n if (!entitlementsPath) {\n return null;\n }\n const entitlementsRaw = await fs.readFile(entitlementsPath, 'utf8');\n return plist.parse(entitlementsRaw);\n } catch (err) {\n ctx.logger.warn({ err }, 'Failed to read entitlements');\n ctx.markBuildPhaseHasWarnings();\n return null;\n }\n}\n\nasync function resignAsync(ctx: BuildContext<Ios.Job>): Promise<Artifacts> {\n const applicationArchivePath = await ctx.runBuildPhase(\n BuildPhase.DOWNLOAD_APPLICATION_ARCHIVE,\n async () => {\n return await downloadApplicationArchiveAsync(ctx);\n }\n );\n\n const credentialsManager = new CredentialsManager(ctx);\n try {\n const credentials = await ctx.runBuildPhase(BuildPhase.PREPARE_CREDENTIALS, async () => {\n return await credentialsManager.prepare();\n });\n\n await ctx.runBuildPhase(BuildPhase.RUN_FASTLANE, async () => {\n await runFastlaneResign(ctx, {\n credentials: nullthrows(credentials),\n ipaPath: applicationArchivePath,\n });\n });\n } finally {\n await ctx.runBuildPhase(BuildPhase.CLEAN_UP_CREDENTIALS, async () => {\n await credentialsManager.cleanUp();\n });\n }\n\n await ctx.runBuildPhase(BuildPhase.UPLOAD_APPLICATION_ARCHIVE, async () => {\n ctx.logger.info(`Application archive: ${applicationArchivePath}`);\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: [applicationArchivePath],\n },\n logger: ctx.logger,\n });\n });\n\n if (!ctx.artifacts.APPLICATION_ARCHIVE) {\n throw new Error('Builder must upload application archive');\n }\n return ctx.artifacts;\n}\n\nasync function runInstallPodsAsync(ctx: BuildContext<Ios.Job>): Promise<void> {\n let warnTimeout: NodeJS.Timeout | undefined;\n let killTimeout: NodeJS.Timeout | undefined;\n let timedOutToKill: boolean = false;\n try {\n const installPodsSpawnPromise = (\n await installPods(ctx, {\n infoCallbackFn: () => {\n warnTimeout?.refresh();\n killTimeout?.refresh();\n },\n })\n ).spawnPromise;\n warnTimeout = setTimeout(() => {\n ctx.logger.warn(\n '\"Install pods\" phase takes longer then expected and it did not produce any logs in the past 15 minutes'\n );\n }, INSTALL_PODS_WARN_TIMEOUT_MS);\n\n killTimeout = setTimeout(async () => {\n timedOutToKill = true;\n ctx.logger.error(\n '\"Install pods\" phase takes a very long time and it did not produce any logs in the past 30 minutes. Most likely an unexpected error happened which caused the process to hang and it will be terminated'\n );\n const ppid = nullthrows(installPodsSpawnPromise.child.pid);\n const pids = await getParentAndDescendantProcessPidsAsync(ppid);\n pids.forEach((pid) => {\n process.kill(pid);\n });\n ctx.reportError?.('\"Install pods\" phase takes a very long time', undefined, {\n extras: { buildId: ctx.env.EAS_BUILD_ID },\n });\n }, INSTALL_PODS_KILL_TIMEOUT_MS);\n\n await installPodsSpawnPromise;\n } catch (err: any) {\n if (timedOutToKill) {\n throw new InstallPodsTimeoutError('\"Install pods\" phase was inactive for over 30 minutes');\n }\n throw err;\n } finally {\n if (warnTimeout) {\n clearTimeout(warnTimeout);\n }\n if (killTimeout) {\n clearTimeout(killTimeout);\n }\n }\n}\n"]}
package/dist/context.js CHANGED
@@ -28,7 +28,17 @@ class BuildContext {
28
28
  this.cacheManager = options.cacheManager;
29
29
  this._uploadArtifact = options.uploadArtifact;
30
30
  this.reportError = options.reportError;
31
- this._job = job;
31
+ const shouldApplyRepackOverrides = job.platform && job.mode === common_1.BuildMode.REPACK;
32
+ this._job = {
33
+ ...job,
34
+ ...(shouldApplyRepackOverrides
35
+ ? {
36
+ customBuildConfig: {
37
+ path: '__eas/repack.yml',
38
+ },
39
+ }
40
+ : null),
41
+ };
32
42
  this._metadata = options.metadata;
33
43
  this.skipNativeBuild = options.skipNativeBuild;
34
44
  this.reportBuildPhaseStats = options.reportBuildPhaseStats;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport {\n ManagedArtifactType,\n BuildPhase,\n BuildPhaseResult,\n BuildPhaseStats,\n Job,\n LogMarker,\n Env,\n errors,\n Metadata,\n EnvironmentSecretType,\n GenericArtifactType,\n isGenericArtifact,\n} from '@expo/eas-build-job';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { BuildTrigger } from '@expo/eas-build-job/dist/common';\n\nimport { PackageManager, resolvePackageManager } from './utils/packageManager';\nimport { resolveBuildPhaseErrorAsync } from './buildErrors/detectError';\nimport { readAppConfig } from './utils/appConfig';\nimport { createTemporaryEnvironmentSecretFile } from './utils/environmentSecrets';\n\nexport type Artifacts = Partial<Record<ManagedArtifactType, string>>;\n\nexport interface CacheManager {\n saveCache(ctx: BuildContext<Job>): Promise<void>;\n restoreCache(ctx: BuildContext<Job>): Promise<void>;\n}\n\nexport interface LogBuffer {\n getLogs(): string[];\n getPhaseLogs(buildPhase: string): string[];\n}\n\nexport type ArtifactToUpload =\n | {\n type: ManagedArtifactType;\n paths: string[];\n }\n | {\n type: GenericArtifactType;\n key: string;\n paths: string[];\n };\n\nexport interface BuildContextOptions {\n workingdir: string;\n logger: bunyan;\n logBuffer: LogBuffer;\n env: Env;\n cacheManager?: CacheManager;\n uploadArtifact: (spec: { artifact: ArtifactToUpload; logger: bunyan }) => Promise<string | null>;\n reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n skipNativeBuild?: boolean;\n metadata?: Metadata;\n}\n\nexport class SkipNativeBuildError extends Error {}\n\nexport class BuildContext<TJob extends Job = Job> {\n public readonly workingdir: string;\n public logger: bunyan;\n public readonly logBuffer: LogBuffer;\n public readonly cacheManager?: CacheManager;\n public readonly reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n public readonly skipNativeBuild?: boolean;\n public artifacts: Artifacts = {};\n\n private _env: Env;\n private _job: TJob;\n private _metadata?: Metadata;\n private readonly defaultLogger: bunyan;\n private readonly _uploadArtifact: BuildContextOptions['uploadArtifact'];\n private buildPhase?: BuildPhase;\n private buildPhaseSkipped = false;\n private buildPhaseHasWarnings = false;\n private _appConfig?: ExpoConfig;\n private readonly reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n\n constructor(job: TJob, options: BuildContextOptions) {\n this.workingdir = options.workingdir;\n this.defaultLogger = options.logger;\n this.logger = this.defaultLogger;\n this.logBuffer = options.logBuffer;\n this.cacheManager = options.cacheManager;\n this._uploadArtifact = options.uploadArtifact;\n this.reportError = options.reportError;\n this._job = job;\n this._metadata = options.metadata;\n this.skipNativeBuild = options.skipNativeBuild;\n this.reportBuildPhaseStats = options.reportBuildPhaseStats;\n\n const environmentSecrets = this.getEnvironmentSecrets(job);\n this._env = {\n ...options.env,\n ...job?.builderEnvironment?.env,\n ...environmentSecrets,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public get job(): TJob {\n return this._job;\n }\n public get metadata(): Metadata | undefined {\n return this._metadata;\n }\n public get env(): Env {\n return this._env;\n }\n public get buildDirectory(): string {\n return path.join(this.workingdir, 'build');\n }\n public get buildLogsDirectory(): string {\n return path.join(this.workingdir, 'logs');\n }\n /**\n * Directory used to store executables used during regular (non-custom) builds.\n */\n public get buildExecutablesDirectory(): string {\n return path.join(this.workingdir, 'bin');\n }\n /**\n * Directory used to store env variables registered in the current build step.\n * All values stored here will be available in the next build phase as env variables.\n */\n public get buildEnvsDirectory(): string {\n return path.join(this.workingdir, 'env');\n }\n public get environmentSecretsDirectory(): string {\n return path.join(this.workingdir, 'environment-secrets');\n }\n public get packageManager(): PackageManager {\n return resolvePackageManager(this.getReactNativeProjectDirectory());\n }\n public get appConfig(): ExpoConfig {\n if (!this._appConfig) {\n this._appConfig = readAppConfig({\n projectDir: this.getReactNativeProjectDirectory(),\n env: this.env,\n logger: this.logger,\n sdkVersion: this.metadata?.sdkVersion,\n }).exp;\n }\n return this._appConfig;\n }\n\n public async runBuildPhase<T>(\n buildPhase: BuildPhase,\n phase: () => Promise<T>,\n {\n doNotMarkStart = false,\n doNotMarkEnd = false,\n }: {\n doNotMarkStart?: boolean;\n doNotMarkEnd?: boolean;\n } = {}\n ): Promise<T> {\n let startTimestamp = Date.now();\n try {\n this.setBuildPhase(buildPhase, { doNotMarkStart });\n startTimestamp = Date.now();\n const result = await phase();\n const durationMs = Date.now() - startTimestamp;\n const buildPhaseResult: BuildPhaseResult = this.buildPhaseSkipped\n ? BuildPhaseResult.SKIPPED\n : this.buildPhaseHasWarnings\n ? BuildPhaseResult.WARNING\n : BuildPhaseResult.SUCCESS;\n await this.endCurrentBuildPhaseAsync({ result: buildPhaseResult, doNotMarkEnd, durationMs });\n return result;\n } catch (err: any) {\n const durationMs = Date.now() - startTimestamp;\n const resolvedError = await this.handleBuildPhaseErrorAsync(err, buildPhase);\n await this.endCurrentBuildPhaseAsync({ result: BuildPhaseResult.FAIL, durationMs });\n throw resolvedError;\n }\n }\n\n public markBuildPhaseSkipped(): void {\n this.buildPhaseSkipped = true;\n }\n\n public markBuildPhaseHasWarnings(): void {\n this.buildPhaseHasWarnings = true;\n }\n\n public async uploadArtifact({\n artifact,\n logger,\n }: {\n artifact: ArtifactToUpload;\n logger: bunyan;\n }): Promise<void> {\n const bucketKey = await this._uploadArtifact({ artifact, logger });\n if (bucketKey && !isGenericArtifact(artifact)) {\n this.artifacts[artifact.type] = bucketKey;\n }\n }\n\n public updateEnv(env: Env): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating environment variables is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._env = {\n ...env,\n ...this._env,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public updateJobInformation(job: TJob, metadata: Metadata): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating job information is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._job = { ...job, triggeredBy: this._job.triggeredBy };\n this._metadata = metadata;\n }\n\n private async handleBuildPhaseErrorAsync(\n err: any,\n buildPhase: BuildPhase\n ): Promise<errors.BuildError> {\n const buildError = await resolveBuildPhaseErrorAsync(\n err,\n this.logBuffer.getPhaseLogs(buildPhase),\n {\n job: this.job,\n phase: buildPhase,\n env: this.env,\n },\n this.buildLogsDirectory\n );\n if (buildError.errorCode === errors.ErrorCode.UNKNOWN_ERROR) {\n // leaving message empty, website will display err.stack which already includes err.message\n this.logger.error({ err }, '');\n } else {\n this.logger.error(`Error: ${buildError.userFacingMessage}`);\n }\n return buildError;\n }\n\n public getReactNativeProjectDirectory(baseDirectory = this.buildDirectory): string {\n if (!this.job.platform) {\n // Generic jobs start from base directory.\n return baseDirectory;\n }\n\n return path.join(baseDirectory, this.job.projectRootDirectory ?? '.');\n }\n\n private setBuildPhase(buildPhase: BuildPhase, { doNotMarkStart = false } = {}): void {\n if (this.buildPhase) {\n if (this.buildPhase === buildPhase) {\n return;\n } else {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result: BuildPhaseResult.UNKNOWN },\n `End phase: ${this.buildPhase}`\n );\n this.logger = this.defaultLogger;\n }\n }\n this.buildPhase = buildPhase;\n this.logger = this.defaultLogger.child({ phase: buildPhase });\n if (!doNotMarkStart) {\n this.logger.info({ marker: LogMarker.START_PHASE }, `Start phase: ${this.buildPhase}`);\n }\n }\n\n private async endCurrentBuildPhaseAsync({\n result,\n doNotMarkEnd = false,\n durationMs,\n }: {\n result: BuildPhaseResult;\n doNotMarkEnd?: boolean;\n durationMs: number;\n }): Promise<void> {\n if (!this.buildPhase) {\n return;\n }\n await this.collectAndUpdateEnvVariablesAsync();\n\n this.reportBuildPhaseStats?.({ buildPhase: this.buildPhase, result, durationMs });\n\n if (!doNotMarkEnd) {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result, durationMs },\n `End phase: ${this.buildPhase}`\n );\n }\n this.logger = this.defaultLogger;\n this.buildPhase = undefined;\n this.buildPhaseSkipped = false;\n this.buildPhaseHasWarnings = false;\n }\n\n private async collectAndUpdateEnvVariablesAsync(): Promise<void> {\n const filenames = await fs.readdir(this.buildEnvsDirectory);\n\n const entries = await Promise.all(\n filenames.map(async (basename) => {\n const rawContents = await fs.readFile(\n path.join(this.buildEnvsDirectory, basename),\n 'utf-8'\n );\n return [basename, rawContents];\n })\n );\n await Promise.all(\n filenames.map(async (basename) => {\n await fs.remove(path.join(this.buildEnvsDirectory, basename));\n })\n );\n this._env = {\n ...this._env,\n ...Object.fromEntries(entries),\n };\n }\n\n private getEnvironmentSecrets(job: TJob): Record<string, string> {\n if (!job?.secrets?.environmentSecrets) {\n return {};\n }\n\n const environmentSecrets: Record<string, string> = {};\n for (const { name, type, value } of job.secrets.environmentSecrets) {\n if (type === EnvironmentSecretType.STRING) {\n environmentSecrets[name] = value;\n } else {\n environmentSecrets[name] = createTemporaryEnvironmentSecretFile(\n this.environmentSecretsDirectory,\n value\n );\n }\n }\n return environmentSecrets;\n }\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport {\n ManagedArtifactType,\n BuildPhase,\n BuildPhaseResult,\n BuildPhaseStats,\n Job,\n LogMarker,\n Env,\n errors,\n Metadata,\n EnvironmentSecretType,\n GenericArtifactType,\n isGenericArtifact,\n} from '@expo/eas-build-job';\nimport { ExpoConfig } from '@expo/config';\nimport { bunyan } from '@expo/logger';\nimport { BuildMode, BuildTrigger } from '@expo/eas-build-job/dist/common';\n\nimport { PackageManager, resolvePackageManager } from './utils/packageManager';\nimport { resolveBuildPhaseErrorAsync } from './buildErrors/detectError';\nimport { readAppConfig } from './utils/appConfig';\nimport { createTemporaryEnvironmentSecretFile } from './utils/environmentSecrets';\n\nexport type Artifacts = Partial<Record<ManagedArtifactType, string>>;\n\nexport interface CacheManager {\n saveCache(ctx: BuildContext<Job>): Promise<void>;\n restoreCache(ctx: BuildContext<Job>): Promise<void>;\n}\n\nexport interface LogBuffer {\n getLogs(): string[];\n getPhaseLogs(buildPhase: string): string[];\n}\n\nexport type ArtifactToUpload =\n | {\n type: ManagedArtifactType;\n paths: string[];\n }\n | {\n type: GenericArtifactType;\n key: string;\n paths: string[];\n };\n\nexport interface BuildContextOptions {\n workingdir: string;\n logger: bunyan;\n logBuffer: LogBuffer;\n env: Env;\n cacheManager?: CacheManager;\n uploadArtifact: (spec: { artifact: ArtifactToUpload; logger: bunyan }) => Promise<string | null>;\n reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n skipNativeBuild?: boolean;\n metadata?: Metadata;\n}\n\nexport class SkipNativeBuildError extends Error {}\n\nexport class BuildContext<TJob extends Job = Job> {\n public readonly workingdir: string;\n public logger: bunyan;\n public readonly logBuffer: LogBuffer;\n public readonly cacheManager?: CacheManager;\n public readonly reportError?: (\n msg: string,\n err?: Error,\n options?: { tags?: Record<string, string>; extras?: Record<string, string> }\n ) => void;\n public readonly skipNativeBuild?: boolean;\n public artifacts: Artifacts = {};\n\n private _env: Env;\n private _job: TJob;\n private _metadata?: Metadata;\n private readonly defaultLogger: bunyan;\n private readonly _uploadArtifact: BuildContextOptions['uploadArtifact'];\n private buildPhase?: BuildPhase;\n private buildPhaseSkipped = false;\n private buildPhaseHasWarnings = false;\n private _appConfig?: ExpoConfig;\n private readonly reportBuildPhaseStats?: (stats: BuildPhaseStats) => void;\n\n constructor(job: TJob, options: BuildContextOptions) {\n this.workingdir = options.workingdir;\n this.defaultLogger = options.logger;\n this.logger = this.defaultLogger;\n this.logBuffer = options.logBuffer;\n this.cacheManager = options.cacheManager;\n this._uploadArtifact = options.uploadArtifact;\n this.reportError = options.reportError;\n\n const shouldApplyRepackOverrides = job.platform && job.mode === BuildMode.REPACK;\n this._job = {\n ...job,\n ...(shouldApplyRepackOverrides\n ? {\n customBuildConfig: {\n path: '__eas/repack.yml',\n },\n }\n : null),\n };\n this._metadata = options.metadata;\n this.skipNativeBuild = options.skipNativeBuild;\n this.reportBuildPhaseStats = options.reportBuildPhaseStats;\n\n const environmentSecrets = this.getEnvironmentSecrets(job);\n this._env = {\n ...options.env,\n ...job?.builderEnvironment?.env,\n ...environmentSecrets,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public get job(): TJob {\n return this._job;\n }\n public get metadata(): Metadata | undefined {\n return this._metadata;\n }\n public get env(): Env {\n return this._env;\n }\n public get buildDirectory(): string {\n return path.join(this.workingdir, 'build');\n }\n public get buildLogsDirectory(): string {\n return path.join(this.workingdir, 'logs');\n }\n /**\n * Directory used to store executables used during regular (non-custom) builds.\n */\n public get buildExecutablesDirectory(): string {\n return path.join(this.workingdir, 'bin');\n }\n /**\n * Directory used to store env variables registered in the current build step.\n * All values stored here will be available in the next build phase as env variables.\n */\n public get buildEnvsDirectory(): string {\n return path.join(this.workingdir, 'env');\n }\n public get environmentSecretsDirectory(): string {\n return path.join(this.workingdir, 'environment-secrets');\n }\n public get packageManager(): PackageManager {\n return resolvePackageManager(this.getReactNativeProjectDirectory());\n }\n public get appConfig(): ExpoConfig {\n if (!this._appConfig) {\n this._appConfig = readAppConfig({\n projectDir: this.getReactNativeProjectDirectory(),\n env: this.env,\n logger: this.logger,\n sdkVersion: this.metadata?.sdkVersion,\n }).exp;\n }\n return this._appConfig;\n }\n\n public async runBuildPhase<T>(\n buildPhase: BuildPhase,\n phase: () => Promise<T>,\n {\n doNotMarkStart = false,\n doNotMarkEnd = false,\n }: {\n doNotMarkStart?: boolean;\n doNotMarkEnd?: boolean;\n } = {}\n ): Promise<T> {\n let startTimestamp = Date.now();\n try {\n this.setBuildPhase(buildPhase, { doNotMarkStart });\n startTimestamp = Date.now();\n const result = await phase();\n const durationMs = Date.now() - startTimestamp;\n const buildPhaseResult: BuildPhaseResult = this.buildPhaseSkipped\n ? BuildPhaseResult.SKIPPED\n : this.buildPhaseHasWarnings\n ? BuildPhaseResult.WARNING\n : BuildPhaseResult.SUCCESS;\n await this.endCurrentBuildPhaseAsync({ result: buildPhaseResult, doNotMarkEnd, durationMs });\n return result;\n } catch (err: any) {\n const durationMs = Date.now() - startTimestamp;\n const resolvedError = await this.handleBuildPhaseErrorAsync(err, buildPhase);\n await this.endCurrentBuildPhaseAsync({ result: BuildPhaseResult.FAIL, durationMs });\n throw resolvedError;\n }\n }\n\n public markBuildPhaseSkipped(): void {\n this.buildPhaseSkipped = true;\n }\n\n public markBuildPhaseHasWarnings(): void {\n this.buildPhaseHasWarnings = true;\n }\n\n public async uploadArtifact({\n artifact,\n logger,\n }: {\n artifact: ArtifactToUpload;\n logger: bunyan;\n }): Promise<void> {\n const bucketKey = await this._uploadArtifact({ artifact, logger });\n if (bucketKey && !isGenericArtifact(artifact)) {\n this.artifacts[artifact.type] = bucketKey;\n }\n }\n\n public updateEnv(env: Env): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating environment variables is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._env = {\n ...env,\n ...this._env,\n __EAS_BUILD_ENVS_DIR: this.buildEnvsDirectory,\n };\n this._env.PATH = this._env.PATH\n ? [this.buildExecutablesDirectory, this._env.PATH].join(':')\n : this.buildExecutablesDirectory;\n }\n\n public updateJobInformation(job: TJob, metadata: Metadata): void {\n if (this._job.triggeredBy !== BuildTrigger.GIT_BASED_INTEGRATION) {\n throw new Error(\n 'Updating job information is only allowed when build was triggered by a git-based integration.'\n );\n }\n this._job = { ...job, triggeredBy: this._job.triggeredBy };\n this._metadata = metadata;\n }\n\n private async handleBuildPhaseErrorAsync(\n err: any,\n buildPhase: BuildPhase\n ): Promise<errors.BuildError> {\n const buildError = await resolveBuildPhaseErrorAsync(\n err,\n this.logBuffer.getPhaseLogs(buildPhase),\n {\n job: this.job,\n phase: buildPhase,\n env: this.env,\n },\n this.buildLogsDirectory\n );\n if (buildError.errorCode === errors.ErrorCode.UNKNOWN_ERROR) {\n // leaving message empty, website will display err.stack which already includes err.message\n this.logger.error({ err }, '');\n } else {\n this.logger.error(`Error: ${buildError.userFacingMessage}`);\n }\n return buildError;\n }\n\n public getReactNativeProjectDirectory(baseDirectory = this.buildDirectory): string {\n if (!this.job.platform) {\n // Generic jobs start from base directory.\n return baseDirectory;\n }\n\n return path.join(baseDirectory, this.job.projectRootDirectory ?? '.');\n }\n\n private setBuildPhase(buildPhase: BuildPhase, { doNotMarkStart = false } = {}): void {\n if (this.buildPhase) {\n if (this.buildPhase === buildPhase) {\n return;\n } else {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result: BuildPhaseResult.UNKNOWN },\n `End phase: ${this.buildPhase}`\n );\n this.logger = this.defaultLogger;\n }\n }\n this.buildPhase = buildPhase;\n this.logger = this.defaultLogger.child({ phase: buildPhase });\n if (!doNotMarkStart) {\n this.logger.info({ marker: LogMarker.START_PHASE }, `Start phase: ${this.buildPhase}`);\n }\n }\n\n private async endCurrentBuildPhaseAsync({\n result,\n doNotMarkEnd = false,\n durationMs,\n }: {\n result: BuildPhaseResult;\n doNotMarkEnd?: boolean;\n durationMs: number;\n }): Promise<void> {\n if (!this.buildPhase) {\n return;\n }\n await this.collectAndUpdateEnvVariablesAsync();\n\n this.reportBuildPhaseStats?.({ buildPhase: this.buildPhase, result, durationMs });\n\n if (!doNotMarkEnd) {\n this.logger.info(\n { marker: LogMarker.END_PHASE, result, durationMs },\n `End phase: ${this.buildPhase}`\n );\n }\n this.logger = this.defaultLogger;\n this.buildPhase = undefined;\n this.buildPhaseSkipped = false;\n this.buildPhaseHasWarnings = false;\n }\n\n private async collectAndUpdateEnvVariablesAsync(): Promise<void> {\n const filenames = await fs.readdir(this.buildEnvsDirectory);\n\n const entries = await Promise.all(\n filenames.map(async (basename) => {\n const rawContents = await fs.readFile(\n path.join(this.buildEnvsDirectory, basename),\n 'utf-8'\n );\n return [basename, rawContents];\n })\n );\n await Promise.all(\n filenames.map(async (basename) => {\n await fs.remove(path.join(this.buildEnvsDirectory, basename));\n })\n );\n this._env = {\n ...this._env,\n ...Object.fromEntries(entries),\n };\n }\n\n private getEnvironmentSecrets(job: TJob): Record<string, string> {\n if (!job?.secrets?.environmentSecrets) {\n return {};\n }\n\n const environmentSecrets: Record<string, string> = {};\n for (const { name, type, value } of job.secrets.environmentSecrets) {\n if (type === EnvironmentSecretType.STRING) {\n environmentSecrets[name] = value;\n } else {\n environmentSecrets[name] = createTemporaryEnvironmentSecretFile(\n this.environmentSecretsDirectory,\n value\n );\n }\n }\n return environmentSecrets;\n }\n}\n"]}
package/dist/ios/pod.d.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  import { Ios } from '@expo/eas-build-job';
2
+ import { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/turtle-spawn';
2
3
  import { BuildContext } from '../context';
3
- export declare function installPods<TJob extends Ios.Job>(ctx: BuildContext<TJob>): Promise<void>;
4
+ export declare function installPods<TJob extends Ios.Job>(ctx: BuildContext<TJob>, { infoCallbackFn }: SpawnOptions): Promise<{
5
+ spawnPromise: SpawnPromise<SpawnResult>;
6
+ }>;
package/dist/ios/pod.js CHANGED
@@ -6,28 +6,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.installPods = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const turtle_spawn_1 = __importDefault(require("@expo/turtle-spawn"));
9
- async function installPods(ctx) {
9
+ async function installPods(ctx, { infoCallbackFn }) {
10
10
  const iosDir = path_1.default.join(ctx.getReactNativeProjectDirectory(), 'ios');
11
- await (0, turtle_spawn_1.default)('pod', ['install'], {
12
- cwd: iosDir,
13
- logger: ctx.logger,
14
- env: {
15
- ...ctx.env,
16
- LANG: 'en_US.UTF-8',
17
- ...(ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL
18
- ? { NEXUS_COCOAPODS_REPO_URL: ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL }
19
- : {}),
20
- },
21
- lineTransformer: (line) => {
22
- if (!line ||
23
- /\[!\] '[\w-]+' uses the unencrypted 'http' protocol to transfer the Pod\./.exec(line)) {
24
- return null;
25
- }
26
- else {
27
- return line;
28
- }
29
- },
30
- });
11
+ return {
12
+ spawnPromise: (0, turtle_spawn_1.default)('pod', ['install'], {
13
+ cwd: iosDir,
14
+ logger: ctx.logger,
15
+ env: {
16
+ ...ctx.env,
17
+ LANG: 'en_US.UTF-8',
18
+ ...(ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL
19
+ ? { NEXUS_COCOAPODS_REPO_URL: ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL }
20
+ : {}),
21
+ },
22
+ lineTransformer: (line) => {
23
+ if (!line ||
24
+ /\[!\] '[\w-]+' uses the unencrypted 'http' protocol to transfer the Pod\./.exec(line)) {
25
+ return null;
26
+ }
27
+ else {
28
+ return line;
29
+ }
30
+ },
31
+ infoCallbackFn,
32
+ }),
33
+ };
31
34
  }
32
35
  exports.installPods = installPods;
33
36
  //# sourceMappingURL=pod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pod.js","sourceRoot":"","sources":["../../src/ios/pod.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,sEAAuC;AAIhC,KAAK,UAAU,WAAW,CAAuB,GAAuB;IAC7E,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtE,MAAM,IAAA,sBAAK,EAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;QAC9B,GAAG,EAAE,MAAM;QACX,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,EAAE;YACH,GAAG,GAAG,CAAC,GAAG;YACV,IAAI,EAAE,aAAa;YACnB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B;gBACvC,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE;gBACrE,CAAC,CAAC,EAAE,CAAC;SACR;QACD,eAAe,EAAE,CAAC,IAAa,EAAE,EAAE;YACjC,IACE,CAAC,IAAI;gBACL,2EAA2E,CAAC,IAAI,CAAC,IAAI,CAAC,EACtF,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAxBD,kCAwBC","sourcesContent":["import path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport spawn from '@expo/turtle-spawn';\n\nimport { BuildContext } from '../context';\n\nexport async function installPods<TJob extends Ios.Job>(ctx: BuildContext<TJob>): Promise<void> {\n const iosDir = path.join(ctx.getReactNativeProjectDirectory(), 'ios');\n\n await spawn('pod', ['install'], {\n cwd: iosDir,\n logger: ctx.logger,\n env: {\n ...ctx.env,\n LANG: 'en_US.UTF-8',\n ...(ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL\n ? { NEXUS_COCOAPODS_REPO_URL: ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL }\n : {}),\n },\n lineTransformer: (line?: string) => {\n if (\n !line ||\n /\\[!\\] '[\\w-]+' uses the unencrypted 'http' protocol to transfer the Pod\\./.exec(line)\n ) {\n return null;\n } else {\n return line;\n }\n },\n });\n}\n"]}
1
+ {"version":3,"file":"pod.js","sourceRoot":"","sources":["../../src/ios/pod.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAGxB,sEAAoF;AAI7E,KAAK,UAAU,WAAW,CAC/B,GAAuB,EACvB,EAAE,cAAc,EAAgB;IAEhC,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,KAAK,CAAC,CAAC;IAEtE,OAAO;QACL,YAAY,EAAE,IAAA,sBAAK,EAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;YACtC,GAAG,EAAE,MAAM;YACX,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,GAAG;gBACV,IAAI,EAAE,aAAa;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B;oBACvC,CAAC,CAAC,EAAE,wBAAwB,EAAE,GAAG,CAAC,GAAG,CAAC,6BAA6B,EAAE;oBACrE,CAAC,CAAC,EAAE,CAAC;aACR;YACD,eAAe,EAAE,CAAC,IAAa,EAAE,EAAE;gBACjC,IACE,CAAC,IAAI;oBACL,2EAA2E,CAAC,IAAI,CAAC,IAAI,CAAC,EACtF,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,cAAc;SACf,CAAC;KACH,CAAC;AACJ,CAAC;AA9BD,kCA8BC","sourcesContent":["import path from 'path';\n\nimport { Ios } from '@expo/eas-build-job';\nimport spawn, { SpawnOptions, SpawnPromise, SpawnResult } from '@expo/turtle-spawn';\n\nimport { BuildContext } from '../context';\n\nexport async function installPods<TJob extends Ios.Job>(\n ctx: BuildContext<TJob>,\n { infoCallbackFn }: SpawnOptions\n): Promise<{ spawnPromise: SpawnPromise<SpawnResult> }> {\n const iosDir = path.join(ctx.getReactNativeProjectDirectory(), 'ios');\n\n return {\n spawnPromise: spawn('pod', ['install'], {\n cwd: iosDir,\n logger: ctx.logger,\n env: {\n ...ctx.env,\n LANG: 'en_US.UTF-8',\n ...(ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL\n ? { NEXUS_COCOAPODS_REPO_URL: ctx.env.EAS_BUILD_COCOAPODS_CACHE_URL }\n : {}),\n },\n lineTransformer: (line?: string) => {\n if (\n !line ||\n /\\[!\\] '[\\w-]+' uses the unencrypted 'http' protocol to transfer the Pod\\./.exec(line)\n ) {\n return null;\n } else {\n return line;\n }\n },\n infoCallbackFn,\n }),\n };\n}\n"]}
@@ -18,3 +18,4 @@ export declare function uploadApplicationArchive(ctx: BuildContext<Job>, { logge
18
18
  patternOrPath: string;
19
19
  rootDir: string;
20
20
  }): Promise<void>;
21
+ export declare function formatBytes(bytes: number): string;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.uploadApplicationArchive = exports.maybeFindAndUploadBuildArtifacts = exports.findArtifacts = exports.FindArtifactsError = void 0;
6
+ exports.formatBytes = exports.uploadApplicationArchive = exports.maybeFindAndUploadBuildArtifacts = exports.findArtifacts = exports.FindArtifactsError = void 0;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_extra_1 = __importDefault(require("fs-extra"));
9
9
  const fast_glob_1 = __importDefault(require("fast-glob"));
@@ -67,7 +67,11 @@ async function maybeFindAndUploadBuildArtifacts(ctx, { logger }) {
67
67
  patternOrPath: path,
68
68
  logger,
69
69
  })))).flat();
70
- logger.info(`Build artifacts: ${buildArtifacts.join(', ')}`);
70
+ const artifactsSizes = await getArtifactsSizes(buildArtifacts);
71
+ logger.info(`Build artifacts:`);
72
+ for (const [path, size] of Object.entries(artifactsSizes)) {
73
+ logger.info(` - ${path} (${formatBytes(size)})`);
74
+ }
71
75
  logger.info('Uploading build artifacts...');
72
76
  await ctx.uploadArtifact({
73
77
  artifact: {
@@ -84,7 +88,11 @@ async function maybeFindAndUploadBuildArtifacts(ctx, { logger }) {
84
88
  exports.maybeFindAndUploadBuildArtifacts = maybeFindAndUploadBuildArtifacts;
85
89
  async function uploadApplicationArchive(ctx, { logger, patternOrPath, rootDir, }) {
86
90
  const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });
87
- logger.info(`Application archives: ${applicationArchives.join(', ')}`);
91
+ const artifactsSizes = await getArtifactsSizes(applicationArchives);
92
+ logger.info(`Application archives:`);
93
+ for (const [path, size] of Object.entries(artifactsSizes)) {
94
+ logger.info(` - ${path} (${formatBytes(size)})`);
95
+ }
88
96
  logger.info('Uploading application archive...');
89
97
  await ctx.uploadArtifact({
90
98
  artifact: {
@@ -95,4 +103,43 @@ async function uploadApplicationArchive(ctx, { logger, patternOrPath, rootDir, }
95
103
  });
96
104
  }
97
105
  exports.uploadApplicationArchive = uploadApplicationArchive;
106
+ async function getArtifactsSizes(artifacts) {
107
+ const artifactsSizes = {};
108
+ await Promise.all(artifacts.map(async (artifact) => {
109
+ const { size } = await fs_extra_1.default.stat(artifact);
110
+ artifactsSizes[artifact] = size;
111
+ }));
112
+ return artifactsSizes;
113
+ }
114
+ // same as in
115
+ // https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60
116
+ function formatBytes(bytes) {
117
+ if (bytes === 0) {
118
+ return `0`;
119
+ }
120
+ let multiplier = 1;
121
+ if (bytes < 1024 * multiplier) {
122
+ return `${Math.floor(bytes)} B`;
123
+ }
124
+ multiplier *= 1024;
125
+ if (bytes < 102.4 * multiplier) {
126
+ return `${(bytes / multiplier).toFixed(1)} KB`;
127
+ }
128
+ if (bytes < 1024 * multiplier) {
129
+ return `${Math.floor(bytes / 1024)} KB`;
130
+ }
131
+ multiplier *= 1024;
132
+ if (bytes < 102.4 * multiplier) {
133
+ return `${(bytes / multiplier).toFixed(1)} MB`;
134
+ }
135
+ if (bytes < 1024 * multiplier) {
136
+ return `${Math.floor(bytes / multiplier)} MB`;
137
+ }
138
+ multiplier *= 1024;
139
+ if (bytes < 102.4 * multiplier) {
140
+ return `${(bytes / multiplier).toFixed(1)} GB`;
141
+ }
142
+ return `${Math.floor(bytes / 1024)} GB`;
143
+ }
144
+ exports.formatBytes = formatBytes;
98
145
  //# sourceMappingURL=artifacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/utils/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { ManagedArtifactType, Job, BuildJob } from '@expo/eas-build-job';\n\nimport { BuildContext } from '../context';\n\nexport class FindArtifactsError extends Error {}\n\nexport async function findArtifacts({\n rootDir,\n patternOrPath,\n logger,\n}: {\n rootDir: string;\n patternOrPath: string;\n /** If provided, will log error suggesting possible files to upload. */\n logger: bunyan | null;\n}): Promise<string[]> {\n const files = path.isAbsolute(patternOrPath)\n ? (await fs.pathExists(patternOrPath))\n ? [patternOrPath]\n : []\n : await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new FindArtifactsError(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n if (logger) {\n await logMissingFileError(path.join(rootDir, patternOrPath), logger);\n }\n throw new FindArtifactsError(`No such file or directory ${patternOrPath}`);\n }\n }\n\n return files.map((filePath) => {\n // User may provide an absolute path as input in which case\n // fg will return an absolute path.\n if (path.isAbsolute(filePath)) {\n return filePath;\n }\n\n // User may also provide a relative path in which case\n // fg will return a path relative to rootDir.\n return path.join(rootDir, filePath);\n });\n}\n\nasync function logMissingFileError(artifactPath: string, buildLogger: bunyan): Promise<void> {\n let currentPath = artifactPath;\n while (!(await fs.pathExists(currentPath))) {\n currentPath = path.resolve(currentPath, '..');\n }\n if (currentPath === path.resolve(currentPath, '..')) {\n buildLogger.error(`There is no such file or directory \"${artifactPath}\".`);\n return;\n }\n const dirContent = await fs.readdir(currentPath);\n if (dirContent.length === 0) {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" is empty.`\n );\n } else {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" contains [${dirContent.join(\n ', '\n )}].`\n );\n }\n}\n\nexport async function maybeFindAndUploadBuildArtifacts(\n ctx: BuildContext<BuildJob>,\n { logger }: { logger: bunyan }\n): Promise<void> {\n if (!ctx.job.buildArtifactPaths || ctx.job.buildArtifactPaths.length === 0) {\n return;\n }\n try {\n const buildArtifacts = (\n await Promise.all(\n ctx.job.buildArtifactPaths.map((path) =>\n findArtifacts({\n rootDir: ctx.getReactNativeProjectDirectory(),\n patternOrPath: path,\n logger,\n })\n )\n )\n ).flat();\n logger.info(`Build artifacts: ${buildArtifacts.join(', ')}`);\n logger.info('Uploading build artifacts...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.BUILD_ARTIFACTS,\n paths: buildArtifacts,\n },\n logger,\n });\n } catch (err: any) {\n logger.error({ err }, 'Failed to upload build artifacts');\n }\n}\n\nexport async function uploadApplicationArchive(\n ctx: BuildContext<Job>,\n {\n logger,\n patternOrPath,\n rootDir,\n }: {\n logger: bunyan;\n patternOrPath: string;\n rootDir: string;\n }\n): Promise<void> {\n const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });\n logger.info(`Application archives: ${applicationArchives.join(', ')}`);\n logger.info('Uploading application archive...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: applicationArchives,\n },\n logger,\n });\n}\n"]}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/utils/artifacts.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\n\nimport fs from 'fs-extra';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { ManagedArtifactType, Job, BuildJob } from '@expo/eas-build-job';\n\nimport { BuildContext } from '../context';\n\nexport class FindArtifactsError extends Error {}\n\nexport async function findArtifacts({\n rootDir,\n patternOrPath,\n logger,\n}: {\n rootDir: string;\n patternOrPath: string;\n /** If provided, will log error suggesting possible files to upload. */\n logger: bunyan | null;\n}): Promise<string[]> {\n const files = path.isAbsolute(patternOrPath)\n ? (await fs.pathExists(patternOrPath))\n ? [patternOrPath]\n : []\n : await fg(patternOrPath, { cwd: rootDir, onlyFiles: false });\n if (files.length === 0) {\n if (fg.isDynamicPattern(patternOrPath)) {\n throw new FindArtifactsError(`There are no files matching pattern \"${patternOrPath}\"`);\n } else {\n if (logger) {\n await logMissingFileError(path.join(rootDir, patternOrPath), logger);\n }\n throw new FindArtifactsError(`No such file or directory ${patternOrPath}`);\n }\n }\n\n return files.map((filePath) => {\n // User may provide an absolute path as input in which case\n // fg will return an absolute path.\n if (path.isAbsolute(filePath)) {\n return filePath;\n }\n\n // User may also provide a relative path in which case\n // fg will return a path relative to rootDir.\n return path.join(rootDir, filePath);\n });\n}\n\nasync function logMissingFileError(artifactPath: string, buildLogger: bunyan): Promise<void> {\n let currentPath = artifactPath;\n while (!(await fs.pathExists(currentPath))) {\n currentPath = path.resolve(currentPath, '..');\n }\n if (currentPath === path.resolve(currentPath, '..')) {\n buildLogger.error(`There is no such file or directory \"${artifactPath}\".`);\n return;\n }\n const dirContent = await fs.readdir(currentPath);\n if (dirContent.length === 0) {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" is empty.`\n );\n } else {\n buildLogger.error(\n `There is no such file or directory \"${artifactPath}\". Directory \"${currentPath}\" contains [${dirContent.join(\n ', '\n )}].`\n );\n }\n}\n\nexport async function maybeFindAndUploadBuildArtifacts(\n ctx: BuildContext<BuildJob>,\n { logger }: { logger: bunyan }\n): Promise<void> {\n if (!ctx.job.buildArtifactPaths || ctx.job.buildArtifactPaths.length === 0) {\n return;\n }\n try {\n const buildArtifacts = (\n await Promise.all(\n ctx.job.buildArtifactPaths.map((path) =>\n findArtifacts({\n rootDir: ctx.getReactNativeProjectDirectory(),\n patternOrPath: path,\n logger,\n })\n )\n )\n ).flat();\n const artifactsSizes = await getArtifactsSizes(buildArtifacts);\n logger.info(`Build artifacts:`);\n for (const [path, size] of Object.entries(artifactsSizes)) {\n logger.info(` - ${path} (${formatBytes(size)})`);\n }\n logger.info('Uploading build artifacts...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.BUILD_ARTIFACTS,\n paths: buildArtifacts,\n },\n logger,\n });\n } catch (err: any) {\n logger.error({ err }, 'Failed to upload build artifacts');\n }\n}\n\nexport async function uploadApplicationArchive(\n ctx: BuildContext<Job>,\n {\n logger,\n patternOrPath,\n rootDir,\n }: {\n logger: bunyan;\n patternOrPath: string;\n rootDir: string;\n }\n): Promise<void> {\n const applicationArchives = await findArtifacts({ rootDir, patternOrPath, logger });\n const artifactsSizes = await getArtifactsSizes(applicationArchives);\n logger.info(`Application archives:`);\n for (const [path, size] of Object.entries(artifactsSizes)) {\n logger.info(` - ${path} (${formatBytes(size)})`);\n }\n logger.info('Uploading application archive...');\n await ctx.uploadArtifact({\n artifact: {\n type: ManagedArtifactType.APPLICATION_ARCHIVE,\n paths: applicationArchives,\n },\n logger,\n });\n}\n\nasync function getArtifactsSizes(artifacts: string[]): Promise<Record<string, number>> {\n const artifactsSizes: Record<string, number> = {};\n await Promise.all(\n artifacts.map(async (artifact) => {\n const { size } = await fs.stat(artifact);\n artifactsSizes[artifact] = size;\n })\n );\n return artifactsSizes;\n}\n\n// same as in\n// https://github.com/expo/eas-cli/blob/f0e3b648a1634266e7d723bd49a84866ab9b5801/packages/eas-cli/src/utils/files.ts#L33-L60\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) {\n return `0`;\n }\n let multiplier = 1;\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes)} B`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} KB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / 1024)} KB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} MB`;\n }\n if (bytes < 1024 * multiplier) {\n return `${Math.floor(bytes / multiplier)} MB`;\n }\n multiplier *= 1024;\n if (bytes < 102.4 * multiplier) {\n return `${(bytes / multiplier).toFixed(1)} GB`;\n }\n return `${Math.floor(bytes / 1024)} GB`;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/build-tools",
3
- "version": "1.0.113",
3
+ "version": "1.0.115",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -25,13 +25,13 @@
25
25
  "@expo/config": "8.5.4",
26
26
  "@expo/config-plugins": "7.8.4",
27
27
  "@expo/downloader": "1.0.57",
28
- "@expo/eas-build-job": "1.0.108",
28
+ "@expo/eas-build-job": "1.0.114",
29
29
  "@expo/env": "^0.0.5",
30
30
  "@expo/logger": "1.0.57",
31
31
  "@expo/package-manager": "1.1.2",
32
32
  "@expo/plist": "^0.0.20",
33
33
  "@expo/repack-app": "0.0.6",
34
- "@expo/steps": "1.0.108",
34
+ "@expo/steps": "1.0.114",
35
35
  "@expo/template-file": "1.0.57",
36
36
  "@expo/turtle-spawn": "1.0.57",
37
37
  "@expo/xcpretty": "^4.3.0",
@@ -71,5 +71,5 @@
71
71
  "node": "20.11.0",
72
72
  "yarn": "1.22.21"
73
73
  },
74
- "gitHead": "d6c4b6e6f8d3dbf8aa1216cbafa3d484f08cd516"
74
+ "gitHead": "6323614cf61fc5ba2dddc17588f3764976638f69"
75
75
  }