import { CloudRunnerState } from '../../state/cloud-runner-state'; import { RunCli } from '../run-cli'; export class DownloadRepository { public static async run() { await RunCli.RunCli(` tree -f -L 2tree -f -L 2 echo "test" mkdir -p ${CloudRunnerState.buildPathFull} mkdir -p ${CloudRunnerState.repoPathFull} echo ' ' echo 'Initializing source repository for cloning with caching of LFS files' githubSha=$GITHUB_SHA `); await RunCli.RunCli(` cd ${CloudRunnerState.repoPathFull} # stop annoying git detatched head info git config --global advice.detachedHead false echo ' ' echo "Cloning the repository being built:" git lfs install --skip-smudge echo "${CloudRunnerState.targetBuildRepoUrl}" git clone ${CloudRunnerState.targetBuildRepoUrl} ${CloudRunnerState.repoPathFull} git checkout $githubSha echo "Checked out $githubSha" `); await RunCli.RunCli(` git lfs ls-files -l | cut -d ' ' -f1 | sort > .lfs-assets-guid md5sum .lfs-assets-guid > .lfs-assets-guid-sum `); await RunCli.RunCli(` export LFS_ASSETS_HASH="$(cat ${CloudRunnerState.repoPathFull}/.lfs-assets-guid)" `); await RunCli.RunCli(` echo ' ' echo 'Contents of .lfs-assets-guid file:' cat .lfs-assets-guid echo ' ' echo 'Contents of .lfs-assets-guid-sum file:' cat .lfs-assets-guid-sum echo ' ' echo 'Source repository initialized' ls ${CloudRunnerState.projectPathFull} echo ' ' `); const lfsCacheFolder = `${CloudRunnerState.cacheFolderFull}/lfs`; const libraryCacheFolder = `${CloudRunnerState.cacheFolderFull}/lib`; await RunCli.RunCli(` tree ${CloudRunnerState.builderPathFull} echo 'Starting checks of cache for the Unity project Library and git LFS files' mkdir -p "${lfsCacheFolder}" mkdir -p "${libraryCacheFolder}" echo 'Library Caching' `); await RunCli.RunCli(` # if the unity git project has included the library delete it and echo a warning if [ -d "${CloudRunnerState.libraryFolderFull}" ]; then rm -r "${CloudRunnerState.libraryFolderFull}" echo "!Warning!: The Unity library was included in the git repository (this isn't usually a good practice)" fi `); await RunCli.RunCli(` # Restore library cache ls -lh "${libraryCacheFolder}" latestLibraryCacheFile=$(ls -t "${libraryCacheFolder}" | grep .zip$ | head -1) echo "Checking if Library cache ${libraryCacheFolder}/$latestLibraryCacheFile exists" cd ${libraryCacheFolder} if [ -f "$latestLibraryCacheFile" ]; then echo "Library cache exists" unzip -q "${libraryCacheFolder}/$latestLibraryCacheFile" -d "$projectPathFull" tree "${CloudRunnerState.libraryFolderFull}" fi `); await RunCli.RunCli(` echo ' ' echo 'Large File Caching' echo "Checking large file cache exists (${lfsCacheFolder}/$LFS_ASSETS_HASH.zip)" cd ${lfsCacheFolder} if [ -f "$LFS_ASSETS_HASH.zip" ]; then echo "Match found: using large file hash match $LFS_ASSETS_HASH.zip" latestLFSCacheFile="$LFS_ASSETS_HASH" else latestLFSCacheFile=$(ls -t "${lfsCacheFolder}" | grep .zip$ | head -1) echo "Match not found: using latest large file cache $latestLFSCacheFile" fi if [ ! -f "$latestLFSCacheFile" ]; then echo "LFS cache exists from build $latestLFSCacheFile from $branch" rm -r "${CloudRunnerState.lfsDirectory}" unzip -q "${lfsCacheFolder}/$latestLFSCacheFile" -d "$repoPathFull/.git" echo "git LFS folder, (should not contain $latestLFSCacheFile)" ls -lh "${CloudRunnerState.lfsDirectory}/" fi `); await RunCli.RunCli(` echo ' ' echo "LFS cache for $branch" du -sch "${lfsCacheFolder}/" echo '**' echo "Library cache for $branch" du -sch "${libraryCacheFolder}/" echo '**' echo "Branch: $branch" du -sch "${CloudRunnerState.cacheFolderFull}/" echo '**' echo 'Full cache' du -sch "${CloudRunnerState.cacheFolderFull}/" echo ' ' `); await RunCli.RunCli(` cd "${CloudRunnerState.repoPathFull}" git lfs pull echo 'pulled latest LFS files' `); await RunCli.RunCli(` cd "${CloudRunnerState.lfsDirectory}/.." zip -q -r "$LFS_ASSETS_HASH.zip" "./lfs" cp "$LFS_ASSETS_HASH.zip" "${lfsCacheFolder}" echo "copied $LFS_ASSETS_HASH to ${lfsCacheFolder}" `); await RunCli.RunCli(` # purge cache if [ -z "${CloudRunnerState.purgeRemoteCaching}" ]; then echo ' ' echo "purging ${CloudRunnerState.purgeRemoteCaching}" rm -r "${CloudRunnerState.purgeRemoteCaching}" echo ' ' fi `); } }