77 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
|  | import { assert } from 'console'; | ||
|  | import fs from 'fs'; | ||
|  | import CloudRunnerLogger from '../../cloud-runner/services/cloud-runner-logger'; | ||
|  | import { CloudRunnerState } from '../../cloud-runner/state/cloud-runner-state'; | ||
|  | import { Caching } from './caching'; | ||
|  | import { LFSHashing } from './lfs-hashing'; | ||
|  | import { CloudRunnerAgentSystem } from './cloud-runner-agent-system'; | ||
|  | import path from 'path'; | ||
|  | 
 | ||
|  | export class SetupCloudRunnerRepository { | ||
|  |   static LFS_ASSETS_HASH; | ||
|  |   public static async run() { | ||
|  |     try { | ||
|  |       await CloudRunnerAgentSystem.Run(`mkdir -p ${CloudRunnerState.buildPathFull}`); | ||
|  |       await CloudRunnerAgentSystem.Run(`mkdir -p ${CloudRunnerState.repoPathFull}`); | ||
|  |       await SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles(); | ||
|  | 
 | ||
|  |       SetupCloudRunnerRepository.LFS_ASSETS_HASH = await LFSHashing.createLFSHashFiles(); | ||
|  |       CloudRunnerLogger.logCli(SetupCloudRunnerRepository.LFS_ASSETS_HASH); | ||
|  |       await LFSHashing.printLFSHashState(); | ||
|  |       CloudRunnerLogger.logCli(`Library Caching`); | ||
|  |       assert( | ||
|  |         !fs.existsSync(CloudRunnerState.libraryFolderFull), | ||
|  |         `!Warning!: The Unity library was included in the git repository`, | ||
|  |       ); | ||
|  |       CloudRunnerLogger.logCli(`LFS Caching`); | ||
|  |       await CloudRunnerAgentSystem.Run(`tree ${path.join(CloudRunnerState.lfsDirectory, '..')}`); | ||
|  |       await Caching.PullFromCache( | ||
|  |         CloudRunnerState.lfsCacheFolder, | ||
|  |         CloudRunnerState.lfsDirectory, | ||
|  |         `${SetupCloudRunnerRepository.LFS_ASSETS_HASH}.zip`, | ||
|  |       ); | ||
|  |       await CloudRunnerAgentSystem.Run(`tree ${path.join(CloudRunnerState.lfsDirectory, '..')}`); | ||
|  |       await Caching.printCacheState(CloudRunnerState.lfsCacheFolder, CloudRunnerState.libraryCacheFolder); | ||
|  |       await SetupCloudRunnerRepository.pullLatestLFS(); | ||
|  |       await Caching.PushToCache( | ||
|  |         CloudRunnerState.lfsCacheFolder, | ||
|  |         CloudRunnerState.lfsDirectory, | ||
|  |         SetupCloudRunnerRepository.LFS_ASSETS_HASH, | ||
|  |       ); | ||
|  |       await CloudRunnerAgentSystem.Run(`tree ${path.join(CloudRunnerState.libraryCacheFolder, '..')}`); | ||
|  |       await Caching.PullFromCache(CloudRunnerState.libraryCacheFolder, CloudRunnerState.libraryFolderFull); | ||
|  |       await CloudRunnerAgentSystem.Run(`tree ${path.join(CloudRunnerState.libraryCacheFolder, '..')}`); | ||
|  | 
 | ||
|  |       Caching.handleCachePurging(); | ||
|  |     } catch (error) { | ||
|  |       throw error; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   private static async cloneRepoWithoutLFSFiles() { | ||
|  |     try { | ||
|  |       CloudRunnerLogger.logCli(`Initializing source repository for cloning with caching of LFS files`); | ||
|  |       process.chdir(CloudRunnerState.repoPathFull); | ||
|  |       await CloudRunnerAgentSystem.Run(`git config --global advice.detachedHead false`); | ||
|  |       CloudRunnerLogger.logCli(`Cloning the repository being built:`); | ||
|  |       await CloudRunnerAgentSystem.Run(`git lfs install --skip-smudge`); | ||
|  |       await CloudRunnerAgentSystem.Run( | ||
|  |         `git clone ${CloudRunnerState.targetBuildRepoUrl} ${CloudRunnerState.repoPathFull}`, | ||
|  |       ); | ||
|  |       await CloudRunnerAgentSystem.Run(`ls -lh`); | ||
|  |       await CloudRunnerAgentSystem.Run(`tree`); | ||
|  |       CloudRunnerLogger.logCli(`${CloudRunnerState.buildParams.branch}`); | ||
|  |       await CloudRunnerAgentSystem.Run(`git checkout ${CloudRunnerState.buildParams.branch}`); | ||
|  |       CloudRunnerLogger.logCli(`Checked out ${process.env.GITHUB_SHA}`); | ||
|  |     } catch (error) { | ||
|  |       throw error; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   private static async pullLatestLFS() { | ||
|  |     process.chdir(CloudRunnerState.repoPathFull); | ||
|  |     await CloudRunnerAgentSystem.Run(`git lfs pull`); | ||
|  |     CloudRunnerLogger.logCli(`pulled latest LFS files`); | ||
|  |   } | ||
|  | } |