Fix lib caching

pull/310/head
Frostebite 2021-12-27 21:49:57 +00:00
parent bb3065f8b5
commit 6037bf9007
5 changed files with 135 additions and 138 deletions

129
dist/index.js vendored
View File

@ -459,41 +459,51 @@ const remote_client_system_1 = __webpack_require__(91269);
class Caching { class Caching {
static PushToCache(cacheFolder, destinationFolder, artifactName) { static PushToCache(cacheFolder, destinationFolder, artifactName) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
process.chdir(`${destinationFolder}/..`); try {
yield remote_client_system_1.RemoteClientSystem.Run(`zip -r "${artifactName}.zip" "${path_1.default.dirname(destinationFolder)}"`); process.chdir(`${destinationFolder}/..`);
console_1.assert(fs_1.default.existsSync(`${artifactName}.zip`)); yield remote_client_system_1.RemoteClientSystem.Run(`zip -r "${artifactName}.zip" "${path_1.default.dirname(destinationFolder)}"`);
yield remote_client_system_1.RemoteClientSystem.Run(`cp "${artifactName}.zip" "${path_1.default.join(cacheFolder, `${artifactName}.zip`)}"`); console_1.assert(fs_1.default.existsSync(`${artifactName}.zip`));
cloud_runner_logger_1.default.logCli(`copied ${artifactName} to ${cacheFolder}`); yield remote_client_system_1.RemoteClientSystem.Run(`cp "${artifactName}.zip" "${path_1.default.join(cacheFolder, `${artifactName}.zip`)}"`);
cloud_runner_logger_1.default.logCli(`copied ${artifactName} to ${cacheFolder}`);
}
catch (error) {
throw error;
}
}); });
} }
static PullFromCache(cacheFolder, destinationFolder, specificHashMatch = ``) { static PullFromCache(cacheFolder, destinationFolder, specificHashMatch = ``) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (!fs_1.default.existsSync(cacheFolder)) { try {
fs_1.default.mkdirSync(cacheFolder); if (!fs_1.default.existsSync(cacheFolder)) {
} yield remote_client_system_1.RemoteClientSystem.Run(`mkdir -p ${cacheFolder}`);
if (!fs_1.default.existsSync(destinationFolder)) {
fs_1.default.mkdirSync(destinationFolder);
}
const latest = yield (yield remote_client_system_1.RemoteClientSystem.Run(`ls -t "${cacheFolder}" | grep .zip$ | head -1`)).replace(`\n`, ``);
process.chdir(cacheFolder);
let cacheSelection;
if (specificHashMatch !== ``) {
cacheSelection = fs_1.default.existsSync(specificHashMatch) ? specificHashMatch : latest;
}
else {
cacheSelection = latest;
}
if (fs_1.default.existsSync(cacheSelection)) {
cloud_runner_logger_1.default.logCli(`Library cache exists`);
yield remote_client_system_1.RemoteClientSystem.Run(`unzip "${cacheSelection}" -d "${destinationFolder}"`);
console_1.assert(fs_1.default.existsSync(destinationFolder));
yield remote_client_system_1.RemoteClientSystem.Run(`tree ${destinationFolder}`);
}
else {
cloud_runner_logger_1.default.logCli(`Library cache doesn't exist`);
if (cacheSelection !== ``) {
throw new Error(`Failed to get library cache, but cache hit was found: ${cacheSelection}`);
} }
if (!fs_1.default.existsSync(destinationFolder)) {
yield remote_client_system_1.RemoteClientSystem.Run(`mkdir -p ${destinationFolder}`);
}
const latest = yield (yield remote_client_system_1.RemoteClientSystem.Run(`ls -t "${cacheFolder}" | grep .zip$ | head -1`)).replace(`\n`, ``);
process.chdir(cacheFolder);
let cacheSelection;
if (specificHashMatch !== ``) {
cacheSelection = fs_1.default.existsSync(specificHashMatch) ? specificHashMatch : latest;
}
else {
cacheSelection = latest;
}
if (fs_1.default.existsSync(cacheSelection)) {
cloud_runner_logger_1.default.logCli(`Library cache exists`);
yield remote_client_system_1.RemoteClientSystem.Run(`unzip "${cacheSelection}" -d "${destinationFolder}"`);
console_1.assert(fs_1.default.existsSync(destinationFolder));
yield remote_client_system_1.RemoteClientSystem.Run(`tree ${destinationFolder}`);
}
else {
cloud_runner_logger_1.default.logCli(`Library cache doesn't exist`);
if (cacheSelection !== ``) {
throw new Error(`Failed to get library cache, but cache hit was found: ${cacheSelection}`);
}
}
}
catch (error) {
throw error;
} }
}); });
} }
@ -602,9 +612,14 @@ class LFSHashing {
} }
static createLFSHashFiles() { static createLFSHashFiles() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
yield remote_client_system_1.RemoteClientSystem.Run(`git lfs ls-files -l | cut -d ' ' -f1 | sort > .lfs-assets-guid`); try {
yield remote_client_system_1.RemoteClientSystem.Run(`md5sum .lfs-assets-guid > .lfs-assets-guid-sum`); yield remote_client_system_1.RemoteClientSystem.Run(`git lfs ls-files -l | cut -d ' ' -f1 | sort > .lfs-assets-guid`);
return fs_1.default.readFileSync(`${path_1.default.join(cloud_runner_state_1.CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8'); yield remote_client_system_1.RemoteClientSystem.Run(`md5sum .lfs-assets-guid > .lfs-assets-guid-sum`);
return fs_1.default.readFileSync(`${path_1.default.join(cloud_runner_state_1.CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8');
}
catch (error) {
throw error;
}
}); });
} }
} }
@ -690,6 +705,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.SetupRemoteRepository = void 0; exports.SetupRemoteRepository = void 0;
const console_1 = __webpack_require__(57082);
const fs_1 = __importDefault(__webpack_require__(35747)); const fs_1 = __importDefault(__webpack_require__(35747));
const path_1 = __importDefault(__webpack_require__(85622)); const path_1 = __importDefault(__webpack_require__(85622));
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855)); const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
@ -704,13 +720,17 @@ class SetupRemoteRepository {
fs_1.default.mkdirSync(cloud_runner_state_1.CloudRunnerState.buildPathFull); fs_1.default.mkdirSync(cloud_runner_state_1.CloudRunnerState.buildPathFull);
fs_1.default.mkdirSync(cloud_runner_state_1.CloudRunnerState.repoPathFull); fs_1.default.mkdirSync(cloud_runner_state_1.CloudRunnerState.repoPathFull);
yield SetupRemoteRepository.cloneRepoWithoutLFSFiles(); yield SetupRemoteRepository.cloneRepoWithoutLFSFiles();
yield SetupRemoteRepository.createLFSHashFiles(); SetupRemoteRepository.LFS_ASSETS_HASH = yield lfs_hashing_1.LFSHashing.createLFSHashFiles();
cloud_runner_logger_1.default.logCli(SetupRemoteRepository.LFS_ASSETS_HASH);
yield lfs_hashing_1.LFSHashing.printLFSHashState(); yield lfs_hashing_1.LFSHashing.printLFSHashState();
const lfsCacheFolder = path_1.default.join(cloud_runner_state_1.CloudRunnerState.cacheFolderFull, `lfs`); const lfsCacheFolder = path_1.default.join(cloud_runner_state_1.CloudRunnerState.cacheFolderFull, `lfs`);
const libraryCacheFolder = path_1.default.join(cloud_runner_state_1.CloudRunnerState.cacheFolderFull, `lib`); const libraryCacheFolder = path_1.default.join(cloud_runner_state_1.CloudRunnerState.cacheFolderFull, `lib`);
yield remote_client_system_1.RemoteClientSystem.Run(`tree ${cloud_runner_state_1.CloudRunnerState.repoPathFull}`); yield remote_client_system_1.RemoteClientSystem.Run(`tree ${cloud_runner_state_1.CloudRunnerState.repoPathFull}`);
yield SetupRemoteRepository.libraryCaching(libraryCacheFolder); cloud_runner_logger_1.default.logCli(`Library Caching`);
yield SetupRemoteRepository.lfsCaching(lfsCacheFolder); console_1.assert(fs_1.default.existsSync(cloud_runner_state_1.CloudRunnerState.libraryFolderFull), `!Warning!: The Unity library was included in the git repository`);
yield caching_1.Caching.PullFromCache(libraryCacheFolder, cloud_runner_state_1.CloudRunnerState.libraryFolderFull);
cloud_runner_logger_1.default.logCli(`LFS Caching`);
yield caching_1.Caching.PullFromCache(lfsCacheFolder, cloud_runner_state_1.CloudRunnerState.lfsDirectory, `${SetupRemoteRepository.LFS_ASSETS_HASH}.zip`);
yield remote_client_system_1.RemoteClientSystem.Run(`tree ${cloud_runner_state_1.CloudRunnerState.repoPathFull}`); yield remote_client_system_1.RemoteClientSystem.Run(`tree ${cloud_runner_state_1.CloudRunnerState.repoPathFull}`);
yield caching_1.Caching.printCacheState(lfsCacheFolder, libraryCacheFolder); yield caching_1.Caching.printCacheState(lfsCacheFolder, libraryCacheFolder);
yield SetupRemoteRepository.pullLatestLFS(); yield SetupRemoteRepository.pullLatestLFS();
@ -725,36 +745,6 @@ class SetupRemoteRepository {
} }
}); });
} }
static pullLatestLFS() {
return __awaiter(this, void 0, void 0, function* () {
process.chdir(cloud_runner_state_1.CloudRunnerState.repoPathFull);
yield remote_client_system_1.RemoteClientSystem.Run(`git lfs pull`);
cloud_runner_logger_1.default.logCli(`pulled latest LFS files`);
});
}
static lfsCaching(lfsCacheFolder) {
return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.logCli(`LFS Caching`);
yield caching_1.Caching.PullFromCache(lfsCacheFolder, cloud_runner_state_1.CloudRunnerState.lfsDirectory, `${SetupRemoteRepository.LFS_ASSETS_HASH}.zip`);
});
}
static libraryCaching(libraryCacheFolder) {
return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.logCli(`Library Caching`);
//if the unity git project has included the library delete it and echo a warning
if (fs_1.default.existsSync(cloud_runner_state_1.CloudRunnerState.libraryFolderFull)) {
fs_1.default.rmdirSync(cloud_runner_state_1.CloudRunnerState.libraryFolderFull, { recursive: true });
cloud_runner_logger_1.default.logCli(`!Warning!: The Unity library was included in the git repository`);
}
yield caching_1.Caching.PullFromCache(libraryCacheFolder, cloud_runner_state_1.CloudRunnerState.libraryFolderFull);
});
}
static createLFSHashFiles() {
return __awaiter(this, void 0, void 0, function* () {
SetupRemoteRepository.LFS_ASSETS_HASH = yield lfs_hashing_1.LFSHashing.createLFSHashFiles();
cloud_runner_logger_1.default.logCli(SetupRemoteRepository.LFS_ASSETS_HASH);
});
}
static cloneRepoWithoutLFSFiles() { static cloneRepoWithoutLFSFiles() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
@ -776,6 +766,13 @@ class SetupRemoteRepository {
} }
}); });
} }
static pullLatestLFS() {
return __awaiter(this, void 0, void 0, function* () {
process.chdir(cloud_runner_state_1.CloudRunnerState.repoPathFull);
yield remote_client_system_1.RemoteClientSystem.Run(`git lfs pull`);
cloud_runner_logger_1.default.logCli(`pulled latest LFS files`);
});
}
} }
exports.SetupRemoteRepository = SetupRemoteRepository; exports.SetupRemoteRepository = SetupRemoteRepository;

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -7,44 +7,52 @@ import { RemoteClientSystem } from './remote-client-system';
export class Caching { export class Caching {
public static async PushToCache(cacheFolder: string, destinationFolder: string, artifactName: string) { public static async PushToCache(cacheFolder: string, destinationFolder: string, artifactName: string) {
process.chdir(`${destinationFolder}/..`); try {
await RemoteClientSystem.Run(`zip -r "${artifactName}.zip" "${path.dirname(destinationFolder)}"`); process.chdir(`${destinationFolder}/..`);
assert(fs.existsSync(`${artifactName}.zip`)); await RemoteClientSystem.Run(`zip -r "${artifactName}.zip" "${path.dirname(destinationFolder)}"`);
await RemoteClientSystem.Run(`cp "${artifactName}.zip" "${path.join(cacheFolder, `${artifactName}.zip`)}"`); assert(fs.existsSync(`${artifactName}.zip`));
CloudRunnerLogger.logCli(`copied ${artifactName} to ${cacheFolder}`); await RemoteClientSystem.Run(`cp "${artifactName}.zip" "${path.join(cacheFolder, `${artifactName}.zip`)}"`);
CloudRunnerLogger.logCli(`copied ${artifactName} to ${cacheFolder}`);
} catch (error) {
throw error;
}
} }
public static async PullFromCache(cacheFolder: string, destinationFolder: string, specificHashMatch: string = ``) { public static async PullFromCache(cacheFolder: string, destinationFolder: string, specificHashMatch: string = ``) {
if (!fs.existsSync(cacheFolder)) { try {
fs.mkdirSync(cacheFolder); if (!fs.existsSync(cacheFolder)) {
} await RemoteClientSystem.Run(`mkdir -p ${cacheFolder}`);
if (!fs.existsSync(destinationFolder)) {
fs.mkdirSync(destinationFolder);
}
const latest = await (await RemoteClientSystem.Run(`ls -t "${cacheFolder}" | grep .zip$ | head -1`)).replace(
`\n`,
``,
);
process.chdir(cacheFolder);
let cacheSelection;
if (specificHashMatch !== ``) {
cacheSelection = fs.existsSync(specificHashMatch) ? specificHashMatch : latest;
} else {
cacheSelection = latest;
}
if (fs.existsSync(cacheSelection)) {
CloudRunnerLogger.logCli(`Library cache exists`);
await RemoteClientSystem.Run(`unzip "${cacheSelection}" -d "${destinationFolder}"`);
assert(fs.existsSync(destinationFolder));
await RemoteClientSystem.Run(`tree ${destinationFolder}`);
} else {
CloudRunnerLogger.logCli(`Library cache doesn't exist`);
if (cacheSelection !== ``) {
throw new Error(`Failed to get library cache, but cache hit was found: ${cacheSelection}`);
} }
if (!fs.existsSync(destinationFolder)) {
await RemoteClientSystem.Run(`mkdir -p ${destinationFolder}`);
}
const latest = await (await RemoteClientSystem.Run(`ls -t "${cacheFolder}" | grep .zip$ | head -1`)).replace(
`\n`,
``,
);
process.chdir(cacheFolder);
let cacheSelection;
if (specificHashMatch !== ``) {
cacheSelection = fs.existsSync(specificHashMatch) ? specificHashMatch : latest;
} else {
cacheSelection = latest;
}
if (fs.existsSync(cacheSelection)) {
CloudRunnerLogger.logCli(`Library cache exists`);
await RemoteClientSystem.Run(`unzip "${cacheSelection}" -d "${destinationFolder}"`);
assert(fs.existsSync(destinationFolder));
await RemoteClientSystem.Run(`tree ${destinationFolder}`);
} else {
CloudRunnerLogger.logCli(`Library cache doesn't exist`);
if (cacheSelection !== ``) {
throw new Error(`Failed to get library cache, but cache hit was found: ${cacheSelection}`);
}
}
} catch (error) {
throw error;
} }
} }

View File

@ -20,8 +20,12 @@ export class LFSHashing {
} }
public static async createLFSHashFiles() { public static async createLFSHashFiles() {
await RemoteClientSystem.Run(`git lfs ls-files -l | cut -d ' ' -f1 | sort > .lfs-assets-guid`); try {
await RemoteClientSystem.Run(`md5sum .lfs-assets-guid > .lfs-assets-guid-sum`); await RemoteClientSystem.Run(`git lfs ls-files -l | cut -d ' ' -f1 | sort > .lfs-assets-guid`);
return fs.readFileSync(`${path.join(CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8'); await RemoteClientSystem.Run(`md5sum .lfs-assets-guid > .lfs-assets-guid-sum`);
return fs.readFileSync(`${path.join(CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8');
} catch (error) {
throw error;
}
} }
} }

View File

@ -1,3 +1,4 @@
import { assert } from 'console';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import CloudRunnerLogger from '../../cloud-runner/services/cloud-runner-logger'; import CloudRunnerLogger from '../../cloud-runner/services/cloud-runner-logger';
@ -14,13 +15,24 @@ export class SetupRemoteRepository {
fs.mkdirSync(CloudRunnerState.repoPathFull); fs.mkdirSync(CloudRunnerState.repoPathFull);
await SetupRemoteRepository.cloneRepoWithoutLFSFiles(); await SetupRemoteRepository.cloneRepoWithoutLFSFiles();
await SetupRemoteRepository.createLFSHashFiles(); SetupRemoteRepository.LFS_ASSETS_HASH = await LFSHashing.createLFSHashFiles();
CloudRunnerLogger.logCli(SetupRemoteRepository.LFS_ASSETS_HASH);
await LFSHashing.printLFSHashState(); await LFSHashing.printLFSHashState();
const lfsCacheFolder = path.join(CloudRunnerState.cacheFolderFull, `lfs`); const lfsCacheFolder = path.join(CloudRunnerState.cacheFolderFull, `lfs`);
const libraryCacheFolder = path.join(CloudRunnerState.cacheFolderFull, `lib`); const libraryCacheFolder = path.join(CloudRunnerState.cacheFolderFull, `lib`);
await RemoteClientSystem.Run(`tree ${CloudRunnerState.repoPathFull}`); await RemoteClientSystem.Run(`tree ${CloudRunnerState.repoPathFull}`);
await SetupRemoteRepository.libraryCaching(libraryCacheFolder); CloudRunnerLogger.logCli(`Library Caching`);
await SetupRemoteRepository.lfsCaching(lfsCacheFolder); assert(
fs.existsSync(CloudRunnerState.libraryFolderFull),
`!Warning!: The Unity library was included in the git repository`,
);
await Caching.PullFromCache(libraryCacheFolder, CloudRunnerState.libraryFolderFull);
CloudRunnerLogger.logCli(`LFS Caching`);
await Caching.PullFromCache(
lfsCacheFolder,
CloudRunnerState.lfsDirectory,
`${SetupRemoteRepository.LFS_ASSETS_HASH}.zip`,
);
await RemoteClientSystem.Run(`tree ${CloudRunnerState.repoPathFull}`); await RemoteClientSystem.Run(`tree ${CloudRunnerState.repoPathFull}`);
await Caching.printCacheState(lfsCacheFolder, libraryCacheFolder); await Caching.printCacheState(lfsCacheFolder, libraryCacheFolder);
await SetupRemoteRepository.pullLatestLFS(); await SetupRemoteRepository.pullLatestLFS();
@ -34,36 +46,6 @@ export class SetupRemoteRepository {
} }
} }
private static async pullLatestLFS() {
process.chdir(CloudRunnerState.repoPathFull);
await RemoteClientSystem.Run(`git lfs pull`);
CloudRunnerLogger.logCli(`pulled latest LFS files`);
}
private static async lfsCaching(lfsCacheFolder: string) {
CloudRunnerLogger.logCli(`LFS Caching`);
await Caching.PullFromCache(
lfsCacheFolder,
CloudRunnerState.lfsDirectory,
`${SetupRemoteRepository.LFS_ASSETS_HASH}.zip`,
);
}
private static async libraryCaching(libraryCacheFolder: string) {
CloudRunnerLogger.logCli(`Library Caching`);
//if the unity git project has included the library delete it and echo a warning
if (fs.existsSync(CloudRunnerState.libraryFolderFull)) {
fs.rmdirSync(CloudRunnerState.libraryFolderFull, { recursive: true });
CloudRunnerLogger.logCli(`!Warning!: The Unity library was included in the git repository`);
}
await Caching.PullFromCache(libraryCacheFolder, CloudRunnerState.libraryFolderFull);
}
private static async createLFSHashFiles() {
SetupRemoteRepository.LFS_ASSETS_HASH = await LFSHashing.createLFSHashFiles();
CloudRunnerLogger.logCli(SetupRemoteRepository.LFS_ASSETS_HASH);
}
private static async cloneRepoWithoutLFSFiles() { private static async cloneRepoWithoutLFSFiles() {
try { try {
CloudRunnerLogger.logCli(`Initializing source repository for cloning with caching of LFS files`); CloudRunnerLogger.logCli(`Initializing source repository for cloning with caching of LFS files`);
@ -82,4 +64,10 @@ export class SetupRemoteRepository {
throw error; throw error;
} }
} }
private static async pullLatestLFS() {
process.chdir(CloudRunnerState.repoPathFull);
await RemoteClientSystem.Run(`git lfs pull`);
CloudRunnerLogger.logCli(`pulled latest LFS files`);
}
} }