69 lines
2.8 KiB
JavaScript
69 lines
2.8 KiB
JavaScript
import chalk from 'chalk';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
async function resolveBuildCacheAsync({ projectRoot, platform, fingerprintHash, runOptions }, options = {}) {
|
|
const cacheDir = resolveCacheDir(projectRoot, options);
|
|
if (!fs.existsSync(cacheDir)) {
|
|
console.debug('Local build cache directory does not exist, skipping check');
|
|
return null;
|
|
}
|
|
const files = await fs.promises.readdir(cacheDir);
|
|
const expectedFile = `${platform}-${fingerprintHash}-${getBuildVariant(runOptions)}`;
|
|
const file = files.find((file) => file.includes(expectedFile));
|
|
if (!file) {
|
|
console.debug('No matching builds found in local cache, starting build process');
|
|
return null;
|
|
}
|
|
return path.join(cacheDir, file);
|
|
}
|
|
async function uploadBuildCacheAsync({ projectRoot, platform, fingerprintHash, buildPath, runOptions }, options = {}) {
|
|
const cacheDir = resolveCacheDir(projectRoot, options);
|
|
if (!fs.existsSync(cacheDir)) {
|
|
console.debug('Build cache directory does not exist, creating build cache folder at:', cacheDir);
|
|
await fs.promises.mkdir(cacheDir, { recursive: true });
|
|
}
|
|
try {
|
|
console.log(chalk `{whiteBright \u203A} {bold Copying build to local cache}`);
|
|
const destFile = `${platform}-${fingerprintHash}-${getBuildVariant(runOptions)}${path.extname(buildPath)}`;
|
|
const destPath = path.join(cacheDir, destFile);
|
|
// Remove existing cache entry if it exists.
|
|
if (fs.existsSync(destPath)) {
|
|
await fs.promises.rm(destPath, { recursive: true, force: true });
|
|
}
|
|
const stats = await fs.promises.stat(buildPath);
|
|
// iOS builds are usually directories, Android builds are usually files.
|
|
if (stats.isDirectory()) {
|
|
await fs.promises.cp(buildPath, destPath, { recursive: true });
|
|
}
|
|
else if (stats.isFile()) {
|
|
await fs.promises.copyFile(buildPath, destPath);
|
|
}
|
|
else {
|
|
console.debug('Unsupported build artifact type for caching:', buildPath);
|
|
return null;
|
|
}
|
|
return destPath;
|
|
}
|
|
catch (error) {
|
|
console.debug(' error:', error);
|
|
}
|
|
return null;
|
|
}
|
|
function resolveCacheDir(projectRoot, options) {
|
|
return options?.cacheDir ?? path.join(projectRoot, '.expo', 'build-cache');
|
|
}
|
|
function getBuildVariant(runOptions) {
|
|
if ('variant' in runOptions && runOptions.variant !== undefined) {
|
|
return runOptions.variant;
|
|
}
|
|
if ('configuration' in runOptions && runOptions.configuration !== undefined) {
|
|
return runOptions.configuration;
|
|
}
|
|
return 'unknown';
|
|
}
|
|
const LocalBuildCacheProvider = {
|
|
resolveBuildCache: resolveBuildCacheAsync,
|
|
uploadBuildCache: uploadBuildCacheAsync,
|
|
};
|
|
export default LocalBuildCacheProvider;
|
|
//# sourceMappingURL=index.js.map
|