@expo/build-tools 1.0.263 → 1.0.264
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builders/android.js +1 -0
- package/dist/builders/android.js.map +1 -1
- package/dist/builders/ios.js +1 -0
- package/dist/builders/ios.js.map +1 -1
- package/dist/steps/functions/ccacheStats.d.ts +17 -0
- package/dist/steps/functions/ccacheStats.js +91 -0
- package/dist/steps/functions/ccacheStats.js.map +1 -0
- package/dist/steps/functions/restoreBuildCache.d.ts +4 -1
- package/dist/steps/functions/restoreBuildCache.js +23 -3
- package/dist/steps/functions/restoreBuildCache.js.map +1 -1
- package/package.json +2 -2
package/dist/builders/android.js
CHANGED
|
@@ -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';\nimport { eagerBundleAsync, shouldUseEagerBundle } from '../common/eagerBundle';\nimport { cacheStatsAsync, restoreCcacheAsync } from '../steps/functions/restoreBuildCache';\nimport { saveCcacheAsync } from '../steps/functions/saveBuildCache';\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 evictUsedBefore = new Date();\n const workingDirectory = ctx.getReactNativeProjectDirectory();\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 if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support restoring cache');\n return;\n }\n await ctx.cacheManager?.restoreCache(ctx);\n await restoreCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\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?.runtimeVersion ?? null,\n resolvedFingerprintSources: resolvedExpoUpdatesRuntimeVersion?.fingerprintSources ?? null,\n });\n });\n\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping Gradle build');\n }\n\n if (!ctx.env.EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP && shouldUseEagerBundle(ctx.metadata)) {\n await ctx.runBuildPhase(BuildPhase.EAGER_BUNDLE, async () => {\n await eagerBundleAsync({\n platform: ctx.job.platform,\n workingDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n env: {\n ...ctx.env,\n ...(resolvedExpoUpdatesRuntimeVersion?.runtimeVersion\n ? {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE:\n resolvedExpoUpdatesRuntimeVersion?.runtimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n }\n : null),\n },\n packageManager: ctx.packageManager,\n });\n });\n }\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?.runtimeVersion\n ? {\n extraEnv: {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE: resolvedExpoUpdatesRuntimeVersion.runtimeVersion,\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.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 await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support saving cache.');\n return;\n }\n await ctx.cacheManager?.saveCache(ctx);\n await saveCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n evictUsedBefore,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.CACHE_STATS, async () => {\n await cacheStatsAsync({\n logger: ctx.logger,\n env: ctx.env,\n });\n });\n}\n"]}
|
|
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';\nimport { eagerBundleAsync, shouldUseEagerBundle } from '../common/eagerBundle';\nimport { cacheStatsAsync, restoreCcacheAsync } from '../steps/functions/restoreBuildCache';\nimport { saveCcacheAsync } from '../steps/functions/saveBuildCache';\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 evictUsedBefore = new Date();\n const workingDirectory = ctx.getReactNativeProjectDirectory();\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 if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support restoring cache');\n return;\n }\n await ctx.cacheManager?.restoreCache(ctx);\n await restoreCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\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?.runtimeVersion ?? null,\n resolvedFingerprintSources: resolvedExpoUpdatesRuntimeVersion?.fingerprintSources ?? null,\n });\n });\n\n if (ctx.skipNativeBuild) {\n throw new SkipNativeBuildError('Skipping Gradle build');\n }\n\n if (!ctx.env.EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP && shouldUseEagerBundle(ctx.metadata)) {\n await ctx.runBuildPhase(BuildPhase.EAGER_BUNDLE, async () => {\n await eagerBundleAsync({\n platform: ctx.job.platform,\n workingDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n env: {\n ...ctx.env,\n ...(resolvedExpoUpdatesRuntimeVersion?.runtimeVersion\n ? {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE:\n resolvedExpoUpdatesRuntimeVersion?.runtimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n }\n : null),\n },\n packageManager: ctx.packageManager,\n });\n });\n }\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?.runtimeVersion\n ? {\n extraEnv: {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE: resolvedExpoUpdatesRuntimeVersion.runtimeVersion,\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.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 await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support saving cache.');\n return;\n }\n await ctx.cacheManager?.saveCache(ctx);\n await saveCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n evictUsedBefore,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.CACHE_STATS, async () => {\n await cacheStatsAsync({\n logger: ctx.logger,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\n });\n}\n"]}
|
package/dist/builders/ios.js
CHANGED
package/dist/builders/ios.js.map
CHANGED
|
@@ -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';\nimport { getParentAndDescendantProcessPidsAsync } from '../utils/processes';\nimport { eagerBundleAsync, shouldUseEagerBundle } from '../common/eagerBundle';\nimport { saveCcacheAsync } from '../steps/functions/saveBuildCache';\nimport { cacheStatsAsync, restoreCcacheAsync } from '../steps/functions/restoreBuildCache';\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 const evictUsedBefore = new Date();\n const credentialsManager = new CredentialsManager(ctx);\n const workingDirectory = ctx.getReactNativeProjectDirectory();\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 if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support restoring cache');\n return;\n }\n await ctx.cacheManager?.restoreCache(ctx);\n await restoreCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\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?.runtimeVersion ?? null,\n resolvedFingerprintSources: resolvedExpoUpdatesRuntimeVersion?.fingerprintSources ?? null,\n });\n });\n\n if (!ctx.env.EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP && shouldUseEagerBundle(ctx.metadata)) {\n await ctx.runBuildPhase(BuildPhase.EAGER_BUNDLE, async () => {\n await eagerBundleAsync({\n platform: ctx.job.platform,\n workingDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n env: {\n ...ctx.env,\n ...(resolvedExpoUpdatesRuntimeVersion?.runtimeVersion\n ? {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE:\n resolvedExpoUpdatesRuntimeVersion?.runtimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n }\n : null),\n },\n packageManager: ctx.packageManager,\n });\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?.runtimeVersion\n ? {\n extraEnv: {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE:\n resolvedExpoUpdatesRuntimeVersion?.runtimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n },\n }\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.UPLOAD_APPLICATION_ARCHIVE, async () => {\n await uploadApplicationArchive(ctx, {\n patternOrPath: resolveArtifactPath(ctx),\n rootDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support saving cache.');\n return;\n }\n await ctx.cacheManager?.saveCache(ctx);\n await saveCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n evictUsedBefore,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.CACHE_STATS, async () => {\n await cacheStatsAsync({\n logger: ctx.logger,\n env: ctx.env,\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 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"]}
|
|
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';\nimport { eagerBundleAsync, shouldUseEagerBundle } from '../common/eagerBundle';\nimport { saveCcacheAsync } from '../steps/functions/saveBuildCache';\nimport { cacheStatsAsync, restoreCcacheAsync } from '../steps/functions/restoreBuildCache';\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 const evictUsedBefore = new Date();\n const credentialsManager = new CredentialsManager(ctx);\n const workingDirectory = ctx.getReactNativeProjectDirectory();\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 if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support restoring cache');\n return;\n }\n await ctx.cacheManager?.restoreCache(ctx);\n await restoreCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\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?.runtimeVersion ?? null,\n resolvedFingerprintSources: resolvedExpoUpdatesRuntimeVersion?.fingerprintSources ?? null,\n });\n });\n\n if (!ctx.env.EAS_BUILD_DISABLE_BUNDLE_JAVASCRIPT_STEP && shouldUseEagerBundle(ctx.metadata)) {\n await ctx.runBuildPhase(BuildPhase.EAGER_BUNDLE, async () => {\n await eagerBundleAsync({\n platform: ctx.job.platform,\n workingDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n env: {\n ...ctx.env,\n ...(resolvedExpoUpdatesRuntimeVersion?.runtimeVersion\n ? {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE:\n resolvedExpoUpdatesRuntimeVersion?.runtimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n }\n : null),\n },\n packageManager: ctx.packageManager,\n });\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?.runtimeVersion\n ? {\n extraEnv: {\n EXPO_UPDATES_FINGERPRINT_OVERRIDE:\n resolvedExpoUpdatesRuntimeVersion?.runtimeVersion,\n EXPO_UPDATES_WORKFLOW_OVERRIDE: ctx.job.type,\n },\n }\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.UPLOAD_APPLICATION_ARCHIVE, async () => {\n await uploadApplicationArchive(ctx, {\n patternOrPath: resolveArtifactPath(ctx),\n rootDir: ctx.getReactNativeProjectDirectory(),\n logger: ctx.logger,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.SAVE_CACHE, async () => {\n if (ctx.isLocal) {\n ctx.logger.info('Local builds do not support saving cache.');\n return;\n }\n await ctx.cacheManager?.saveCache(ctx);\n await saveCcacheAsync({\n logger: ctx.logger,\n workingDirectory,\n platform: ctx.job.platform,\n evictUsedBefore,\n env: ctx.env,\n secrets: ctx.job.secrets,\n });\n });\n\n await ctx.runBuildPhase(BuildPhase.CACHE_STATS, async () => {\n await cacheStatsAsync({\n logger: ctx.logger,\n env: ctx.env,\n secrets: ctx.job.secrets,\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 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"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface CcacheStats {
|
|
2
|
+
cacheableCalls: number;
|
|
3
|
+
cacheableCallsPercent: number;
|
|
4
|
+
hitRatePercent: number;
|
|
5
|
+
directHits: number;
|
|
6
|
+
preprocessedHits: number;
|
|
7
|
+
misses: number;
|
|
8
|
+
cacheSizeGiB: number;
|
|
9
|
+
cacheMaxSizeGiB: number;
|
|
10
|
+
cacheSizePercent: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function sendCcacheStatsAsync({ env, expoApiServerURL, robotAccessToken, buildId, }: {
|
|
13
|
+
env: Record<string, string | undefined>;
|
|
14
|
+
expoApiServerURL: string;
|
|
15
|
+
robotAccessToken: string;
|
|
16
|
+
buildId: string;
|
|
17
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendCcacheStatsAsync = sendCcacheStatsAsync;
|
|
4
|
+
const steps_1 = require("@expo/steps");
|
|
5
|
+
const results_1 = require("@expo/results");
|
|
6
|
+
const turtleFetch_1 = require("../../utils/turtleFetch");
|
|
7
|
+
const REQUIRED_CCACHE_KEYS = [
|
|
8
|
+
'direct_cache_hit',
|
|
9
|
+
'preprocessed_cache_hit',
|
|
10
|
+
'cache_miss',
|
|
11
|
+
'cache_size_kibibyte',
|
|
12
|
+
'max_cache_size_kibibyte',
|
|
13
|
+
];
|
|
14
|
+
function parseCcacheStats(output) {
|
|
15
|
+
var _a, _b, _c;
|
|
16
|
+
// Parse key-value pairs from `ccache --print-stats` output
|
|
17
|
+
const values = {};
|
|
18
|
+
for (const line of output.split('\n')) {
|
|
19
|
+
const [key, value] = line.split('\t');
|
|
20
|
+
if (key && value) {
|
|
21
|
+
values[key] = parseInt(value, 10);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Validate that required keys are present
|
|
25
|
+
for (const key of REQUIRED_CCACHE_KEYS) {
|
|
26
|
+
if (!(key in values)) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const directHits = values['direct_cache_hit'];
|
|
31
|
+
const preprocessedHits = values['preprocessed_cache_hit'];
|
|
32
|
+
const misses = values['cache_miss'];
|
|
33
|
+
const cacheSizeKiB = values['cache_size_kibibyte'];
|
|
34
|
+
const maxCacheSizeKiB = values['max_cache_size_kibibyte'];
|
|
35
|
+
// Uncacheable calls
|
|
36
|
+
const calledForLink = (_a = values['called_for_link']) !== null && _a !== void 0 ? _a : 0;
|
|
37
|
+
const couldNotUseModules = (_b = values['could_not_use_modules']) !== null && _b !== void 0 ? _b : 0;
|
|
38
|
+
const calledForPreprocessing = (_c = values['called_for_preprocessing']) !== null && _c !== void 0 ? _c : 0;
|
|
39
|
+
const uncacheableCalls = calledForLink + couldNotUseModules + calledForPreprocessing;
|
|
40
|
+
// Calculate derived stats
|
|
41
|
+
const cacheableCalls = directHits + preprocessedHits + misses;
|
|
42
|
+
const totalCalls = cacheableCalls + uncacheableCalls;
|
|
43
|
+
const cacheableCallsPercent = totalCalls > 0 ? (cacheableCalls / totalCalls) * 100 : 0;
|
|
44
|
+
const hitRatePercent = cacheableCalls > 0 ? ((directHits + preprocessedHits) / cacheableCalls) * 100 : 0;
|
|
45
|
+
// Convert KiB to GiB (1 GiB = 1024 * 1024 KiB)
|
|
46
|
+
const KIB_PER_GIB = 1024 * 1024;
|
|
47
|
+
const cacheSizeGiB = cacheSizeKiB / KIB_PER_GIB;
|
|
48
|
+
const cacheMaxSizeGiB = maxCacheSizeKiB / KIB_PER_GIB;
|
|
49
|
+
const cacheSizePercent = cacheMaxSizeGiB > 0 ? (cacheSizeGiB / cacheMaxSizeGiB) * 100 : 0;
|
|
50
|
+
return {
|
|
51
|
+
cacheableCalls,
|
|
52
|
+
cacheableCallsPercent: Number(cacheableCallsPercent.toFixed(2)),
|
|
53
|
+
hitRatePercent: Number(hitRatePercent.toFixed(2)),
|
|
54
|
+
directHits,
|
|
55
|
+
preprocessedHits,
|
|
56
|
+
misses,
|
|
57
|
+
cacheSizeGiB: Number(cacheSizeGiB.toFixed(2)),
|
|
58
|
+
cacheMaxSizeGiB: Number(cacheMaxSizeGiB.toFixed(2)),
|
|
59
|
+
cacheSizePercent: Number(cacheSizePercent.toFixed(2)),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function sendCcacheStatsAsync({ env, expoApiServerURL, robotAccessToken, buildId, }) {
|
|
63
|
+
try {
|
|
64
|
+
const result = await (0, results_1.asyncResult)((0, steps_1.spawnAsync)('ccache', ['--print-stats'], {
|
|
65
|
+
env,
|
|
66
|
+
stdio: 'pipe',
|
|
67
|
+
}));
|
|
68
|
+
if (!result.ok) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const stats = parseCcacheStats(result.value.stdout);
|
|
72
|
+
if (!stats) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const payload = {
|
|
76
|
+
buildId,
|
|
77
|
+
...stats,
|
|
78
|
+
};
|
|
79
|
+
await (0, turtleFetch_1.turtleFetch)(new URL('v2/turtle-caches/stats', expoApiServerURL).toString(), 'POST', {
|
|
80
|
+
json: payload,
|
|
81
|
+
headers: {
|
|
82
|
+
Authorization: `Bearer ${robotAccessToken}`,
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
},
|
|
85
|
+
retries: 2,
|
|
86
|
+
shouldThrowOnNotOk: true,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
catch { }
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=ccacheStats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ccacheStats.js","sourceRoot":"","sources":["../../../src/steps/functions/ccacheStats.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnAsync } from '@expo/steps';\nimport { asyncResult } from '@expo/results';\n\nimport { turtleFetch } from '../../utils/turtleFetch';\n\nexport interface CcacheStats {\n cacheableCalls: number;\n cacheableCallsPercent: number;\n hitRatePercent: number;\n directHits: number;\n preprocessedHits: number;\n misses: number;\n cacheSizeGiB: number;\n cacheMaxSizeGiB: number;\n cacheSizePercent: number;\n}\n\nconst REQUIRED_CCACHE_KEYS = [\n 'direct_cache_hit',\n 'preprocessed_cache_hit',\n 'cache_miss',\n 'cache_size_kibibyte',\n 'max_cache_size_kibibyte',\n] as const;\n\nfunction parseCcacheStats(output: string): CcacheStats | null {\n // Parse key-value pairs from `ccache --print-stats` output\n const values: Record<string, number> = {};\n for (const line of output.split('\\n')) {\n const [key, value] = line.split('\\t');\n if (key && value) {\n values[key] = parseInt(value, 10);\n }\n }\n\n // Validate that required keys are present\n for (const key of REQUIRED_CCACHE_KEYS) {\n if (!(key in values)) {\n return null;\n }\n }\n\n const directHits = values['direct_cache_hit'];\n const preprocessedHits = values['preprocessed_cache_hit'];\n const misses = values['cache_miss'];\n const cacheSizeKiB = values['cache_size_kibibyte'];\n const maxCacheSizeKiB = values['max_cache_size_kibibyte'];\n\n // Uncacheable calls\n const calledForLink = values['called_for_link'] ?? 0;\n const couldNotUseModules = values['could_not_use_modules'] ?? 0;\n const calledForPreprocessing = values['called_for_preprocessing'] ?? 0;\n const uncacheableCalls = calledForLink + couldNotUseModules + calledForPreprocessing;\n\n // Calculate derived stats\n const cacheableCalls = directHits + preprocessedHits + misses;\n const totalCalls = cacheableCalls + uncacheableCalls;\n const cacheableCallsPercent = totalCalls > 0 ? (cacheableCalls / totalCalls) * 100 : 0;\n const hitRatePercent =\n cacheableCalls > 0 ? ((directHits + preprocessedHits) / cacheableCalls) * 100 : 0;\n\n // Convert KiB to GiB (1 GiB = 1024 * 1024 KiB)\n const KIB_PER_GIB = 1024 * 1024;\n const cacheSizeGiB = cacheSizeKiB / KIB_PER_GIB;\n const cacheMaxSizeGiB = maxCacheSizeKiB / KIB_PER_GIB;\n const cacheSizePercent = cacheMaxSizeGiB > 0 ? (cacheSizeGiB / cacheMaxSizeGiB) * 100 : 0;\n\n return {\n cacheableCalls,\n cacheableCallsPercent: Number(cacheableCallsPercent.toFixed(2)),\n hitRatePercent: Number(hitRatePercent.toFixed(2)),\n directHits,\n preprocessedHits,\n misses,\n cacheSizeGiB: Number(cacheSizeGiB.toFixed(2)),\n cacheMaxSizeGiB: Number(cacheMaxSizeGiB.toFixed(2)),\n cacheSizePercent: Number(cacheSizePercent.toFixed(2)),\n };\n}\n\nexport async function sendCcacheStatsAsync({\n env,\n expoApiServerURL,\n robotAccessToken,\n buildId,\n}: {\n env: Record<string, string | undefined>;\n expoApiServerURL: string;\n robotAccessToken: string;\n buildId: string;\n}): Promise<void> {\n try {\n const result = await asyncResult(\n spawnAsync('ccache', ['--print-stats'], {\n env,\n stdio: 'pipe',\n })\n );\n if (!result.ok) {\n return;\n }\n const stats = parseCcacheStats(result.value.stdout);\n\n if (!stats) {\n return;\n }\n\n const payload = {\n buildId,\n ...stats,\n };\n await turtleFetch(new URL('v2/turtle-caches/stats', expoApiServerURL).toString(), 'POST', {\n json: payload,\n headers: {\n Authorization: `Bearer ${robotAccessToken}`,\n 'Content-Type': 'application/json',\n },\n retries: 2,\n shouldThrowOnNotOk: true,\n });\n } catch {}\n}\n"]}
|
|
@@ -12,7 +12,10 @@ export declare function restoreCcacheAsync({ logger, workingDirectory, platform,
|
|
|
12
12
|
robotAccessToken?: string;
|
|
13
13
|
};
|
|
14
14
|
}): Promise<void>;
|
|
15
|
-
export declare function cacheStatsAsync({ logger, env, }: {
|
|
15
|
+
export declare function cacheStatsAsync({ logger, env, secrets, }: {
|
|
16
16
|
logger: bunyan;
|
|
17
17
|
env: Record<string, string | undefined>;
|
|
18
|
+
secrets?: {
|
|
19
|
+
robotAccessToken?: string;
|
|
20
|
+
};
|
|
18
21
|
}): Promise<void>;
|
|
@@ -14,6 +14,7 @@ const nullthrows_1 = __importDefault(require("nullthrows"));
|
|
|
14
14
|
const cacheKey_1 = require("../../utils/cacheKey");
|
|
15
15
|
const turtleFetch_1 = require("../../utils/turtleFetch");
|
|
16
16
|
const restoreCache_1 = require("./restoreCache");
|
|
17
|
+
const ccacheStats_1 = require("./ccacheStats");
|
|
17
18
|
function createRestoreBuildCacheFunction() {
|
|
18
19
|
return new steps_1.BuildFunction({
|
|
19
20
|
namespace: 'eas',
|
|
@@ -50,7 +51,16 @@ function createCacheStatsBuildFunction() {
|
|
|
50
51
|
id: 'cache_stats',
|
|
51
52
|
name: 'Cache Stats',
|
|
52
53
|
fn: async (stepCtx, { env }) => {
|
|
53
|
-
|
|
54
|
+
const platform = stepCtx.global.staticContext.job.platform;
|
|
55
|
+
if (!platform) {
|
|
56
|
+
stepCtx.logger.warn('Platform not set, skipping cache stats');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
await cacheStatsAsync({
|
|
60
|
+
logger: stepCtx.logger,
|
|
61
|
+
env,
|
|
62
|
+
secrets: stepCtx.global.staticContext.job.secrets,
|
|
63
|
+
});
|
|
54
64
|
},
|
|
55
65
|
});
|
|
56
66
|
}
|
|
@@ -128,7 +138,7 @@ async function restoreCcacheAsync({ logger, workingDirectory, platform, env, sec
|
|
|
128
138
|
}
|
|
129
139
|
}
|
|
130
140
|
}
|
|
131
|
-
async function cacheStatsAsync({ logger, env, }) {
|
|
141
|
+
async function cacheStatsAsync({ logger, env, secrets, }) {
|
|
132
142
|
const enabled = env.EAS_RESTORE_CACHE === '1' || (env.EAS_USE_CACHE === '1' && env.EAS_RESTORE_CACHE !== '0');
|
|
133
143
|
if (!enabled) {
|
|
134
144
|
return;
|
|
@@ -142,11 +152,21 @@ async function cacheStatsAsync({ logger, env, }) {
|
|
|
142
152
|
if (!checkInstall.ok) {
|
|
143
153
|
return;
|
|
144
154
|
}
|
|
145
|
-
logger.info('Cache stats:');
|
|
146
155
|
await (0, results_1.asyncResult)((0, steps_1.spawnAsync)('ccache', ['--show-stats', '-v'], {
|
|
147
156
|
env,
|
|
148
157
|
logger,
|
|
149
158
|
stdio: 'pipe',
|
|
150
159
|
}));
|
|
160
|
+
const robotAccessToken = secrets === null || secrets === void 0 ? void 0 : secrets.robotAccessToken;
|
|
161
|
+
const expoApiServerURL = env.__API_SERVER_URL;
|
|
162
|
+
const buildId = env.EAS_BUILD_ID;
|
|
163
|
+
if (robotAccessToken && expoApiServerURL && buildId) {
|
|
164
|
+
await (0, ccacheStats_1.sendCcacheStatsAsync)({
|
|
165
|
+
env,
|
|
166
|
+
expoApiServerURL,
|
|
167
|
+
robotAccessToken,
|
|
168
|
+
buildId,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
151
171
|
}
|
|
152
172
|
//# sourceMappingURL=restoreBuildCache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restoreBuildCache.js","sourceRoot":"","sources":["../../../src/steps/functions/restoreBuildCache.ts"],"names":[],"mappings":";;;;;AAoBA,0EAiCC;AAED,sEASC;AAED,gDAoGC;AAED,0CAkCC;AA1MD,uCAKqB;AACrB,uDAA+C;AAE/C,2CAA4C;AAC5C,4DAAoC;AAEpC,mDAI8B;AAC9B,yDAA2D;AAE3D,iDAAoG;AAEpG,SAAgB,+BAA+B;IAC7C,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,eAAe;QACrB,cAAc,EAAE;YACd,sBAAc,CAAC,cAAc,CAAC;gBAC5B,EAAE,EAAE,UAAU;gBACd,QAAQ,EAAE,KAAK;gBACf,oBAAoB,EAAE,mCAA2B,CAAC,MAAM;aACzD,CAAC;SACH;QACD,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;;YACrC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YAC3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAClD,MAAM,QAAQ,GACZ,MAAC,MAAM,CAAC,QAAQ,CAAC,KAA8B,mCAC/C,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,wBAAQ,CAAC,OAAO,EAAE,wBAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,uBAAuB,wBAAQ,CAAC,OAAO,SAAS,wBAAQ,CAAC,GAAG,GAAG,CACjG,CAAC;YACJ,CAAC;YAED,MAAM,kBAAkB,CAAC;gBACvB,MAAM;gBACN,gBAAgB;gBAChB,QAAQ;gBACR,GAAG;gBACH,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO;aAClD,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,6BAA6B;IAC3C,OAAO,IAAI,qBAAa,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;YAC7B,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,EACvC,MAAM,EACN,gBAAgB,EAChB,QAAQ,EACR,GAAG,EACH,OAAO,GAOR;;IACC,MAAM,OAAO,GACX,GAAG,CAAC,iBAAiB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,GAAG,CAAC,iBAAiB,KAAK,GAAG,CAAC,CAAC;IAEhG,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAA,oBAAU,EACjC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,EACzB,qDAAqD,CACtD,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAC;IACzF,MAAM,SAAS,GAAG,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAC;IAErC,iDAAiD;IACjD,MAAM,YAAY,GAAG,MAAM,IAAA,qBAAW,EACpC,IAAA,kBAAU,EAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;QACtC,GAAG;QACH,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CACH,CAAC;IACF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,0CAA0C;QAC1C,MAAM,IAAA,qBAAW,EACf,IAAA,kBAAU,EAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,EAAE;YACrC,GAAG;YACH,KAAK,EAAE,MAAM;SACd,CAAC,CACH,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,4CAAiC,EAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QAEhD,MAAM,KAAK,GAAG,IAAA,oBAAU,EAAC,GAAG,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;QACtE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,IAAA,iCAAkB,EAAC;YAC3D,MAAM;YACN,KAAK;YACL,gBAAgB;YAChB,gBAAgB;YAChB,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,GAAG,EAAE,QAAQ;YACb,WAAW,EAAE,CAAC,uCAA4B,CAAC,QAAQ,CAAC,CAAC;YACrD,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,IAAA,mCAAoB,EAAC;YACzB,WAAW;YACX,gBAAgB;YAChB,OAAO,EAAE,GAAG,CAAC,UAAU,KAAK,GAAG;YAC/B,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CACT,+BAA+B,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAC7F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IACE,GAAG,CAAC,oBAAoB,KAAK,GAAG;YAChC,GAAG,YAAY,8BAAgB;YAC/B,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,MAAM,MAAK,GAAG,EAC5B,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;gBACxE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,uCAAwB,EAAC;oBACrD,MAAM;oBACN,gBAAgB;oBAChB,gBAAgB;oBAChB,KAAK,EAAE,CAAC,SAAS,CAAC;oBAClB,QAAQ;iBACT,CAAC,CAAC;gBACH,MAAM,IAAA,mCAAoB,EAAC;oBACzB,WAAW;oBACX,gBAAgB;oBAChB,OAAO,EAAE,GAAG,CAAC,UAAU,KAAK,GAAG;oBAC/B,MAAM;iBACP,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,iCAAiC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,MAAM,EACN,GAAG,GAIJ;IACC,MAAM,OAAO,GACX,GAAG,CAAC,iBAAiB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,GAAG,CAAC,iBAAiB,KAAK,GAAG,CAAC,CAAC;IAEhG,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG,MAAM,IAAA,qBAAW,EACpC,IAAA,kBAAU,EAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;QACtC,GAAG;QACH,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CACH,CAAC;IACF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,MAAM,IAAA,qBAAW,EACf,IAAA,kBAAU,EAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE;QAC3C,GAAG;QACH,MAAM;QACN,KAAK,EAAE,MAAM;KACd,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["import {\n BuildFunction,\n BuildStepInput,\n BuildStepInputValueTypeName,\n spawnAsync,\n} from '@expo/steps';\nimport { Platform } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport { asyncResult } from '@expo/results';\nimport nullthrows from 'nullthrows';\n\nimport {\n CACHE_KEY_PREFIX_BY_PLATFORM,\n generateDefaultBuildCacheKeyAsync,\n getCcachePath,\n} from '../../utils/cacheKey';\nimport { TurtleFetchError } from '../../utils/turtleFetch';\n\nimport { downloadCacheAsync, decompressCacheAsync, downloadPublicCacheAsync } from './restoreCache';\n\nexport function createRestoreBuildCacheFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'restore_build_cache',\n name: 'Restore Cache',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'platform',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n ],\n fn: async (stepCtx, { env, inputs }) => {\n const { logger } = stepCtx;\n const workingDirectory = stepCtx.workingDirectory;\n const platform =\n (inputs.platform.value as Platform | undefined) ??\n stepCtx.global.staticContext.job.platform;\n if (!platform || ![Platform.ANDROID, Platform.IOS].includes(platform)) {\n throw new Error(\n `Unsupported platform: ${platform}. Platform must be \"${Platform.ANDROID}\" or \"${Platform.IOS}\"`\n );\n }\n\n await restoreCcacheAsync({\n logger,\n workingDirectory,\n platform,\n env,\n secrets: stepCtx.global.staticContext.job.secrets,\n });\n },\n });\n}\n\nexport function createCacheStatsBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'cache_stats',\n name: 'Cache Stats',\n fn: async (stepCtx, { env }) => {\n await cacheStatsAsync({ logger: stepCtx.logger, env });\n },\n });\n}\n\nexport async function restoreCcacheAsync({\n logger,\n workingDirectory,\n platform,\n env,\n secrets,\n}: {\n logger: bunyan;\n workingDirectory: string;\n platform: Platform;\n env: Record<string, string | undefined>;\n secrets?: { robotAccessToken?: string };\n}): Promise<void> {\n const enabled =\n env.EAS_RESTORE_CACHE === '1' || (env.EAS_USE_CACHE === '1' && env.EAS_RESTORE_CACHE !== '0');\n\n if (!enabled) {\n return;\n }\n const robotAccessToken = nullthrows(\n secrets?.robotAccessToken,\n 'Robot access token is required for cache operations'\n );\n const expoApiServerURL = nullthrows(env.__API_SERVER_URL, '__API_SERVER_URL is not set');\n const cachePath = getCcachePath(env);\n\n // Check if ccache is installed before proceeding\n const checkInstall = await asyncResult(\n spawnAsync('command', ['-v', 'ccache'], {\n env,\n stdio: 'pipe',\n shell: true,\n })\n );\n if (!checkInstall.ok) {\n return;\n }\n\n try {\n // Zero ccache stats for accurate tracking\n await asyncResult(\n spawnAsync('ccache', ['--zero-stats'], {\n env,\n stdio: 'pipe',\n })\n );\n\n const cacheKey = await generateDefaultBuildCacheKeyAsync(workingDirectory, platform);\n logger.info(`Restoring cache key: ${cacheKey}`);\n\n const jobId = nullthrows(env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');\n const { archivePath, matchedKey } = await downloadCacheAsync({\n logger,\n jobId,\n expoApiServerURL,\n robotAccessToken,\n paths: [cachePath],\n key: cacheKey,\n keyPrefixes: [CACHE_KEY_PREFIX_BY_PLATFORM[platform]],\n platform,\n });\n\n await decompressCacheAsync({\n archivePath,\n workingDirectory,\n verbose: env.EXPO_DEBUG === '1',\n logger,\n });\n\n logger.info(\n `Cache restored successfully ${matchedKey === cacheKey ? '(direct hit)' : '(prefix match)'}`\n );\n } catch (err: unknown) {\n if (\n env.EAS_USE_PUBLIC_CACHE === '1' &&\n err instanceof TurtleFetchError &&\n err.response?.status === 404\n ) {\n try {\n logger.info('No cache found for this key. Downloading public cache...');\n const { archivePath } = await downloadPublicCacheAsync({\n logger,\n expoApiServerURL,\n robotAccessToken,\n paths: [cachePath],\n platform,\n });\n await decompressCacheAsync({\n archivePath,\n workingDirectory,\n verbose: env.EXPO_DEBUG === '1',\n logger,\n });\n } catch (err: unknown) {\n logger.warn({ err }, 'Failed to download public cache');\n }\n } else {\n logger.warn({ err }, 'Failed to restore cache');\n }\n }\n}\n\nexport async function cacheStatsAsync({\n logger,\n env,\n}: {\n logger: bunyan;\n env: Record<string, string | undefined>;\n}): Promise<void> {\n const enabled =\n env.EAS_RESTORE_CACHE === '1' || (env.EAS_USE_CACHE === '1' && env.EAS_RESTORE_CACHE !== '0');\n\n if (!enabled) {\n return;\n }\n\n // Check if ccache is installed\n const checkInstall = await asyncResult(\n spawnAsync('command', ['-v', 'ccache'], {\n env,\n stdio: 'pipe',\n shell: true,\n })\n );\n if (!checkInstall.ok) {\n return;\n }\n\n logger.info('Cache stats:');\n await asyncResult(\n spawnAsync('ccache', ['--show-stats', '-v'], {\n env,\n logger,\n stdio: 'pipe',\n })\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"restoreBuildCache.js","sourceRoot":"","sources":["../../../src/steps/functions/restoreBuildCache.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BuildFunction,\n BuildStepInput,\n BuildStepInputValueTypeName,\n spawnAsync,\n} from '@expo/steps';\nimport { Platform } from '@expo/eas-build-job';\nimport { bunyan } from '@expo/logger';\nimport { asyncResult } from '@expo/results';\nimport nullthrows from 'nullthrows';\n\nimport {\n CACHE_KEY_PREFIX_BY_PLATFORM,\n generateDefaultBuildCacheKeyAsync,\n getCcachePath,\n} from '../../utils/cacheKey';\nimport { TurtleFetchError } from '../../utils/turtleFetch';\n\nimport { downloadCacheAsync, decompressCacheAsync, downloadPublicCacheAsync } from './restoreCache';\nimport { sendCcacheStatsAsync } from './ccacheStats';\n\nexport function createRestoreBuildCacheFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'restore_build_cache',\n name: 'Restore Cache',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'platform',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n ],\n fn: async (stepCtx, { env, inputs }) => {\n const { logger } = stepCtx;\n const workingDirectory = stepCtx.workingDirectory;\n const platform =\n (inputs.platform.value as Platform | undefined) ??\n stepCtx.global.staticContext.job.platform;\n if (!platform || ![Platform.ANDROID, Platform.IOS].includes(platform)) {\n throw new Error(\n `Unsupported platform: ${platform}. Platform must be \"${Platform.ANDROID}\" or \"${Platform.IOS}\"`\n );\n }\n\n await restoreCcacheAsync({\n logger,\n workingDirectory,\n platform,\n env,\n secrets: stepCtx.global.staticContext.job.secrets,\n });\n },\n });\n}\n\nexport function createCacheStatsBuildFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'cache_stats',\n name: 'Cache Stats',\n fn: async (stepCtx, { env }) => {\n const platform = stepCtx.global.staticContext.job.platform;\n if (!platform) {\n stepCtx.logger.warn('Platform not set, skipping cache stats');\n return;\n }\n await cacheStatsAsync({\n logger: stepCtx.logger,\n env,\n secrets: stepCtx.global.staticContext.job.secrets,\n });\n },\n });\n}\n\nexport async function restoreCcacheAsync({\n logger,\n workingDirectory,\n platform,\n env,\n secrets,\n}: {\n logger: bunyan;\n workingDirectory: string;\n platform: Platform;\n env: Record<string, string | undefined>;\n secrets?: { robotAccessToken?: string };\n}): Promise<void> {\n const enabled =\n env.EAS_RESTORE_CACHE === '1' || (env.EAS_USE_CACHE === '1' && env.EAS_RESTORE_CACHE !== '0');\n\n if (!enabled) {\n return;\n }\n const robotAccessToken = nullthrows(\n secrets?.robotAccessToken,\n 'Robot access token is required for cache operations'\n );\n const expoApiServerURL = nullthrows(env.__API_SERVER_URL, '__API_SERVER_URL is not set');\n const cachePath = getCcachePath(env);\n\n // Check if ccache is installed before proceeding\n const checkInstall = await asyncResult(\n spawnAsync('command', ['-v', 'ccache'], {\n env,\n stdio: 'pipe',\n shell: true,\n })\n );\n if (!checkInstall.ok) {\n return;\n }\n\n try {\n // Zero ccache stats for accurate tracking\n await asyncResult(\n spawnAsync('ccache', ['--zero-stats'], {\n env,\n stdio: 'pipe',\n })\n );\n\n const cacheKey = await generateDefaultBuildCacheKeyAsync(workingDirectory, platform);\n logger.info(`Restoring cache key: ${cacheKey}`);\n\n const jobId = nullthrows(env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');\n const { archivePath, matchedKey } = await downloadCacheAsync({\n logger,\n jobId,\n expoApiServerURL,\n robotAccessToken,\n paths: [cachePath],\n key: cacheKey,\n keyPrefixes: [CACHE_KEY_PREFIX_BY_PLATFORM[platform]],\n platform,\n });\n\n await decompressCacheAsync({\n archivePath,\n workingDirectory,\n verbose: env.EXPO_DEBUG === '1',\n logger,\n });\n\n logger.info(\n `Cache restored successfully ${matchedKey === cacheKey ? '(direct hit)' : '(prefix match)'}`\n );\n } catch (err: unknown) {\n if (\n env.EAS_USE_PUBLIC_CACHE === '1' &&\n err instanceof TurtleFetchError &&\n err.response?.status === 404\n ) {\n try {\n logger.info('No cache found for this key. Downloading public cache...');\n const { archivePath } = await downloadPublicCacheAsync({\n logger,\n expoApiServerURL,\n robotAccessToken,\n paths: [cachePath],\n platform,\n });\n await decompressCacheAsync({\n archivePath,\n workingDirectory,\n verbose: env.EXPO_DEBUG === '1',\n logger,\n });\n } catch (err: unknown) {\n logger.warn({ err }, 'Failed to download public cache');\n }\n } else {\n logger.warn({ err }, 'Failed to restore cache');\n }\n }\n}\n\nexport async function cacheStatsAsync({\n logger,\n env,\n secrets,\n}: {\n logger: bunyan;\n env: Record<string, string | undefined>;\n secrets?: { robotAccessToken?: string };\n}): Promise<void> {\n const enabled =\n env.EAS_RESTORE_CACHE === '1' || (env.EAS_USE_CACHE === '1' && env.EAS_RESTORE_CACHE !== '0');\n\n if (!enabled) {\n return;\n }\n\n // Check if ccache is installed\n const checkInstall = await asyncResult(\n spawnAsync('command', ['-v', 'ccache'], {\n env,\n stdio: 'pipe',\n shell: true,\n })\n );\n if (!checkInstall.ok) {\n return;\n }\n\n await asyncResult(\n spawnAsync('ccache', ['--show-stats', '-v'], {\n env,\n logger,\n stdio: 'pipe',\n })\n );\n\n const robotAccessToken = secrets?.robotAccessToken;\n const expoApiServerURL = env.__API_SERVER_URL;\n const buildId = env.EAS_BUILD_ID;\n\n if (robotAccessToken && expoApiServerURL && buildId) {\n await sendCcacheStatsAsync({\n env,\n expoApiServerURL,\n robotAccessToken,\n buildId,\n });\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "https://github.com/expo/eas-build.git",
|
|
6
6
|
"directory": "packages/build-tools"
|
|
7
7
|
},
|
|
8
|
-
"version": "1.0.
|
|
8
|
+
"version": "1.0.264",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"types": "dist/index.d.ts",
|
|
11
11
|
"files": [
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"node": "20.14.0",
|
|
92
92
|
"yarn": "1.22.21"
|
|
93
93
|
},
|
|
94
|
-
"gitHead": "
|
|
94
|
+
"gitHead": "138833e71c0973d8b9a8176a98dae001a258dada"
|
|
95
95
|
}
|