@expo/build-tools 1.0.243 → 1.0.245
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 +34 -152
- package/dist/builders/android.js.map +1 -1
- package/dist/builders/ios.js +34 -152
- package/dist/builders/ios.js.map +1 -1
- package/dist/context.d.ts +0 -4
- package/dist/context.js +0 -14
- package/dist/context.js.map +1 -1
- package/dist/steps/functionGroups/build.js +41 -0
- package/dist/steps/functionGroups/build.js.map +1 -1
- package/dist/steps/functions/restoreBuildCache.d.ts +17 -0
- package/dist/steps/functions/restoreBuildCache.js +122 -0
- package/dist/steps/functions/restoreBuildCache.js.map +1 -0
- package/dist/steps/functions/restoreCache.d.ts +10 -0
- package/dist/steps/functions/restoreCache.js +45 -0
- package/dist/steps/functions/restoreCache.js.map +1 -1
- package/dist/steps/functions/saveBuildCache.d.ts +14 -0
- package/dist/steps/functions/saveBuildCache.js +91 -0
- package/dist/steps/functions/saveBuildCache.js.map +1 -0
- package/dist/steps/functions/saveCache.d.ts +11 -0
- package/dist/steps/functions/saveCache.js +66 -11
- package/dist/steps/functions/saveCache.js.map +1 -1
- package/dist/utils/cacheKey.d.ts +5 -0
- package/dist/utils/cacheKey.js +74 -0
- package/dist/utils/cacheKey.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveCache.js","sourceRoot":"","sources":["../../../src/steps/functions/saveCache.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport * as tar from 'tar';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { BuildFunction, BuildStepInput, BuildStepInputValueTypeName } from '@expo/steps';\nimport z from 'zod';\nimport nullthrows from 'nullthrows';\nimport fetch from 'node-fetch';\nimport { asyncResult } from '@expo/results';\nimport { Platform } from '@expo/eas-build-job';\n\nimport { retryOnDNSFailure } from '../../utils/retryOnDNSFailure';\nimport { formatBytes } from '../../utils/artifacts';\nimport { getCacheVersion } from '../utils/cache';\n\nexport function createSaveCacheFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'save_cache',\n name: 'Save Cache',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'path',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n BuildStepInput.createProvider({\n id: 'key',\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n ],\n fn: async (stepsCtx, { env, inputs }) => {\n const { logger } = stepsCtx;\n\n try {\n const paths = z\n .array(z.string())\n .parse(((inputs.path.value ?? '') as string).split(/[\\r\\n]+/))\n .filter((path) => path.length > 0);\n const key = z.string().parse(inputs.key.value);\n const jobId = nullthrows(env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');\n const robotAccessToken = nullthrows(\n stepsCtx.global.staticContext.job.secrets?.robotAccessToken,\n 'robotAccessToken is not set'\n );\n\n const { archivePath } = await compressCacheAsync({\n paths,\n workingDirectory: stepsCtx.workingDirectory,\n verbose: true,\n logger,\n });\n\n const { size } = await fs.promises.stat(archivePath);\n\n await uploadCacheAsync({\n logger,\n jobId,\n expoApiServerURL: stepsCtx.global.staticContext.expoApiServerURL,\n robotAccessToken,\n archivePath,\n key,\n paths,\n size,\n platform: stepsCtx.global.staticContext.job.platform,\n });\n } catch (error) {\n logger.error({ err: error }, 'Failed to create cache');\n }\n },\n });\n}\n\nexport async function uploadCacheAsync({\n logger,\n jobId,\n expoApiServerURL,\n robotAccessToken,\n paths,\n key,\n archivePath,\n size,\n platform,\n}: {\n logger: bunyan;\n jobId: string;\n expoApiServerURL: string;\n robotAccessToken: string;\n paths: string[];\n key: string;\n archivePath: string;\n size: number;\n platform: Platform | undefined;\n}): Promise<void> {\n const routerURL = platform\n ? 'v2/turtle-builds/caches/upload-sessions'\n : 'v2/turtle-caches/upload-sessions';\n\n // attempts to upload should only attempt on DNS errors, and not application errors such as 409 (cache exists)\n const response = await retryOnDNSFailure(fetch)(new URL(routerURL, expoApiServerURL), {\n method: 'POST',\n body: platform\n ? JSON.stringify({\n buildId: jobId,\n key,\n version: getCacheVersion(paths),\n size,\n })\n : JSON.stringify({\n jobRunId: jobId,\n key,\n version: getCacheVersion(paths),\n size,\n }),\n headers: {\n Authorization: `Bearer ${robotAccessToken}`,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n if (response.status === 409) {\n logger.info(`Cache already exists, skipping upload`);\n return;\n }\n const textResult = await asyncResult(response.text());\n throw new Error(`Unexpected response from server (${response.status}): ${textResult.value}`);\n }\n\n const result = await asyncResult(response.json());\n if (!result.ok) {\n throw new Error(`Unexpected response from server (${response.status}): ${result.reason}`);\n }\n\n const { url, headers } = result.value.data;\n\n logger.info(`Uploading cache...`);\n\n const uploadResponse = await retryOnDNSFailure(fetch)(new URL(url), {\n method: 'PUT',\n headers,\n body: fs.createReadStream(archivePath),\n });\n if (!uploadResponse.ok) {\n throw new Error(\n `Unexpected response from cache server (${uploadResponse.status}): ${uploadResponse.statusText}`\n );\n }\n logger.info(`Uploaded cache archive to ${archivePath} (${formatBytes(size)}).`);\n}\n\nexport async function compressCacheAsync({\n paths,\n workingDirectory,\n verbose,\n logger,\n}: {\n paths: string[];\n workingDirectory: string;\n verbose: boolean;\n logger: bunyan;\n}): Promise<{ archivePath: string }> {\n const archiveDestinationDirectory = await fs.promises.mkdtemp(\n path.join(os.tmpdir(), 'save-cache-')\n );\n\n // Process and normalize all paths\n const allFiles: { absolutePath: string; archivePath: string }[] = [];\n\n for (const inputPath of paths) {\n // Resolve to absolute path\n const absolutePath = path.isAbsolute(inputPath)\n ? inputPath\n : path.resolve(workingDirectory, inputPath);\n\n try {\n const stat = await fs.promises.stat(absolutePath);\n\n if (stat.isDirectory()) {\n // For directories, get all files recursively\n const pattern = fg.isDynamicPattern(inputPath) ? inputPath : `${absolutePath}/**`;\n const dirFiles = await fg(pattern, {\n absolute: true,\n onlyFiles: true,\n cwd: fg.isDynamicPattern(inputPath) ? workingDirectory : undefined,\n });\n\n for (const filePath of dirFiles) {\n // Calculate the archive path\n let archivePath: string;\n\n if (path.isAbsolute(inputPath)) {\n // For absolute input paths, check if they're within workingDirectory\n const relativeToWorkdir = path.relative(workingDirectory, filePath);\n if (!relativeToWorkdir.startsWith('..') && !path.isAbsolute(relativeToWorkdir)) {\n // File is within working directory - use relative path\n archivePath = relativeToWorkdir;\n } else {\n // File is outside working directory - preserve relative structure from original path\n const relativeToInput = path.relative(absolutePath, filePath);\n archivePath = path.posix.join('__absolute__' + inputPath, relativeToInput);\n }\n } else {\n // For relative input paths, maintain relative structure\n archivePath = path.relative(workingDirectory, filePath);\n }\n\n allFiles.push({ absolutePath: filePath, archivePath });\n }\n } else {\n // Single file\n let archivePath: string;\n\n if (path.isAbsolute(inputPath)) {\n const relativeToWorkdir = path.relative(workingDirectory, absolutePath);\n if (!relativeToWorkdir.startsWith('..') && !path.isAbsolute(relativeToWorkdir)) {\n archivePath = relativeToWorkdir;\n } else {\n archivePath = '__absolute__' + inputPath;\n }\n } else {\n archivePath = inputPath;\n }\n\n allFiles.push({ absolutePath, archivePath });\n }\n } catch (error) {\n logger.warn({ error }, 'Failed to resolve paths');\n // Handle glob patterns\n if (fg.isDynamicPattern(inputPath)) {\n const globFiles = await fg(inputPath, {\n absolute: true,\n cwd: workingDirectory,\n onlyFiles: true,\n });\n\n for (const filePath of globFiles) {\n const archivePath = path.relative(workingDirectory, filePath);\n allFiles.push({ absolutePath: filePath, archivePath });\n }\n } else {\n throw new Error(`Path does not exist: ${inputPath}`);\n }\n }\n }\n\n if (allFiles.length === 0) {\n throw new Error('No files found to cache');\n }\n\n const archivePath = path.join(archiveDestinationDirectory, 'cache.tar.gz');\n\n if (verbose) {\n logger.info(`Compressing cache with ${allFiles.length} files:`);\n }\n\n // Create a temporary directory with the correct structure\n const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'cache-temp-'));\n\n try {\n // Copy all files to temp directory maintaining archive structure\n for (const { absolutePath, archivePath: targetRelativePath } of allFiles) {\n const targetPath = path.join(tempDir, targetRelativePath);\n await fs.promises.mkdir(path.dirname(targetPath), { recursive: true });\n await fs.promises.copyFile(absolutePath, targetPath);\n\n if (verbose) {\n logger.info(`- ${targetRelativePath}`);\n }\n }\n\n // Create tar archive from the structured temp directory\n await tar.c(\n {\n gzip: true,\n file: archivePath,\n cwd: tempDir,\n },\n allFiles.map(({ archivePath: targetPath }) => targetPath)\n );\n } finally {\n await fs.promises.rm(tempDir, { recursive: true, force: true });\n }\n\n return { archivePath };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"saveCache.js","sourceRoot":"","sources":["../../../src/steps/functions/saveCache.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport * as tar from 'tar';\nimport fg from 'fast-glob';\nimport { bunyan } from '@expo/logger';\nimport { BuildFunction, BuildStepInput, BuildStepInputValueTypeName } from '@expo/steps';\nimport z from 'zod';\nimport nullthrows from 'nullthrows';\nimport fetch from 'node-fetch';\nimport { asyncResult } from '@expo/results';\nimport { Platform } from '@expo/eas-build-job';\n\nimport { retryOnDNSFailure } from '../../utils/retryOnDNSFailure';\nimport { formatBytes } from '../../utils/artifacts';\nimport { getCacheVersion } from '../utils/cache';\n\nexport function createSaveCacheFunction(): BuildFunction {\n return new BuildFunction({\n namespace: 'eas',\n id: 'save_cache',\n name: 'Save Cache',\n inputProviders: [\n BuildStepInput.createProvider({\n id: 'path',\n required: false,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n BuildStepInput.createProvider({\n id: 'key',\n required: true,\n allowedValueTypeName: BuildStepInputValueTypeName.STRING,\n }),\n ],\n fn: async (stepsCtx, { env, inputs }) => {\n const { logger } = stepsCtx;\n\n try {\n const paths = z\n .array(z.string())\n .parse(((inputs.path.value ?? '') as string).split(/[\\r\\n]+/))\n .filter((path) => path.length > 0);\n const key = z.string().parse(inputs.key.value);\n const jobId = nullthrows(env.EAS_BUILD_ID, 'EAS_BUILD_ID is not set');\n const robotAccessToken = nullthrows(\n stepsCtx.global.staticContext.job.secrets?.robotAccessToken,\n 'robotAccessToken is not set'\n );\n\n const { archivePath } = await compressCacheAsync({\n paths,\n workingDirectory: stepsCtx.workingDirectory,\n verbose: true,\n logger,\n });\n\n const { size } = await fs.promises.stat(archivePath);\n\n if (env.EAS_PUBLIC_CACHE === '1') {\n await uploadPublicCacheAsync({\n logger,\n jobId,\n expoApiServerURL: stepsCtx.global.staticContext.expoApiServerURL,\n robotAccessToken,\n archivePath,\n key,\n paths,\n size,\n platform: stepsCtx.global.staticContext.job.platform,\n });\n } else {\n await uploadCacheAsync({\n logger,\n jobId,\n expoApiServerURL: stepsCtx.global.staticContext.expoApiServerURL,\n robotAccessToken,\n archivePath,\n key,\n paths,\n size,\n platform: stepsCtx.global.staticContext.job.platform,\n });\n }\n } catch (error) {\n logger.error({ err: error }, 'Failed to create cache');\n }\n },\n });\n}\n\nexport async function uploadCacheAsync({\n logger,\n jobId,\n expoApiServerURL,\n robotAccessToken,\n paths,\n key,\n archivePath,\n size,\n platform,\n}: {\n logger: bunyan;\n jobId: string;\n expoApiServerURL: string;\n robotAccessToken: string;\n paths: string[];\n key: string;\n archivePath: string;\n size: number;\n platform: Platform | undefined;\n}): Promise<void> {\n const routerURL = platform\n ? 'v2/turtle-builds/caches/upload-sessions'\n : 'v2/turtle-caches/upload-sessions';\n\n // attempts to upload should only attempt on DNS errors, and not application errors such as 409 (cache exists)\n const response = await retryOnDNSFailure(fetch)(new URL(routerURL, expoApiServerURL), {\n method: 'POST',\n body: platform\n ? JSON.stringify({\n buildId: jobId,\n key,\n version: getCacheVersion(paths),\n size,\n })\n : JSON.stringify({\n jobRunId: jobId,\n key,\n version: getCacheVersion(paths),\n size,\n }),\n headers: {\n Authorization: `Bearer ${robotAccessToken}`,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n if (response.status === 409) {\n logger.info(`Cache already exists, skipping upload`);\n return;\n }\n const textResult = await asyncResult(response.text());\n throw new Error(`Unexpected response from server (${response.status}): ${textResult.value}`);\n }\n\n const result = await asyncResult(response.json());\n if (!result.ok) {\n throw new Error(`Unexpected response from server (${response.status}): ${result.reason}`);\n }\n\n const { url, headers } = result.value.data;\n\n logger.info(`Uploading cache...`);\n\n const uploadResponse = await retryOnDNSFailure(fetch)(new URL(url), {\n method: 'PUT',\n headers,\n body: fs.createReadStream(archivePath),\n });\n if (!uploadResponse.ok) {\n throw new Error(\n `Unexpected response from cache server (${uploadResponse.status}): ${uploadResponse.statusText}`\n );\n }\n logger.info(`Uploaded cache archive to ${archivePath} (${formatBytes(size)}).`);\n}\n\nexport async function uploadPublicCacheAsync({\n logger,\n jobId,\n expoApiServerURL,\n robotAccessToken,\n paths,\n key,\n archivePath,\n size,\n}: {\n logger: bunyan;\n jobId: string;\n expoApiServerURL: string;\n robotAccessToken: string;\n paths: string[];\n key: string;\n archivePath: string;\n size: number;\n platform: Platform | undefined;\n}): Promise<void> {\n const routerPath = 'v2/public-turtle-caches/upload-sessions';\n const response = await retryOnDNSFailure(fetch)(new URL(routerPath, expoApiServerURL), {\n method: 'POST',\n body: JSON.stringify({\n jobRunId: jobId,\n key,\n version: getCacheVersion(paths),\n size,\n }),\n headers: {\n Authorization: `Bearer ${robotAccessToken}`,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n if (response.status === 409) {\n logger.info(`Cache ${key} already exists, skipping upload`);\n return;\n }\n const textResult = await asyncResult(response.text());\n throw new Error(`Unexpected response from server (${response.status}): ${textResult.value}`);\n }\n\n const result = await asyncResult(response.json());\n if (!result.ok) {\n throw new Error(`Unexpected response from server (${response.status}): ${result.reason}`);\n }\n\n const { url, headers } = result.value.data;\n\n logger.info(`Uploading public cache...`);\n\n const uploadResponse = await retryOnDNSFailure(fetch)(new URL(url), {\n method: 'PUT',\n headers,\n body: fs.createReadStream(archivePath),\n });\n if (!uploadResponse.ok) {\n throw new Error(\n `Unexpected response from cache server (${uploadResponse.status}): ${uploadResponse.statusText}`\n );\n }\n logger.info(`Uploaded cache archive to ${archivePath} (${formatBytes(size)}).`);\n}\n\nexport async function compressCacheAsync({\n paths,\n workingDirectory,\n verbose,\n logger,\n}: {\n paths: string[];\n workingDirectory: string;\n verbose: boolean;\n logger: bunyan;\n}): Promise<{ archivePath: string }> {\n const archiveDestinationDirectory = await fs.promises.mkdtemp(\n path.join(os.tmpdir(), 'save-cache-')\n );\n\n // Process and normalize all paths\n const allFiles: { absolutePath: string; archivePath: string }[] = [];\n\n for (const inputPath of paths) {\n // Resolve to absolute path\n const absolutePath = path.isAbsolute(inputPath)\n ? inputPath\n : path.resolve(workingDirectory, inputPath);\n\n try {\n const stat = await fs.promises.stat(absolutePath);\n\n if (stat.isDirectory()) {\n // For directories, get all files recursively\n const pattern = fg.isDynamicPattern(inputPath) ? inputPath : `${absolutePath}/**`;\n const dirFiles = await fg(pattern, {\n absolute: true,\n onlyFiles: true,\n cwd: fg.isDynamicPattern(inputPath) ? workingDirectory : undefined,\n });\n\n for (const filePath of dirFiles) {\n // Calculate the archive path\n let archivePath: string;\n\n if (path.isAbsolute(inputPath)) {\n // For absolute input paths, check if they're within workingDirectory\n const relativeToWorkdir = path.relative(workingDirectory, filePath);\n if (!relativeToWorkdir.startsWith('..') && !path.isAbsolute(relativeToWorkdir)) {\n // File is within working directory - use relative path\n archivePath = relativeToWorkdir;\n } else {\n // File is outside working directory - preserve relative structure from original path\n const relativeToInput = path.relative(absolutePath, filePath);\n archivePath = path.posix.join('__absolute__' + inputPath, relativeToInput);\n }\n } else {\n // For relative input paths, maintain relative structure\n archivePath = path.relative(workingDirectory, filePath);\n }\n\n allFiles.push({ absolutePath: filePath, archivePath });\n }\n } else {\n // Single file\n let archivePath: string;\n\n if (path.isAbsolute(inputPath)) {\n const relativeToWorkdir = path.relative(workingDirectory, absolutePath);\n if (!relativeToWorkdir.startsWith('..') && !path.isAbsolute(relativeToWorkdir)) {\n archivePath = relativeToWorkdir;\n } else {\n archivePath = '__absolute__' + inputPath;\n }\n } else {\n archivePath = inputPath;\n }\n\n allFiles.push({ absolutePath, archivePath });\n }\n } catch (error) {\n logger.warn({ error }, 'Failed to resolve paths');\n // Handle glob patterns\n if (fg.isDynamicPattern(inputPath)) {\n const globFiles = await fg(inputPath, {\n absolute: true,\n cwd: workingDirectory,\n onlyFiles: true,\n });\n\n for (const filePath of globFiles) {\n const archivePath = path.relative(workingDirectory, filePath);\n allFiles.push({ absolutePath: filePath, archivePath });\n }\n } else {\n throw new Error(`Path does not exist: ${inputPath}`);\n }\n }\n }\n\n if (allFiles.length === 0) {\n throw new Error('No files found to cache');\n }\n\n const archivePath = path.join(archiveDestinationDirectory, 'cache.tar.gz');\n\n if (verbose) {\n logger.info(`Compressing cache with ${allFiles.length} files:`);\n }\n\n // Create a temporary directory with the correct structure\n const tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'cache-temp-'));\n\n try {\n // Copy all files to temp directory maintaining archive structure\n for (const { absolutePath, archivePath: targetRelativePath } of allFiles) {\n const targetPath = path.join(tempDir, targetRelativePath);\n await fs.promises.mkdir(path.dirname(targetPath), { recursive: true });\n await fs.promises.copyFile(absolutePath, targetPath);\n\n if (verbose) {\n logger.info(`- ${targetRelativePath}`);\n }\n }\n\n // Create tar archive from the structured temp directory\n await tar.c(\n {\n gzip: true,\n file: archivePath,\n cwd: tempDir,\n },\n allFiles.map(({ archivePath: targetPath }) => targetPath)\n );\n } finally {\n await fs.promises.rm(tempDir, { recursive: true, force: true });\n }\n\n return { archivePath };\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Platform } from '@expo/eas-build-job';
|
|
2
|
+
export declare const CACHE_KEY_PREFIX_BY_PLATFORM: Record<Platform, string>;
|
|
3
|
+
export declare const PUBLIC_CACHE_KEY_PREFIX_BY_PLATFORM: Record<Platform, string>;
|
|
4
|
+
export declare function getCcachePath(env: Record<string, string | undefined>): string;
|
|
5
|
+
export declare function generateDefaultBuildCacheKeyAsync(workingDirectory: string, platform: Platform): Promise<string>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.PUBLIC_CACHE_KEY_PREFIX_BY_PLATFORM = exports.CACHE_KEY_PREFIX_BY_PLATFORM = void 0;
|
|
30
|
+
exports.getCcachePath = getCcachePath;
|
|
31
|
+
exports.generateDefaultBuildCacheKeyAsync = generateDefaultBuildCacheKeyAsync;
|
|
32
|
+
const path_1 = __importDefault(require("path"));
|
|
33
|
+
const os_1 = __importDefault(require("os"));
|
|
34
|
+
const assert_1 = __importDefault(require("assert"));
|
|
35
|
+
const PackageManagerUtils = __importStar(require("@expo/package-manager"));
|
|
36
|
+
const steps_1 = require("@expo/steps");
|
|
37
|
+
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
38
|
+
const packageManager_1 = require("./packageManager");
|
|
39
|
+
const IOS_CACHE_KEY_PREFIX = 'ios-ccache-';
|
|
40
|
+
const ANDROID_CACHE_KEY_PREFIX = 'android-ccache-';
|
|
41
|
+
const PUBLIC_IOS_CACHE_KEY_PREFIX = 'public-ios-ccache-';
|
|
42
|
+
const PUBLIC_ANDROID_CACHE_KEY_PREFIX = 'public-android-ccache-';
|
|
43
|
+
const DARWIN_CACHE_PATH = 'Library/Caches/ccache';
|
|
44
|
+
const LINUX_CACHE_PATH = '.cache/ccache';
|
|
45
|
+
exports.CACHE_KEY_PREFIX_BY_PLATFORM = {
|
|
46
|
+
[eas_build_job_1.Platform.ANDROID]: ANDROID_CACHE_KEY_PREFIX,
|
|
47
|
+
[eas_build_job_1.Platform.IOS]: IOS_CACHE_KEY_PREFIX,
|
|
48
|
+
};
|
|
49
|
+
exports.PUBLIC_CACHE_KEY_PREFIX_BY_PLATFORM = {
|
|
50
|
+
[eas_build_job_1.Platform.ANDROID]: PUBLIC_ANDROID_CACHE_KEY_PREFIX,
|
|
51
|
+
[eas_build_job_1.Platform.IOS]: PUBLIC_IOS_CACHE_KEY_PREFIX,
|
|
52
|
+
};
|
|
53
|
+
const PATH_BY_PLATFORM = {
|
|
54
|
+
darwin: DARWIN_CACHE_PATH,
|
|
55
|
+
linux: LINUX_CACHE_PATH,
|
|
56
|
+
};
|
|
57
|
+
function getCcachePath(env) {
|
|
58
|
+
(0, assert_1.default)(env.HOME, 'Failed to infer directory: $HOME environment variable is empty.');
|
|
59
|
+
return path_1.default.join(env.HOME, PATH_BY_PLATFORM[os_1.default.platform()]);
|
|
60
|
+
}
|
|
61
|
+
async function generateDefaultBuildCacheKeyAsync(workingDirectory, platform) {
|
|
62
|
+
// This will resolve which package manager and use the relevant lock file
|
|
63
|
+
// The lock file hash is the key and ensures cache is fresh
|
|
64
|
+
const packagerRunDir = (0, packageManager_1.findPackagerRootDir)(workingDirectory);
|
|
65
|
+
const manager = PackageManagerUtils.createForProject(packagerRunDir);
|
|
66
|
+
const lockPath = path_1.default.join(packagerRunDir, manager.lockFile);
|
|
67
|
+
try {
|
|
68
|
+
return `${exports.CACHE_KEY_PREFIX_BY_PLATFORM[platform]}${(0, steps_1.hashFiles)([lockPath])}`;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
throw new Error(`Failed to read lockfile for cache key generation: ${err.message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=cacheKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheKey.js","sourceRoot":"","sources":["../../src/utils/cacheKey.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,sCAGC;AAED,8EAeC;AApDD,gDAAwB;AACxB,4CAAoB;AACpB,oDAA4B;AAE5B,2EAA6D;AAC7D,uCAAwC;AACxC,uDAA+C;AAE/C,qDAAuD;AAEvD,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAC3C,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AACnD,MAAM,2BAA2B,GAAG,oBAAoB,CAAC;AACzD,MAAM,+BAA+B,GAAG,wBAAwB,CAAC;AACjE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAE5B,QAAA,4BAA4B,GAA6B;IACpE,CAAC,wBAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB;IAC5C,CAAC,wBAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB;CACrC,CAAC;AAEW,QAAA,mCAAmC,GAA6B;IAC3E,CAAC,wBAAQ,CAAC,OAAO,CAAC,EAAE,+BAA+B;IACnD,CAAC,wBAAQ,CAAC,GAAG,CAAC,EAAE,2BAA2B;CAC5C,CAAC;AAEF,MAAM,gBAAgB,GAA2B;IAC/C,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,gBAAgB;CACxB,CAAC;AAEF,SAAgB,aAAa,CAAC,GAAuC;IACnE,IAAA,gBAAM,EAAC,GAAG,CAAC,IAAI,EAAE,iEAAiE,CAAC,CAAC;IACpF,OAAO,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,YAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,iCAAiC,CACrD,gBAAwB,EACxB,QAAkB;IAElB,yEAAyE;IACzE,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAA,oCAAmB,EAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,OAAO,GAAG,oCAA4B,CAAC,QAAQ,CAAC,GAAG,IAAA,iBAAS,EAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,qDAAqD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC","sourcesContent":["import path from 'path';\nimport os from 'os';\nimport assert from 'assert';\n\nimport * as PackageManagerUtils from '@expo/package-manager';\nimport { hashFiles } from '@expo/steps';\nimport { Platform } from '@expo/eas-build-job';\n\nimport { findPackagerRootDir } from './packageManager';\n\nconst IOS_CACHE_KEY_PREFIX = 'ios-ccache-';\nconst ANDROID_CACHE_KEY_PREFIX = 'android-ccache-';\nconst PUBLIC_IOS_CACHE_KEY_PREFIX = 'public-ios-ccache-';\nconst PUBLIC_ANDROID_CACHE_KEY_PREFIX = 'public-android-ccache-';\nconst DARWIN_CACHE_PATH = 'Library/Caches/ccache';\nconst LINUX_CACHE_PATH = '.cache/ccache';\n\nexport const CACHE_KEY_PREFIX_BY_PLATFORM: Record<Platform, string> = {\n [Platform.ANDROID]: ANDROID_CACHE_KEY_PREFIX,\n [Platform.IOS]: IOS_CACHE_KEY_PREFIX,\n};\n\nexport const PUBLIC_CACHE_KEY_PREFIX_BY_PLATFORM: Record<Platform, string> = {\n [Platform.ANDROID]: PUBLIC_ANDROID_CACHE_KEY_PREFIX,\n [Platform.IOS]: PUBLIC_IOS_CACHE_KEY_PREFIX,\n};\n\nconst PATH_BY_PLATFORM: Record<string, string> = {\n darwin: DARWIN_CACHE_PATH,\n linux: LINUX_CACHE_PATH,\n};\n\nexport function getCcachePath(env: Record<string, string | undefined>): string {\n assert(env.HOME, 'Failed to infer directory: $HOME environment variable is empty.');\n return path.join(env.HOME, PATH_BY_PLATFORM[os.platform()]);\n}\n\nexport async function generateDefaultBuildCacheKeyAsync(\n workingDirectory: string,\n platform: Platform\n): Promise<string> {\n // This will resolve which package manager and use the relevant lock file\n // The lock file hash is the key and ensures cache is fresh\n const packagerRunDir = findPackagerRootDir(workingDirectory);\n const manager = PackageManagerUtils.createForProject(packagerRunDir);\n const lockPath = path.join(packagerRunDir, manager.lockFile);\n\n try {\n return `${CACHE_KEY_PREFIX_BY_PLATFORM[platform]}${hashFiles([lockPath])}`;\n } catch (err: any) {\n throw new Error(`Failed to read lockfile for cache key generation: ${err.message}`);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/build-tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.245",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
"@expo/config": "10.0.6",
|
|
32
32
|
"@expo/config-plugins": "9.0.12",
|
|
33
33
|
"@expo/downloader": "1.0.221",
|
|
34
|
-
"@expo/eas-build-job": "1.0.
|
|
34
|
+
"@expo/eas-build-job": "1.0.245",
|
|
35
35
|
"@expo/env": "^0.4.0",
|
|
36
36
|
"@expo/logger": "1.0.221",
|
|
37
37
|
"@expo/package-manager": "1.7.0",
|
|
38
38
|
"@expo/plist": "^0.2.0",
|
|
39
39
|
"@expo/results": "^1.0.0",
|
|
40
|
-
"@expo/steps": "1.0.
|
|
40
|
+
"@expo/steps": "1.0.245",
|
|
41
41
|
"@expo/template-file": "1.0.221",
|
|
42
42
|
"@expo/turtle-spawn": "1.0.221",
|
|
43
43
|
"@expo/xcpretty": "^4.3.1",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"node": "20.14.0",
|
|
86
86
|
"yarn": "1.22.21"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "74f261cb8ae9cd5b6cf67c6f6ca15f4e1cd21f40"
|
|
89
89
|
}
|