Refactor and cleanup - no async input, combined setup/build, removed github logs for cli runs

pull/353/head
Frostebite 2022-04-03 01:31:08 +01:00
parent 0675a2756c
commit f24b458d21
24 changed files with 530 additions and 717 deletions

588
dist/index.js vendored
View File

@ -511,7 +511,6 @@ const action_yaml_1 = __nccwpck_require__(11091);
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cli_decorator_1 = __nccwpck_require__(8731); const cli_decorator_1 = __nccwpck_require__(8731);
const remote_client_logger_1 = __nccwpck_require__(28082); const remote_client_logger_1 = __nccwpck_require__(28082);
const cloud_runner_state_1 = __nccwpck_require__(70912);
const setup_cloud_runner_repository_1 = __nccwpck_require__(39656); const setup_cloud_runner_repository_1 = __nccwpck_require__(39656);
const SDK = __importStar(__nccwpck_require__(71786)); const SDK = __importStar(__nccwpck_require__(71786));
class CLI { class CLI {
@ -571,7 +570,7 @@ class CLI {
remote_client_logger_1.RemoteClientLogger.log(`Build Params: remote_client_logger_1.RemoteClientLogger.log(`Build Params:
${JSON.stringify(buildParameter, undefined, 4)} ${JSON.stringify(buildParameter, undefined, 4)}
`); `);
cloud_runner_state_1.CloudRunnerState.setup(buildParameter); __1.CloudRunner.buildParameters = buildParameter;
yield setup_cloud_runner_repository_1.SetupCloudRunnerRepository.run(); yield setup_cloud_runner_repository_1.SetupCloudRunnerRepository.run();
}); });
} }
@ -632,8 +631,9 @@ exports.Caching = void 0;
const console_1 = __nccwpck_require__(96206); const console_1 = __nccwpck_require__(96206);
const fs_1 = __importDefault(__nccwpck_require__(57147)); const fs_1 = __importDefault(__nccwpck_require__(57147));
const path_1 = __importDefault(__nccwpck_require__(71017)); const path_1 = __importDefault(__nccwpck_require__(71017));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_folders_1 = __nccwpck_require__(13527);
const cloud_runner_system_1 = __nccwpck_require__(66879); const cloud_runner_system_1 = __nccwpck_require__(66879);
const lfs_hashing_1 = __nccwpck_require__(31938); const lfs_hashing_1 = __nccwpck_require__(31938);
const remote_client_logger_1 = __nccwpck_require__(28082); const remote_client_logger_1 = __nccwpck_require__(28082);
@ -647,10 +647,10 @@ class Caching {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cacheFolder}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cacheFolder}`);
} }
process.chdir(path_1.default.resolve(sourceFolder, '..')); process.chdir(path_1.default.resolve(sourceFolder, '..'));
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
cloud_runner_logger_1.default.log(`Hashed cache folder ${yield lfs_hashing_1.LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path_1.default.basename(sourceFolder)}`); cloud_runner_logger_1.default.log(`Hashed cache folder ${yield lfs_hashing_1.LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path_1.default.basename(sourceFolder)}`);
} }
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${path_1.default.basename(sourceFolder)}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${path_1.default.basename(sourceFolder)}`);
} }
// eslint-disable-next-line func-style // eslint-disable-next-line func-style
@ -663,13 +663,13 @@ class Caching {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path_1.default.basename(sourceFolder)}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path_1.default.basename(sourceFolder)}`);
console_1.assert(fs_1.default.existsSync(`${cacheKey}.zip`), 'cache zip exists'); console_1.assert(fs_1.default.existsSync(`${cacheKey}.zip`), 'cache zip exists');
console_1.assert(fs_1.default.existsSync(path_1.default.basename(sourceFolder)), 'source folder exists'); console_1.assert(fs_1.default.existsSync(path_1.default.basename(sourceFolder)), 'source folder exists');
if (cloud_runner_state_1.CloudRunnerState.buildParams.cachePushOverrideCommand) { if (cloud_runner_1.default.buildParameters.cachePushOverrideCommand) {
cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_state_1.CloudRunnerState.buildParams.cachePushOverrideCommand)); cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_1.default.buildParameters.cachePushOverrideCommand));
} }
cloud_runner_system_1.CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`); cloud_runner_system_1.CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`);
remote_client_logger_1.RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`); remote_client_logger_1.RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`);
console_1.assert(fs_1.default.existsSync(`${path_1.default.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder'); console_1.assert(fs_1.default.existsSync(`${path_1.default.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder');
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${cacheFolder}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${cacheFolder}`);
} }
} }
@ -705,11 +705,11 @@ class Caching {
return typeof arguments_[number] != 'undefined' ? arguments_[number] : match; return typeof arguments_[number] != 'undefined' ? arguments_[number] : match;
}); });
}; };
if (cloud_runner_state_1.CloudRunnerState.buildParams.cachePullOverrideCommand) { if (cloud_runner_1.default.buildParameters.cachePullOverrideCommand) {
cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_state_1.CloudRunnerState.buildParams.cachePullOverrideCommand)); cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_1.default.buildParameters.cachePullOverrideCommand));
} }
if (fs_1.default.existsSync(`${cacheSelection}.zip`)) { if (fs_1.default.existsSync(`${cacheSelection}.zip`)) {
const resultsFolder = `results${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}`; const resultsFolder = `results${cloud_runner_1.default.buildParameters.buildGuid}`;
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`);
remote_client_logger_1.RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`); remote_client_logger_1.RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`);
console_1.assert(`${fs_1.default.existsSync(destinationFolder)}`); console_1.assert(`${fs_1.default.existsSync(destinationFolder)}`);
@ -741,8 +741,8 @@ class Caching {
} }
static handleCachePurging() { static handleCachePurging() {
if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) { if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) {
remote_client_logger_1.RemoteClientLogger.log(`purging ${cloud_runner_state_1.CloudRunnerState.purgeRemoteCaching}`); remote_client_logger_1.RemoteClientLogger.log(`purging ${cloud_runner_folders_1.CloudRunnerFolders.purgeRemoteCaching}`);
fs_1.default.rmdirSync(cloud_runner_state_1.CloudRunnerState.cacheFolder, { recursive: true }); fs_1.default.rmdirSync(cloud_runner_folders_1.CloudRunnerFolders.cacheFolder, { recursive: true });
} }
} }
} }
@ -838,7 +838,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.LFSHashing = void 0; exports.LFSHashing = void 0;
const path_1 = __importDefault(__nccwpck_require__(71017)); const path_1 = __importDefault(__nccwpck_require__(71017));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_folders_1 = __nccwpck_require__(13527);
const cloud_runner_system_1 = __nccwpck_require__(66879); const cloud_runner_system_1 = __nccwpck_require__(66879);
const fs_1 = __importDefault(__nccwpck_require__(57147)); const fs_1 = __importDefault(__nccwpck_require__(57147));
const console_1 = __nccwpck_require__(96206); const console_1 = __nccwpck_require__(96206);
@ -852,10 +852,10 @@ class LFSHashing {
console_1.assert(fs_1.default.existsSync(`.lfs-assets-guid`)); console_1.assert(fs_1.default.existsSync(`.lfs-assets-guid`));
const lfsHashes = { const lfsHashes = {
lfsGuid: fs_1.default lfsGuid: fs_1.default
.readFileSync(`${path_1.default.join(cloud_runner_state_1.CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8') .readFileSync(`${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull, `.lfs-assets-guid`)}`, 'utf8')
.replace(/\n/g, ``), .replace(/\n/g, ``),
lfsGuidSum: fs_1.default lfsGuidSum: fs_1.default
.readFileSync(`${path_1.default.join(cloud_runner_state_1.CloudRunnerState.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8') .readFileSync(`${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8')
.replace(' .lfs-assets-guid', '') .replace(' .lfs-assets-guid', '')
.replace(/\n/g, ``), .replace(/\n/g, ``),
}; };
@ -933,7 +933,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.SetupCloudRunnerRepository = void 0; exports.SetupCloudRunnerRepository = void 0;
const fs_1 = __importDefault(__nccwpck_require__(57147)); const fs_1 = __importDefault(__nccwpck_require__(57147));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const cloud_runner_folders_1 = __nccwpck_require__(13527);
const caching_1 = __nccwpck_require__(38759); const caching_1 = __nccwpck_require__(38759);
const lfs_hashing_1 = __nccwpck_require__(31938); const lfs_hashing_1 = __nccwpck_require__(31938);
const cloud_runner_system_1 = __nccwpck_require__(66879); const cloud_runner_system_1 = __nccwpck_require__(66879);
@ -944,19 +945,19 @@ class SetupCloudRunnerRepository {
static run() { static run() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_state_1.CloudRunnerState.buildPathFull}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.buildPathFull}`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_state_1.CloudRunnerState.repoPathFull}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull}`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_state_1.CloudRunnerState.cacheFolderFull}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull}`);
process.chdir(cloud_runner_state_1.CloudRunnerState.repoPathFull); process.chdir(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull);
yield SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles(); yield SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles();
const lfsHashes = yield lfs_hashing_1.LFSHashing.createLFSHashFiles(); const lfsHashes = yield lfs_hashing_1.LFSHashing.createLFSHashFiles();
if (fs_1.default.existsSync(cloud_runner_state_1.CloudRunnerState.libraryFolderFull)) { if (fs_1.default.existsSync(cloud_runner_folders_1.CloudRunnerFolders.libraryFolderFull)) {
remote_client_logger_1.RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`); remote_client_logger_1.RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`);
} }
yield caching_1.Caching.PullFromCache(cloud_runner_state_1.CloudRunnerState.lfsCacheFolderFull, cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`); yield caching_1.Caching.PullFromCache(cloud_runner_folders_1.CloudRunnerFolders.lfsCacheFolderFull, cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`);
yield SetupCloudRunnerRepository.pullLatestLFS(); yield SetupCloudRunnerRepository.pullLatestLFS();
yield caching_1.Caching.PushToCache(cloud_runner_state_1.CloudRunnerState.lfsCacheFolderFull, cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`); yield caching_1.Caching.PushToCache(cloud_runner_folders_1.CloudRunnerFolders.lfsCacheFolderFull, cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`);
yield caching_1.Caching.PullFromCache(cloud_runner_state_1.CloudRunnerState.libraryCacheFolderFull, cloud_runner_state_1.CloudRunnerState.libraryFolderFull); yield caching_1.Caching.PullFromCache(cloud_runner_folders_1.CloudRunnerFolders.libraryCacheFolderFull, cloud_runner_folders_1.CloudRunnerFolders.libraryFolderFull);
caching_1.Caching.handleCachePurging(); caching_1.Caching.handleCachePurging();
} }
catch (error) { catch (error) {
@ -967,17 +968,17 @@ class SetupCloudRunnerRepository {
static cloneRepoWithoutLFSFiles() { static cloneRepoWithoutLFSFiles() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
process.chdir(`${cloud_runner_state_1.CloudRunnerState.repoPathFull}`); process.chdir(`${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull}`);
remote_client_logger_1.RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`); remote_client_logger_1.RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global advice.detachedHead false`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);
remote_client_logger_1.RemoteClientLogger.log(`Cloning the repository being built:`); remote_client_logger_1.RemoteClientLogger.log(`Cloning the repository being built:`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge --skip -- %f"`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge --skip -- %f"`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs install`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs install`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git clone ${cloud_runner_state_1.CloudRunnerState.targetBuildRepoUrl} ${path_1.default.resolve(`..`, path_1.default.basename(cloud_runner_state_1.CloudRunnerState.repoPathFull))}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git clone ${cloud_runner_folders_1.CloudRunnerFolders.targetBuildRepoUrl} ${path_1.default.resolve(`..`, path_1.default.basename(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull))}`);
console_1.assert(fs_1.default.existsSync(`.git`)); console_1.assert(fs_1.default.existsSync(`.git`));
remote_client_logger_1.RemoteClientLogger.log(`${cloud_runner_state_1.CloudRunnerState.buildParams.branch}`); remote_client_logger_1.RemoteClientLogger.log(`${cloud_runner_1.default.buildParameters.branch}`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git checkout ${cloud_runner_state_1.CloudRunnerState.buildParams.branch}`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git checkout ${cloud_runner_1.default.buildParameters.branch}`);
console_1.assert(fs_1.default.existsSync(path_1.default.join(`.git`, `lfs`)), 'LFS folder should not exist before caching'); console_1.assert(fs_1.default.existsSync(path_1.default.join(`.git`, `lfs`)), 'LFS folder should not exist before caching');
remote_client_logger_1.RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`); remote_client_logger_1.RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`);
} }
@ -988,17 +989,17 @@ class SetupCloudRunnerRepository {
} }
static pullLatestLFS() { static pullLatestLFS() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull}/..`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull}/..`);
} }
process.chdir(cloud_runner_state_1.CloudRunnerState.repoPathFull); process.chdir(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`);
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs pull`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs pull`);
remote_client_logger_1.RemoteClientLogger.log(`pulled latest LFS files`); remote_client_logger_1.RemoteClientLogger.log(`pulled latest LFS files`);
console_1.assert(fs_1.default.existsSync(cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull)); console_1.assert(fs_1.default.existsSync(cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull));
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull}/..`); yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull}/..`);
} }
}); });
} }
@ -1193,13 +1194,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.AWSError = void 0; exports.AWSError = void 0;
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class AWSError { class AWSError {
static handleStackCreationFailure(error, CF, taskDefStackName) { static handleStackCreationFailure(error, CF, taskDefStackName) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.log('aws error: '); cloud_runner_logger_1.default.log('aws error: ');
core.error(JSON.stringify(error, undefined, 4)); core.error(JSON.stringify(error, undefined, 4));
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
cloud_runner_logger_1.default.log('Getting events and resources for task stack'); cloud_runner_logger_1.default.log('Getting events and resources for task stack');
const events = (yield CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents; const events = (yield CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents;
cloud_runner_logger_1.default.log(JSON.stringify(events, undefined, 4)); cloud_runner_logger_1.default.log(JSON.stringify(events, undefined, 4));
@ -1378,7 +1379,7 @@ const core = __importStar(__nccwpck_require__(42186));
const zlib = __importStar(__nccwpck_require__(59796)); const zlib = __importStar(__nccwpck_require__(59796));
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const __1 = __nccwpck_require__(41359); const __1 = __nccwpck_require__(41359);
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const cloud_runner_statics_1 = __nccwpck_require__(90828); const cloud_runner_statics_1 = __nccwpck_require__(90828);
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899); const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
class AWSTaskRunner { class AWSTaskRunner {
@ -1400,7 +1401,7 @@ class AWSTaskRunner {
{ {
name: taskDef.taskDefStackName, name: taskDef.taskDefStackName,
environment, environment,
command: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(commands, cloud_runner_state_1.CloudRunnerState.buildParams)], command: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(commands, cloud_runner_1.default.buildParameters)],
}, },
], ],
}, },
@ -1519,7 +1520,7 @@ class AWSTaskRunner {
if (json.messageType === 'DATA_MESSAGE') { if (json.messageType === 'DATA_MESSAGE') {
for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) { for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) {
let message = json.logEvents[logEventsIndex].message; let message = json.logEvents[logEventsIndex].message;
if (json.logEvents[logEventsIndex].message.includes(`---${cloud_runner_state_1.CloudRunnerState.buildParams.logId}`)) { if (json.logEvents[logEventsIndex].message.includes(`---${cloud_runner_1.default.buildParameters.logId}`)) {
cloud_runner_logger_1.default.log('End of log transmission received'); cloud_runner_logger_1.default.log('End of log transmission received');
shouldReadLogs = false; shouldReadLogs = false;
} }
@ -1527,7 +1528,7 @@ class AWSTaskRunner {
core.warning('LIBRARY NOT FOUND!'); core.warning('LIBRARY NOT FOUND!');
} }
message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`; message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`;
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
output += message; output += message;
} }
cloud_runner_logger_1.default.log(message); cloud_runner_logger_1.default.log(message);
@ -1756,6 +1757,25 @@ exports.CloudRunnerStatics = CloudRunnerStatics;
CloudRunnerStatics.logPrefix = `Cloud-Runner-System`; CloudRunnerStatics.logPrefix = `Cloud-Runner-System`;
/***/ }),
/***/ 50121:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerStepState = void 0;
class CloudRunnerStepState {
constructor(image, environmentVariables, secrets) {
this.image = image;
this.environment = environmentVariables;
this.secrets = secrets;
}
}
exports.CloudRunnerStepState = CloudRunnerStepState;
/***/ }), /***/ }),
/***/ 79144: /***/ 79144:
@ -1796,10 +1816,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
const aws_1 = __importDefault(__nccwpck_require__(37569)); const aws_1 = __importDefault(__nccwpck_require__(37569));
const cloud_runner_state_1 = __nccwpck_require__(70912);
const k8s_1 = __importDefault(__nccwpck_require__(25107)); const k8s_1 = __importDefault(__nccwpck_require__(25107));
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_step_state_1 = __nccwpck_require__(64854); const cloud_runner_step_state_1 = __nccwpck_require__(50121);
const workflow_composition_root_1 = __nccwpck_require__(54204); const workflow_composition_root_1 = __nccwpck_require__(54204);
const cloud_runner_error_1 = __nccwpck_require__(91477); const cloud_runner_error_1 = __nccwpck_require__(91477);
const task_parameter_serializer_1 = __nccwpck_require__(35346); const task_parameter_serializer_1 = __nccwpck_require__(35346);
@ -1807,7 +1826,7 @@ const core = __importStar(__nccwpck_require__(42186));
class CloudRunner { class CloudRunner {
static setup(buildParameters) { static setup(buildParameters) {
cloud_runner_logger_1.default.setup(); cloud_runner_logger_1.default.setup();
cloud_runner_state_1.CloudRunnerState.setup(buildParameters); CloudRunner.buildParameters = buildParameters;
CloudRunner.setupBuildPlatform(); CloudRunner.setupBuildPlatform();
const parameters = task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(); const parameters = task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables();
if (!buildParameters.cliMode) { if (!buildParameters.cliMode) {
@ -1817,15 +1836,15 @@ class CloudRunner {
} }
} }
static setupBuildPlatform() { static setupBuildPlatform() {
switch (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCluster) { switch (CloudRunner.buildParameters.cloudRunnerCluster) {
case 'k8s': case 'k8s':
cloud_runner_logger_1.default.log('Cloud Runner platform selected Kubernetes'); cloud_runner_logger_1.default.log('Cloud Runner platform selected Kubernetes');
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new k8s_1.default(cloud_runner_state_1.CloudRunnerState.buildParams); CloudRunner.CloudRunnerProviderPlatform = new k8s_1.default(CloudRunner.buildParameters);
break; break;
default: default:
case 'aws': case 'aws':
cloud_runner_logger_1.default.log('Cloud Runner platform selected AWS'); cloud_runner_logger_1.default.log('Cloud Runner platform selected AWS');
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new aws_1.default(cloud_runner_state_1.CloudRunnerState.buildParams); CloudRunner.CloudRunnerProviderPlatform = new aws_1.default(CloudRunner.buildParameters);
break; break;
} }
} }
@ -1833,22 +1852,22 @@ class CloudRunner {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
CloudRunner.setup(buildParameters); CloudRunner.setup(buildParameters);
try { try {
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!CloudRunner.buildParameters.cliMode)
core.startGroup('Setup remote runner'); core.startGroup('Setup remote runner');
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.setupSharedResources(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets); yield CloudRunner.CloudRunnerProviderPlatform.setupSharedResources(CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters, CloudRunner.buildParameters.branch, CloudRunner.defaultSecrets);
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!CloudRunner.buildParameters.cliMode)
core.endGroup(); core.endGroup();
const output = yield new workflow_composition_root_1.WorkflowCompositionRoot().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets)); const output = yield new workflow_composition_root_1.WorkflowCompositionRoot().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), CloudRunner.defaultSecrets));
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!CloudRunner.buildParameters.cliMode)
core.startGroup('Cleanup'); core.startGroup('Cleanup');
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets); yield CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters, CloudRunner.buildParameters.branch, CloudRunner.defaultSecrets);
cloud_runner_logger_1.default.log(`Cleanup complete`); cloud_runner_logger_1.default.log(`Cleanup complete`);
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!CloudRunner.buildParameters.cliMode)
core.endGroup(); core.endGroup();
return output; return output;
} }
catch (error) { catch (error) {
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!CloudRunner.buildParameters.cliMode)
core.endGroup(); core.endGroup();
yield cloud_runner_error_1.CloudRunnerError.handleException(error); yield cloud_runner_error_1.CloudRunnerError.handleException(error);
throw error; throw error;
@ -1900,14 +1919,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerError = void 0; exports.CloudRunnerError = void 0;
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_state_1 = __nccwpck_require__(70912);
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class CloudRunnerError { class CloudRunnerError {
static handleException(error) { static handleException(error) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.error(JSON.stringify(error, undefined, 4)); cloud_runner_logger_1.default.error(JSON.stringify(error, undefined, 4));
core.setFailed('Cloud Runner failed'); core.setFailed('Cloud Runner failed');
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets); yield cloud_runner_1.default.CloudRunnerProviderPlatform.cleanupSharedResources(cloud_runner_1.default.buildParameters.buildGuid, cloud_runner_1.default.buildParameters, cloud_runner_1.default.buildParameters.branch, cloud_runner_1.default.defaultSecrets);
}); });
} }
} }
@ -2116,14 +2135,17 @@ exports["default"] = Kubernetes;
/***/ }), /***/ }),
/***/ 1739: /***/ 1739:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict"; "use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
const client_node_1 = __nccwpck_require__(89679); const client_node_1 = __nccwpck_require__(89679);
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899); const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class KubernetesJobSpecFactory { class KubernetesJobSpecFactory {
static getJobSpec(command, image, mountdir, workingDirectory, environment, secrets, buildGuid, buildParameters, secretName, pvcName, jobName, k8s) { static getJobSpec(command, image, mountdir, workingDirectory, environment, secrets, buildGuid, buildParameters, secretName, pvcName, jobName, k8s) {
environment.push(...[ environment.push(...[
@ -2207,7 +2229,7 @@ class KubernetesJobSpecFactory {
name: 'main', name: 'main',
image, image,
command: ['/bin/sh'], command: ['/bin/sh'],
args: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(command, cloud_runner_state_1.CloudRunnerState.buildParams)], args: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(command, cloud_runner_1.default.buildParameters)],
workingDir: `${workingDirectory}`, workingDir: `${workingDirectory}`,
resources: { resources: {
requests: { requests: {
@ -2658,7 +2680,7 @@ const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const cloud_runner_statics_1 = __nccwpck_require__(90828); const cloud_runner_statics_1 = __nccwpck_require__(90828);
const async_wait_until_1 = __importDefault(__nccwpck_require__(41299)); const async_wait_until_1 = __importDefault(__nccwpck_require__(41299));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class KubernetesTaskRunner { class KubernetesTaskRunner {
static runTask(kubeConfig, kubeClient, jobName, podName, containerName, namespace, logCallback) { static runTask(kubeConfig, kubeClient, jobName, podName, containerName, namespace, logCallback) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
@ -2670,7 +2692,7 @@ class KubernetesTaskRunner {
didStreamAnyLogs = true; didStreamAnyLogs = true;
let message = chunk.toString().trimRight(`\n`); let message = chunk.toString().trimRight(`\n`);
message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`; message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`;
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
output += message; output += message;
} }
logCallback(message); logCallback(message);
@ -2752,13 +2774,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Hook = exports.CloudRunnerBuildCommandProcessor = void 0; exports.Hook = exports.CloudRunnerBuildCommandProcessor = void 0;
const yaml_1 = __importDefault(__nccwpck_require__(44603)); const yaml_1 = __importDefault(__nccwpck_require__(44603));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class CloudRunnerBuildCommandProcessor { class CloudRunnerBuildCommandProcessor {
static ProcessCommands(commands, buildParameters) { static ProcessCommands(commands, buildParameters) {
const hooks = CloudRunnerBuildCommandProcessor.getHooks(buildParameters.customJobHooks).filter((x) => x.step.includes(`all`)); const hooks = CloudRunnerBuildCommandProcessor.getHooks(buildParameters.customJobHooks).filter((x) => x.step.includes(`all`));
return `echo "---" return `echo "---"
echo "start cloud runner init" echo "start cloud runner init"
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} printenv ${cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} printenv
echo "start of cloud runner job" echo "start of cloud runner job"
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '} ${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
${commands} ${commands}
@ -2804,6 +2826,72 @@ CloudRunnerConstants.alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
exports["default"] = CloudRunnerConstants; exports["default"] = CloudRunnerConstants;
/***/ }),
/***/ 13527:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerFolders = void 0;
const path_1 = __importDefault(__nccwpck_require__(71017));
const __1 = __nccwpck_require__(41359);
class CloudRunnerFolders {
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
static get buildPathFull() {
return path_1.default.join(`/`, CloudRunnerFolders.buildVolumeFolder, __1.CloudRunner.buildParameters.buildGuid);
}
static get cacheFolderFull() {
return path_1.default.join('/', CloudRunnerFolders.buildVolumeFolder, CloudRunnerFolders.cacheFolder, CloudRunnerFolders.cacheKey);
}
static get cacheKey() {
return __1.CloudRunner.buildParameters.cacheKey || __1.CloudRunner.buildParameters.branch;
}
static get builderPathFull() {
return path_1.default.join(CloudRunnerFolders.buildPathFull, `builder`);
}
static get repoPathFull() {
return path_1.default.join(CloudRunnerFolders.buildPathFull, CloudRunnerFolders.repositoryFolder);
}
static get projectPathFull() {
return path_1.default.join(CloudRunnerFolders.repoPathFull, __1.CloudRunner.buildParameters.projectPath);
}
static get libraryFolderFull() {
return path_1.default.join(CloudRunnerFolders.projectPathFull, `Library`);
}
static get lfsDirectoryFull() {
return path_1.default.join(CloudRunnerFolders.repoPathFull, `.git`, `lfs`);
}
static get purgeRemoteCaching() {
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
}
static get lfsCacheFolderFull() {
return path_1.default.join(CloudRunnerFolders.cacheFolderFull, `lfs`);
}
static get libraryCacheFolderFull() {
return path_1.default.join(CloudRunnerFolders.cacheFolderFull, `Library`);
}
static get unityBuilderRepoUrl() {
return `https://${__1.CloudRunner.buildParameters.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
}
static get targetBuildRepoUrl() {
return `https://${__1.CloudRunner.buildParameters.gitPrivateToken}@github.com/${__1.CloudRunner.buildParameters.githubRepo}.git`;
}
static get buildVolumeFolder() {
return 'data';
}
static get cacheFolder() {
return 'cache';
}
}
exports.CloudRunnerFolders = CloudRunnerFolders;
CloudRunnerFolders.repositoryFolder = 'repo';
/***/ }), /***/ }),
/***/ 22855: /***/ 22855:
@ -2947,7 +3035,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.TaskParameterSerializer = void 0; exports.TaskParameterSerializer = void 0;
const __1 = __nccwpck_require__(41359); const __1 = __nccwpck_require__(41359);
const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145)); const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145));
const cloud_runner_state_1 = __nccwpck_require__(70912);
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899); const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
class TaskParameterSerializer { class TaskParameterSerializer {
static readBuildEnvironmentVariables() { static readBuildEnvironmentVariables() {
@ -2955,15 +3042,15 @@ class TaskParameterSerializer {
return [ return [
{ {
name: 'ContainerMemory', name: 'ContainerMemory',
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerMemory, value: __1.CloudRunner.buildParameters.cloudRunnerMemory,
}, },
{ {
name: 'ContainerCpu', name: 'ContainerCpu',
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCpu, value: __1.CloudRunner.buildParameters.cloudRunnerCpu,
}, },
{ {
name: 'BUILD_TARGET', name: 'BUILD_TARGET',
value: cloud_runner_state_1.CloudRunnerState.buildParams.platform, value: __1.CloudRunner.buildParameters.platform,
}, },
...TaskParameterSerializer.serializeBuildParamsAndInput, ...TaskParameterSerializer.serializeBuildParamsAndInput,
]; ];
@ -2972,7 +3059,7 @@ class TaskParameterSerializer {
let array = new Array(); let array = new Array();
array = TaskParameterSerializer.readBuildParameters(array); array = TaskParameterSerializer.readBuildParameters(array);
array = TaskParameterSerializer.readInput(array); array = TaskParameterSerializer.readInput(array);
const configurableHooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.customJobHooks); const configurableHooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(__1.CloudRunner.buildParameters.customJobHooks);
const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0); const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
if (secrets.length > 0) { if (secrets.length > 0) {
// eslint-disable-next-line unicorn/no-array-reduce // eslint-disable-next-line unicorn/no-array-reduce
@ -2987,14 +3074,14 @@ class TaskParameterSerializer {
return array; return array;
} }
static readBuildParameters(array) { static readBuildParameters(array) {
const keys = Object.keys(cloud_runner_state_1.CloudRunnerState.buildParams); const keys = Object.keys(__1.CloudRunner.buildParameters);
for (const element of keys) { for (const element of keys) {
array.push({ array.push({
name: element, name: element,
value: cloud_runner_state_1.CloudRunnerState.buildParams[element], value: __1.CloudRunner.buildParameters[element],
}); });
} }
array.push({ name: 'buildParameters', value: JSON.stringify(cloud_runner_state_1.CloudRunnerState.buildParams) }); array.push({ name: 'buildParameters', value: JSON.stringify(__1.CloudRunner.buildParameters) });
return array; return array;
} }
static readInput(array) { static readInput(array) {
@ -3010,8 +3097,8 @@ class TaskParameterSerializer {
return array; return array;
} }
static setupDefaultSecrets() { static setupDefaultSecrets() {
if (cloud_runner_state_1.CloudRunnerState.defaultSecrets === undefined) if (__1.CloudRunner.defaultSecrets === undefined)
cloud_runner_state_1.CloudRunnerState.defaultSecrets = image_environment_factory_1.default.getEnvironmentVariables(cloud_runner_state_1.CloudRunnerState.buildParams).map((x) => { __1.CloudRunner.defaultSecrets = image_environment_factory_1.default.getEnvironmentVariables(__1.CloudRunner.buildParameters).map((x) => {
return { return {
ParameterKey: x.name, ParameterKey: x.name,
EnvironmentVariable: x.name, EnvironmentVariable: x.name,
@ -3023,237 +3110,6 @@ class TaskParameterSerializer {
exports.TaskParameterSerializer = TaskParameterSerializer; exports.TaskParameterSerializer = TaskParameterSerializer;
/***/ }),
/***/ 70912:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerState = void 0;
const path_1 = __importDefault(__nccwpck_require__(71017));
class CloudRunnerState {
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
static get buildPathFull() {
return path_1.default.join(`/`, CloudRunnerState.buildVolumeFolder, CloudRunnerState.buildParams.buildGuid);
}
static get cacheFolderFull() {
return path_1.default.join('/', CloudRunnerState.buildVolumeFolder, CloudRunnerState.cacheFolder, CloudRunnerState.cacheKey);
}
static setup(buildParameters) {
CloudRunnerState.buildParams = buildParameters;
}
static get branchName() {
return CloudRunnerState.buildParams.branch;
}
static get cacheKey() {
return CloudRunnerState.buildParams.cacheKey || CloudRunnerState.buildParams.branch;
}
static get builderPathFull() {
return path_1.default.join(CloudRunnerState.buildPathFull, `builder`);
}
static get repoPathFull() {
return path_1.default.join(CloudRunnerState.buildPathFull, CloudRunnerState.repositoryFolder);
}
static get projectPathFull() {
return path_1.default.join(CloudRunnerState.repoPathFull, CloudRunnerState.buildParams.projectPath);
}
static get libraryFolderFull() {
return path_1.default.join(CloudRunnerState.projectPathFull, `Library`);
}
static get lfsDirectoryFull() {
return path_1.default.join(CloudRunnerState.repoPathFull, `.git`, `lfs`);
}
static get purgeRemoteCaching() {
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
}
static get lfsCacheFolderFull() {
return path_1.default.join(CloudRunnerState.cacheFolderFull, `lfs`);
}
static get libraryCacheFolderFull() {
return path_1.default.join(CloudRunnerState.cacheFolderFull, `Library`);
}
static get unityBuilderRepoUrl() {
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
}
static get targetBuildRepoUrl() {
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`;
}
static get buildVolumeFolder() {
return 'data';
}
static get cacheFolder() {
return 'cache';
}
}
exports.CloudRunnerState = CloudRunnerState;
CloudRunnerState.repositoryFolder = 'repo';
/***/ }),
/***/ 64854:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerStepState = void 0;
class CloudRunnerStepState {
constructor(image, environmentVariables, secrets) {
this.image = image;
this.environment = environmentVariables;
this.secrets = secrets;
}
}
exports.CloudRunnerStepState = CloudRunnerStepState;
/***/ }),
/***/ 91491:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.BuildStep = void 0;
const path_1 = __importDefault(__nccwpck_require__(71017));
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_state_1 = __nccwpck_require__(70912);
class BuildStep {
run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () {
return yield BuildStep.BuildStep(cloudRunnerStepState.image, cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
});
}
static BuildStep(image, environmentVariables, secrets) {
return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.logLine(` `);
cloud_runner_logger_1.default.logLine('Starting build automation job');
const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.customJobHooks).filter((x) => x.step.includes(`setup`));
return yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, image, `apt-get update
apt-get install -y -q zip tree nodejs git-lfs jq unzip
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
export GITHUB_WORKSPACE="${cloud_runner_state_1.CloudRunnerState.repoPathFull}"
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
mkdir -p ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerBranch} ${cloud_runner_state_1.CloudRunnerState.unityBuilderRepoUrl} "${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
chmod +x ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
cp -r "${path_1.default
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', 'default-build-script')
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
cp -r "${path_1.default
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
.replace(/\\/g, `/`)}" "/entrypoint.sh"
cp -r "${path_1.default
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
.replace(/\\/g, `/`)}" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
cd "${cloud_runner_state_1.CloudRunnerState.libraryFolderFull.replace(/\\/g, `/`)}/.."
zip -r "lib-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "Library"
mv "lib-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}/Library"
cd "${cloud_runner_state_1.CloudRunnerState.repoPathFull.replace(/\\/g, `/`)}"
zip -r "build-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "build"
mv "build-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}"
chmod +x ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path_1.default
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`)
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}/Library"
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull}"
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.projectPathFull}`, environmentVariables, secrets);
});
}
}
exports.BuildStep = BuildStep;
/***/ }),
/***/ 58923:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.SetupStep = void 0;
const path_1 = __importDefault(__nccwpck_require__(71017));
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_state_1 = __nccwpck_require__(70912);
class SetupStep {
run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () {
try {
return yield SetupStep.downloadRepository(cloudRunnerStepState.image, cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
}
catch (error) {
throw error;
}
});
}
static downloadRepository(image, environmentVariables, secrets) {
return __awaiter(this, void 0, void 0, function* () {
try {
cloud_runner_logger_1.default.log(` `);
cloud_runner_logger_1.default.logLine('Starting step 1/2 (setup game files from repository)');
const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.customJobHooks).filter((x) => x.step.includes(`setup`));
return yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, image, `apk update -q
apk add git-lfs jq tree zip unzip nodejs -q
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
mkdir -p ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerBranch} ${cloud_runner_state_1.CloudRunnerState.unityBuilderRepoUrl} "${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
chmod +x ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}/`, environmentVariables, secrets);
}
catch (error) {
cloud_runner_logger_1.default.logLine(`Failed download repository step 1/2`);
throw error;
}
});
}
}
exports.SetupStep = SetupStep;
/***/ }), /***/ }),
/***/ 94655: /***/ 94655:
@ -3296,11 +3152,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.BuildAutomationWorkflow = void 0; exports.BuildAutomationWorkflow = void 0;
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const task_parameter_serializer_1 = __nccwpck_require__(35346); const task_parameter_serializer_1 = __nccwpck_require__(35346);
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_folders_1 = __nccwpck_require__(13527);
const cloud_runner_step_state_1 = __nccwpck_require__(64854);
const build_step_1 = __nccwpck_require__(91491);
const custom_workflow_1 = __nccwpck_require__(3786); const custom_workflow_1 = __nccwpck_require__(3786);
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
const path_1 = __importDefault(__nccwpck_require__(71017));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class BuildAutomationWorkflow { class BuildAutomationWorkflow {
run(cloudRunnerStepState) { run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
@ -3316,13 +3173,13 @@ class BuildAutomationWorkflow {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
cloud_runner_logger_1.default.log(`Cloud Runner is running standard build automation`); cloud_runner_logger_1.default.log(`Cloud Runner is running standard build automation`);
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!cloud_runner_1.default.buildParameters.cliMode)
core.startGroup('pre build steps'); core.startGroup('pre build steps');
let output = ''; let output = '';
if (cloud_runner_state_1.CloudRunnerState.buildParams.preBuildSteps !== '') { if (cloud_runner_1.default.buildParameters.preBuildSteps !== '') {
output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.preBuildSteps); output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_1.default.buildParameters.preBuildSteps);
} }
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!cloud_runner_1.default.buildParameters.cliMode)
core.endGroup(); core.endGroup();
cloud_runner_logger_1.default.logWithTime('Configurable pre build step(s) time'); cloud_runner_logger_1.default.logWithTime('Configurable pre build step(s) time');
// core.startGroup('setup'); // core.startGroup('setup');
@ -3335,19 +3192,21 @@ class BuildAutomationWorkflow {
// ); // );
// core.endGroup(); // core.endGroup();
// CloudRunnerLogger.logWithTime('Download repository step time'); // CloudRunnerLogger.logWithTime('Download repository step time');
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!cloud_runner_1.default.buildParameters.cliMode)
core.startGroup('build'); core.startGroup('build');
cloud_runner_logger_1.default.log(baseImage.toString()); cloud_runner_logger_1.default.log(baseImage.toString());
output += yield new build_step_1.BuildStep().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets)); cloud_runner_logger_1.default.logLine(` `);
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) cloud_runner_logger_1.default.logLine('Starting build automation job');
output += yield cloud_runner_1.default.CloudRunnerProviderPlatform.runTask(cloud_runner_1.default.buildParameters.buildGuid, baseImage.toString(), BuildAutomationWorkflow.FullWorkflow, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}`, `/${cloud_runner_folders_1.CloudRunnerFolders.projectPathFull}`, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_1.default.defaultSecrets);
if (!cloud_runner_1.default.buildParameters.cliMode)
core.endGroup(); core.endGroup();
cloud_runner_logger_1.default.logWithTime('Build time'); cloud_runner_logger_1.default.logWithTime('Build time');
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!cloud_runner_1.default.buildParameters.cliMode)
core.startGroup('post build steps'); core.startGroup('post build steps');
if (cloud_runner_state_1.CloudRunnerState.buildParams.postBuildSteps !== '') { if (cloud_runner_1.default.buildParameters.postBuildSteps !== '') {
output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.postBuildSteps); output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_1.default.buildParameters.postBuildSteps);
} }
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode) if (!cloud_runner_1.default.buildParameters.cliMode)
core.endGroup(); core.endGroup();
cloud_runner_logger_1.default.logWithTime('Configurable post build step(s) time'); cloud_runner_logger_1.default.logWithTime('Configurable post build step(s) time');
cloud_runner_logger_1.default.log(`Cloud Runner finished running standard build automation`); cloud_runner_logger_1.default.log(`Cloud Runner finished running standard build automation`);
@ -3358,6 +3217,51 @@ class BuildAutomationWorkflow {
} }
}); });
} }
static get FullWorkflow() {
const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_1.default.buildParameters.customJobHooks).filter((x) => x.step.includes(`setup`));
return `apt-get update
apt-get install -y -q zip tree nodejs git-lfs jq unzip
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
export GITHUB_WORKSPACE="${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull}"
${BuildAutomationWorkflow.SetupCommands}
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
${BuildAutomationWorkflow.BuildCommands}`;
}
static get SetupCommands() {
return `export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
echo "cloning"
mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${cloud_runner_1.default.buildParameters.cloudRunnerBranch} ${cloud_runner_folders_1.CloudRunnerFolders.unityBuilderRepoUrl} "${cloud_runner_folders_1.CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}"
${cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree ${cloud_runner_folders_1.CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
chmod +x ${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
echo "caching"
node ${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli`;
}
static get BuildCommands() {
return `cp -r "${path_1.default
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', 'default-build-script')
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
cp -r "${path_1.default
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
.replace(/\\/g, `/`)}" "/entrypoint.sh"
cp -r "${path_1.default
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
.replace(/\\/g, `/`)}" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
cd "${cloud_runner_folders_1.CloudRunnerFolders.libraryFolderFull.replace(/\\/g, `/`)}/.."
zip -r "lib-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "Library"
mv "lib-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
cd "${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull.replace(/\\/g, `/`)}"
zip -r "build-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "build"
mv "build-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}"
chmod +x ${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path_1.default
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`)
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
${cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull}"`;
}
} }
exports.BuildAutomationWorkflow = BuildAutomationWorkflow; exports.BuildAutomationWorkflow = BuildAutomationWorkflow;
@ -3384,7 +3288,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CustomWorkflow = void 0; exports.CustomWorkflow = void 0;
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_folders_1 = __nccwpck_require__(13527);
const yaml_1 = __importDefault(__nccwpck_require__(44603)); const yaml_1 = __importDefault(__nccwpck_require__(44603));
const __1 = __nccwpck_require__(41359); const __1 = __nccwpck_require__(41359);
const task_parameter_serializer_1 = __nccwpck_require__(35346); const task_parameter_serializer_1 = __nccwpck_require__(35346);
@ -3393,7 +3297,7 @@ class CustomWorkflow {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
cloud_runner_logger_1.default.log(`Cloud Runner is running in custom job mode`); cloud_runner_logger_1.default.log(`Cloud Runner is running in custom job mode`);
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (__1.CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
cloud_runner_logger_1.default.log(`Parsing build steps: ${buildSteps}`); cloud_runner_logger_1.default.log(`Parsing build steps: ${buildSteps}`);
} }
try { try {
@ -3408,7 +3312,7 @@ class CustomWorkflow {
}; };
return secret; return secret;
}); });
output += yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, step['image'], step['commands'], `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}/`, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), [...cloud_runner_state_1.CloudRunnerState.defaultSecrets, ...stepSecrets]); output += yield __1.CloudRunner.CloudRunnerProviderPlatform.runTask(__1.CloudRunner.buildParameters.buildGuid, step['image'], step['commands'], `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}`, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}/`, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), [...__1.CloudRunner.defaultSecrets, ...stepSecrets]);
} }
return output; return output;
} }
@ -3442,14 +3346,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next()); step((generator = generator.apply(thisArg, _arguments || [])).next());
}); });
}; };
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.WorkflowCompositionRoot = void 0; exports.WorkflowCompositionRoot = void 0;
const cloud_runner_state_1 = __nccwpck_require__(70912); const cloud_runner_step_state_1 = __nccwpck_require__(50121);
const cloud_runner_step_state_1 = __nccwpck_require__(64854);
const custom_workflow_1 = __nccwpck_require__(3786); const custom_workflow_1 = __nccwpck_require__(3786);
const build_automation_workflow_1 = __nccwpck_require__(94655); const build_automation_workflow_1 = __nccwpck_require__(94655);
const task_parameter_serializer_1 = __nccwpck_require__(35346); const task_parameter_serializer_1 = __nccwpck_require__(35346);
const setup_step_1 = __nccwpck_require__(58923); const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class WorkflowCompositionRoot { class WorkflowCompositionRoot {
run(cloudRunnerStepState) { run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
@ -3464,13 +3370,10 @@ class WorkflowCompositionRoot {
static runJob(baseImage) { static runJob(baseImage) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
if (cloud_runner_state_1.CloudRunnerState.buildParams.customJob === `setup`) { if (cloud_runner_1.default.buildParameters.customJob !== '') {
return yield new setup_step_1.SetupStep().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets)); return yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_1.default.buildParameters.customJob);
} }
else if (cloud_runner_state_1.CloudRunnerState.buildParams.customJob !== '') { return yield new build_automation_workflow_1.BuildAutomationWorkflow().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_1.default.defaultSecrets));
return yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.customJob);
}
return yield new build_automation_workflow_1.BuildAutomationWorkflow().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
} }
catch (error) { catch (error) {
throw error; throw error;
@ -3504,13 +3407,15 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
const exec_1 = __nccwpck_require__(71514); const exec_1 = __nccwpck_require__(71514);
const image_tag_1 = __importDefault(__nccwpck_require__(57648)); const image_tag_1 = __importDefault(__nccwpck_require__(57648));
const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145)); const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145));
const fs_1 = __nccwpck_require__(57147);
const path_1 = __importDefault(__nccwpck_require__(71017));
class Docker { class Docker {
static build(buildParameters, silent = false) { static build(buildParameters, silent = false) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const { path, dockerfile, baseImage } = buildParameters; const { path: buildPath, dockerfile, baseImage } = buildParameters;
const { version, platform } = baseImage; const { version, platform } = baseImage;
const tag = new image_tag_1.default({ repository: '', name: 'unity-builder', version, platform }); const tag = new image_tag_1.default({ repository: '', name: 'unity-builder', version, platform });
const command = `docker build ${path} \ const command = `docker build ${buildPath} \
--file ${dockerfile} \ --file ${dockerfile} \
--build-arg IMAGE=${baseImage} \ --build-arg IMAGE=${baseImage} \
--tag ${tag}`; --tag ${tag}`;
@ -3533,16 +3438,23 @@ class Docker {
} }
static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent) { static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent) {
switch (baseOs) { switch (baseOs) {
case 'linux': case 'linux': {
const githubHome = path_1.default.join(runnerTemporaryPath, '_github_home');
if (!fs_1.existsSync(githubHome))
fs_1.mkdirSync(githubHome);
const githubWorkflow = path_1.default.join(runnerTemporaryPath, '_github_workflow');
if (!fs_1.existsSync(githubWorkflow))
fs_1.mkdirSync(githubWorkflow);
return `--env UNITY_SERIAL \ return `--env UNITY_SERIAL \
--env GITHUB_WORKSPACE=/github/workspace \ --env GITHUB_WORKSPACE=/github/workspace \
${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \ ${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \
--volume "/var/run/docker.sock":"/var/run/docker.sock" \ --volume "/var/run/docker.sock":"/var/run/docker.sock:z" \
--volume "${runnerTemporaryPath}/_github_home":"/root" \ --volume "${githubHome}":"/root:z" \
--volume "${runnerTemporaryPath}/_github_workflow":"/github/workflow" \ --volume "${githubWorkflow}":"/github/workflow:z" \
--volume "${workspace}":"/github/workspace" \ --volume "${workspace}":"/github/workspace:z" \
${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \ ${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \
${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`; ${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`;
}
case 'win32': case 'win32':
return `--env UNITY_SERIAL="${unitySerial}" \ return `--env UNITY_SERIAL="${unitySerial}" \
--env GITHUB_WORKSPACE=c:/github/workspace \ --env GITHUB_WORKSPACE=c:/github/workspace \

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,6 @@ import { ActionYamlReader } from '../input-readers/action-yaml';
import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger'; import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger';
import { CliFunction, GetAllCliModes, GetCliFunctions } from './cli-decorator'; import { CliFunction, GetAllCliModes, GetCliFunctions } from './cli-decorator';
import { RemoteClientLogger } from './remote-client/remote-client-services/remote-client-logger'; import { RemoteClientLogger } from './remote-client/remote-client-services/remote-client-logger';
import { CloudRunnerState } from '../cloud-runner/state/cloud-runner-state';
import { SetupCloudRunnerRepository } from './remote-client/setup-cloud-runner-repository'; import { SetupCloudRunnerRepository } from './remote-client/setup-cloud-runner-repository';
import * as SDK from 'aws-sdk'; import * as SDK from 'aws-sdk';
@ -74,7 +73,7 @@ export class CLI {
RemoteClientLogger.log(`Build Params: RemoteClientLogger.log(`Build Params:
${JSON.stringify(buildParameter, undefined, 4)} ${JSON.stringify(buildParameter, undefined, 4)}
`); `);
CloudRunnerState.setup(buildParameter); CloudRunner.buildParameters = buildParameter;
await SetupCloudRunnerRepository.run(); await SetupCloudRunnerRepository.run();
} }

View File

@ -1,8 +1,9 @@
import { assert } from 'console'; import { assert } from 'console';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import CloudRunner from '../../../cloud-runner/cloud-runner';
import CloudRunnerLogger from '../../../cloud-runner/services/cloud-runner-logger'; import CloudRunnerLogger from '../../../cloud-runner/services/cloud-runner-logger';
import { CloudRunnerState } from '../../../cloud-runner/state/cloud-runner-state'; import { CloudRunnerFolders } from '../../../cloud-runner/services/cloud-runner-folders';
import { CloudRunnerSystem } from './cloud-runner-system'; import { CloudRunnerSystem } from './cloud-runner-system';
import { LFSHashing } from './lfs-hashing'; import { LFSHashing } from './lfs-hashing';
import { RemoteClientLogger } from './remote-client-logger'; import { RemoteClientLogger } from './remote-client-logger';
@ -17,7 +18,7 @@ export class Caching {
} }
process.chdir(path.resolve(sourceFolder, '..')); process.chdir(path.resolve(sourceFolder, '..'));
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
CloudRunnerLogger.log( CloudRunnerLogger.log(
`Hashed cache folder ${await LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path.basename( `Hashed cache folder ${await LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path.basename(
sourceFolder, sourceFolder,
@ -25,7 +26,7 @@ export class Caching {
); );
} }
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
await CloudRunnerSystem.Run(`ls ${path.basename(sourceFolder)}`); await CloudRunnerSystem.Run(`ls ${path.basename(sourceFolder)}`);
} }
// eslint-disable-next-line func-style // eslint-disable-next-line func-style
@ -38,14 +39,14 @@ export class Caching {
await CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path.basename(sourceFolder)}`); await CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path.basename(sourceFolder)}`);
assert(fs.existsSync(`${cacheKey}.zip`), 'cache zip exists'); assert(fs.existsSync(`${cacheKey}.zip`), 'cache zip exists');
assert(fs.existsSync(path.basename(sourceFolder)), 'source folder exists'); assert(fs.existsSync(path.basename(sourceFolder)), 'source folder exists');
if (CloudRunnerState.buildParams.cachePushOverrideCommand) { if (CloudRunner.buildParameters.cachePushOverrideCommand) {
CloudRunnerSystem.Run(formatFunction(CloudRunnerState.buildParams.cachePushOverrideCommand)); CloudRunnerSystem.Run(formatFunction(CloudRunner.buildParameters.cachePushOverrideCommand));
} }
CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`); CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`);
RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`); RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`);
assert(fs.existsSync(`${path.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder'); assert(fs.existsSync(`${path.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder');
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
await CloudRunnerSystem.Run(`ls ${cacheFolder}`); await CloudRunnerSystem.Run(`ls ${cacheFolder}`);
} }
} catch (error) { } catch (error) {
@ -87,12 +88,12 @@ export class Caching {
}); });
}; };
if (CloudRunnerState.buildParams.cachePullOverrideCommand) { if (CloudRunner.buildParameters.cachePullOverrideCommand) {
CloudRunnerSystem.Run(formatFunction(CloudRunnerState.buildParams.cachePullOverrideCommand)); CloudRunnerSystem.Run(formatFunction(CloudRunner.buildParameters.cachePullOverrideCommand));
} }
if (fs.existsSync(`${cacheSelection}.zip`)) { if (fs.existsSync(`${cacheSelection}.zip`)) {
const resultsFolder = `results${CloudRunnerState.buildParams.buildGuid}`; const resultsFolder = `results${CloudRunner.buildParameters.buildGuid}`;
await CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`); await CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`);
RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`); RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`);
assert(`${fs.existsSync(destinationFolder)}`); assert(`${fs.existsSync(destinationFolder)}`);
@ -124,8 +125,8 @@ export class Caching {
public static handleCachePurging() { public static handleCachePurging() {
if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) { if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) {
RemoteClientLogger.log(`purging ${CloudRunnerState.purgeRemoteCaching}`); RemoteClientLogger.log(`purging ${CloudRunnerFolders.purgeRemoteCaching}`);
fs.rmdirSync(CloudRunnerState.cacheFolder, { recursive: true }); fs.rmdirSync(CloudRunnerFolders.cacheFolder, { recursive: true });
} }
} }
} }

View File

@ -1,5 +1,5 @@
import path from 'path'; import path from 'path';
import { CloudRunnerState } from '../../../cloud-runner/state/cloud-runner-state'; import { CloudRunnerFolders } from '../../../cloud-runner/services/cloud-runner-folders';
import { CloudRunnerSystem } from './cloud-runner-system'; import { CloudRunnerSystem } from './cloud-runner-system';
import fs from 'fs'; import fs from 'fs';
import { assert } from 'console'; import { assert } from 'console';
@ -13,10 +13,10 @@ export class LFSHashing {
assert(fs.existsSync(`.lfs-assets-guid`)); assert(fs.existsSync(`.lfs-assets-guid`));
const lfsHashes = { const lfsHashes = {
lfsGuid: fs lfsGuid: fs
.readFileSync(`${path.join(CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8') .readFileSync(`${path.join(CloudRunnerFolders.repoPathFull, `.lfs-assets-guid`)}`, 'utf8')
.replace(/\n/g, ``), .replace(/\n/g, ``),
lfsGuidSum: fs lfsGuidSum: fs
.readFileSync(`${path.join(CloudRunnerState.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8') .readFileSync(`${path.join(CloudRunnerFolders.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8')
.replace(' .lfs-assets-guid', '') .replace(' .lfs-assets-guid', '')
.replace(/\n/g, ``), .replace(/\n/g, ``),
}; };

View File

@ -1,5 +1,6 @@
import fs from 'fs'; import fs from 'fs';
import { CloudRunnerState } from '../../cloud-runner/state/cloud-runner-state'; import CloudRunner from '../../cloud-runner/cloud-runner';
import { CloudRunnerFolders } from '../../cloud-runner/services/cloud-runner-folders';
import { Caching } from './remote-client-services/caching'; import { Caching } from './remote-client-services/caching';
import { LFSHashing } from './remote-client-services/lfs-hashing'; import { LFSHashing } from './remote-client-services/lfs-hashing';
import { CloudRunnerSystem } from './remote-client-services/cloud-runner-system'; import { CloudRunnerSystem } from './remote-client-services/cloud-runner-system';
@ -10,28 +11,28 @@ import { assert } from 'console';
export class SetupCloudRunnerRepository { export class SetupCloudRunnerRepository {
public static async run() { public static async run() {
try { try {
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerState.buildPathFull}`); await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerFolders.buildPathFull}`);
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerState.repoPathFull}`); await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerFolders.repoPathFull}`);
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerState.cacheFolderFull}`); await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerFolders.cacheFolderFull}`);
process.chdir(CloudRunnerState.repoPathFull); process.chdir(CloudRunnerFolders.repoPathFull);
await SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles(); await SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles();
const lfsHashes = await LFSHashing.createLFSHashFiles(); const lfsHashes = await LFSHashing.createLFSHashFiles();
if (fs.existsSync(CloudRunnerState.libraryFolderFull)) { if (fs.existsSync(CloudRunnerFolders.libraryFolderFull)) {
RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`); RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`);
} }
await Caching.PullFromCache( await Caching.PullFromCache(
CloudRunnerState.lfsCacheFolderFull, CloudRunnerFolders.lfsCacheFolderFull,
CloudRunnerState.lfsDirectoryFull, CloudRunnerFolders.lfsDirectoryFull,
`${lfsHashes.lfsGuidSum}`, `${lfsHashes.lfsGuidSum}`,
); );
await SetupCloudRunnerRepository.pullLatestLFS(); await SetupCloudRunnerRepository.pullLatestLFS();
await Caching.PushToCache( await Caching.PushToCache(
CloudRunnerState.lfsCacheFolderFull, CloudRunnerFolders.lfsCacheFolderFull,
CloudRunnerState.lfsDirectoryFull, CloudRunnerFolders.lfsDirectoryFull,
`${lfsHashes.lfsGuidSum}`, `${lfsHashes.lfsGuidSum}`,
); );
await Caching.PullFromCache(CloudRunnerState.libraryCacheFolderFull, CloudRunnerState.libraryFolderFull); await Caching.PullFromCache(CloudRunnerFolders.libraryCacheFolderFull, CloudRunnerFolders.libraryFolderFull);
Caching.handleCachePurging(); Caching.handleCachePurging();
} catch (error) { } catch (error) {
throw error; throw error;
@ -40,7 +41,7 @@ export class SetupCloudRunnerRepository {
private static async cloneRepoWithoutLFSFiles() { private static async cloneRepoWithoutLFSFiles() {
try { try {
process.chdir(`${CloudRunnerState.repoPathFull}`); process.chdir(`${CloudRunnerFolders.repoPathFull}`);
RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`); RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
await CloudRunnerSystem.Run(`git config --global advice.detachedHead false`); await CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);
RemoteClientLogger.log(`Cloning the repository being built:`); RemoteClientLogger.log(`Cloning the repository being built:`);
@ -48,14 +49,14 @@ export class SetupCloudRunnerRepository {
await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`); await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`);
await CloudRunnerSystem.Run(`git lfs install`); await CloudRunnerSystem.Run(`git lfs install`);
await CloudRunnerSystem.Run( await CloudRunnerSystem.Run(
`git clone ${CloudRunnerState.targetBuildRepoUrl} ${path.resolve( `git clone ${CloudRunnerFolders.targetBuildRepoUrl} ${path.resolve(
`..`, `..`,
path.basename(CloudRunnerState.repoPathFull), path.basename(CloudRunnerFolders.repoPathFull),
)}`, )}`,
); );
assert(fs.existsSync(`.git`)); assert(fs.existsSync(`.git`));
RemoteClientLogger.log(`${CloudRunnerState.buildParams.branch}`); RemoteClientLogger.log(`${CloudRunner.buildParameters.branch}`);
await CloudRunnerSystem.Run(`git checkout ${CloudRunnerState.buildParams.branch}`); await CloudRunnerSystem.Run(`git checkout ${CloudRunner.buildParameters.branch}`);
assert(fs.existsSync(path.join(`.git`, `lfs`)), 'LFS folder should not exist before caching'); assert(fs.existsSync(path.join(`.git`, `lfs`)), 'LFS folder should not exist before caching');
RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`); RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`);
} catch (error) { } catch (error) {
@ -64,18 +65,18 @@ export class SetupCloudRunnerRepository {
} }
private static async pullLatestLFS() { private static async pullLatestLFS() {
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerState.lfsDirectoryFull}/..`); await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerFolders.lfsDirectoryFull}/..`);
} }
process.chdir(CloudRunnerState.repoPathFull); process.chdir(CloudRunnerFolders.repoPathFull);
await CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`); await CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`);
await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`); await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`);
await CloudRunnerSystem.Run(`git lfs pull`); await CloudRunnerSystem.Run(`git lfs pull`);
RemoteClientLogger.log(`pulled latest LFS files`); RemoteClientLogger.log(`pulled latest LFS files`);
assert(fs.existsSync(CloudRunnerState.lfsDirectoryFull)); assert(fs.existsSync(CloudRunnerFolders.lfsDirectoryFull));
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerState.lfsDirectoryFull}/..`); await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerFolders.lfsDirectoryFull}/..`);
} }
} }
} }

View File

@ -1,13 +1,13 @@
import CloudRunnerLogger from '../services/cloud-runner-logger'; import CloudRunnerLogger from '../services/cloud-runner-logger';
import * as SDK from 'aws-sdk'; import * as SDK from 'aws-sdk';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { CloudRunnerState } from '../state/cloud-runner-state'; import CloudRunner from '../cloud-runner';
export class AWSError { export class AWSError {
static async handleStackCreationFailure(error: any, CF: SDK.CloudFormation, taskDefStackName: string) { static async handleStackCreationFailure(error: any, CF: SDK.CloudFormation, taskDefStackName: string) {
CloudRunnerLogger.log('aws error: '); CloudRunnerLogger.log('aws error: ');
core.error(JSON.stringify(error, undefined, 4)); core.error(JSON.stringify(error, undefined, 4));
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
CloudRunnerLogger.log('Getting events and resources for task stack'); CloudRunnerLogger.log('Getting events and resources for task stack');
const events = (await CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents; const events = (await CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents;
CloudRunnerLogger.log(JSON.stringify(events, undefined, 4)); CloudRunnerLogger.log(JSON.stringify(events, undefined, 4));

View File

@ -5,7 +5,7 @@ import CloudRunnerAWSTaskDef from './cloud-runner-aws-task-def';
import * as zlib from 'zlib'; import * as zlib from 'zlib';
import CloudRunnerLogger from '../services/cloud-runner-logger'; import CloudRunnerLogger from '../services/cloud-runner-logger';
import { Input } from '../..'; import { Input } from '../..';
import { CloudRunnerState } from '../state/cloud-runner-state'; import CloudRunner from '../cloud-runner';
import { CloudRunnerStatics } from '../cloud-runner-statics'; import { CloudRunnerStatics } from '../cloud-runner-statics';
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process'; import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
@ -39,7 +39,7 @@ class AWSTaskRunner {
{ {
name: taskDef.taskDefStackName, name: taskDef.taskDefStackName,
environment, environment,
command: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(commands, CloudRunnerState.buildParams)], command: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(commands, CloudRunner.buildParameters)],
}, },
], ],
}, },
@ -185,14 +185,14 @@ class AWSTaskRunner {
if (json.messageType === 'DATA_MESSAGE') { if (json.messageType === 'DATA_MESSAGE') {
for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) { for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) {
let message = json.logEvents[logEventsIndex].message; let message = json.logEvents[logEventsIndex].message;
if (json.logEvents[logEventsIndex].message.includes(`---${CloudRunnerState.buildParams.logId}`)) { if (json.logEvents[logEventsIndex].message.includes(`---${CloudRunner.buildParameters.logId}`)) {
CloudRunnerLogger.log('End of log transmission received'); CloudRunnerLogger.log('End of log transmission received');
shouldReadLogs = false; shouldReadLogs = false;
} else if (message.includes('Rebuilding Library because the asset database could not be found!')) { } else if (message.includes('Rebuilding Library because the asset database could not be found!')) {
core.warning('LIBRARY NOT FOUND!'); core.warning('LIBRARY NOT FOUND!');
} }
message = `[${CloudRunnerStatics.logPrefix}] ${message}`; message = `[${CloudRunnerStatics.logPrefix}] ${message}`;
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
output += message; output += message;
} }
CloudRunnerLogger.log(message); CloudRunnerLogger.log(message);

View File

@ -1,5 +1,5 @@
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './services/cloud-runner-environment-variable';
import CloudRunnerSecret from '../services/cloud-runner-secret'; import CloudRunnerSecret from './services/cloud-runner-secret';
export class CloudRunnerStepState { export class CloudRunnerStepState {
public image: string; public image: string;

View File

@ -1,18 +1,22 @@
import AWSBuildPlatform from './aws'; import AWSBuildPlatform from './aws';
import { BuildParameters } from '..'; import { BuildParameters } from '..';
import { CloudRunnerState } from './state/cloud-runner-state';
import Kubernetes from './k8s'; import Kubernetes from './k8s';
import CloudRunnerLogger from './services/cloud-runner-logger'; import CloudRunnerLogger from './services/cloud-runner-logger';
import { CloudRunnerStepState } from './state/cloud-runner-step-state'; import { CloudRunnerStepState } from './cloud-runner-step-state';
import { WorkflowCompositionRoot } from './workflows/workflow-composition-root'; import { WorkflowCompositionRoot } from './workflows/workflow-composition-root';
import { CloudRunnerError } from './error/cloud-runner-error'; import { CloudRunnerError } from './error/cloud-runner-error';
import { TaskParameterSerializer } from './services/task-parameter-serializer'; import { TaskParameterSerializer } from './services/task-parameter-serializer';
import * as core from '@actions/core'; import * as core from '@actions/core';
import CloudRunnerSecret from './services/cloud-runner-secret';
import { CloudRunnerProviderInterface } from './services/cloud-runner-provider-interface';
class CloudRunner { class CloudRunner {
public static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;
static buildParameters: BuildParameters;
public static defaultSecrets: CloudRunnerSecret[];
private static setup(buildParameters: BuildParameters) { private static setup(buildParameters: BuildParameters) {
CloudRunnerLogger.setup(); CloudRunnerLogger.setup();
CloudRunnerState.setup(buildParameters); CloudRunner.buildParameters = buildParameters;
CloudRunner.setupBuildPlatform(); CloudRunner.setupBuildPlatform();
const parameters = TaskParameterSerializer.readBuildEnvironmentVariables(); const parameters = TaskParameterSerializer.readBuildEnvironmentVariables();
if (!buildParameters.cliMode) { if (!buildParameters.cliMode) {
@ -23,15 +27,15 @@ class CloudRunner {
} }
private static setupBuildPlatform() { private static setupBuildPlatform() {
switch (CloudRunnerState.buildParams.cloudRunnerCluster) { switch (CloudRunner.buildParameters.cloudRunnerCluster) {
case 'k8s': case 'k8s':
CloudRunnerLogger.log('Cloud Runner platform selected Kubernetes'); CloudRunnerLogger.log('Cloud Runner platform selected Kubernetes');
CloudRunnerState.CloudRunnerProviderPlatform = new Kubernetes(CloudRunnerState.buildParams); CloudRunner.CloudRunnerProviderPlatform = new Kubernetes(CloudRunner.buildParameters);
break; break;
default: default:
case 'aws': case 'aws':
CloudRunnerLogger.log('Cloud Runner platform selected AWS'); CloudRunnerLogger.log('Cloud Runner platform selected AWS');
CloudRunnerState.CloudRunnerProviderPlatform = new AWSBuildPlatform(CloudRunnerState.buildParams); CloudRunner.CloudRunnerProviderPlatform = new AWSBuildPlatform(CloudRunner.buildParameters);
break; break;
} }
} }
@ -39,33 +43,33 @@ class CloudRunner {
static async run(buildParameters: BuildParameters, baseImage: string) { static async run(buildParameters: BuildParameters, baseImage: string) {
CloudRunner.setup(buildParameters); CloudRunner.setup(buildParameters);
try { try {
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('Setup remote runner'); if (!CloudRunner.buildParameters.cliMode) core.startGroup('Setup remote runner');
await CloudRunnerState.CloudRunnerProviderPlatform.setupSharedResources( await CloudRunner.CloudRunnerProviderPlatform.setupSharedResources(
CloudRunnerState.buildParams.buildGuid, CloudRunner.buildParameters.buildGuid,
CloudRunnerState.buildParams, CloudRunner.buildParameters,
CloudRunnerState.branchName, CloudRunner.buildParameters.branch,
CloudRunnerState.defaultSecrets, CloudRunner.defaultSecrets,
); );
if (!CloudRunnerState.buildParams.cliMode) core.endGroup(); if (!CloudRunner.buildParameters.cliMode) core.endGroup();
const output = await new WorkflowCompositionRoot().run( const output = await new WorkflowCompositionRoot().run(
new CloudRunnerStepState( new CloudRunnerStepState(
baseImage, baseImage,
TaskParameterSerializer.readBuildEnvironmentVariables(), TaskParameterSerializer.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets, CloudRunner.defaultSecrets,
), ),
); );
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('Cleanup'); if (!CloudRunner.buildParameters.cliMode) core.startGroup('Cleanup');
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources( await CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(
CloudRunnerState.buildParams.buildGuid, CloudRunner.buildParameters.buildGuid,
CloudRunnerState.buildParams, CloudRunner.buildParameters,
CloudRunnerState.branchName, CloudRunner.buildParameters.branch,
CloudRunnerState.defaultSecrets, CloudRunner.defaultSecrets,
); );
CloudRunnerLogger.log(`Cleanup complete`); CloudRunnerLogger.log(`Cleanup complete`);
if (!CloudRunnerState.buildParams.cliMode) core.endGroup(); if (!CloudRunner.buildParameters.cliMode) core.endGroup();
return output; return output;
} catch (error) { } catch (error) {
if (!CloudRunnerState.buildParams.cliMode) core.endGroup(); if (!CloudRunner.buildParameters.cliMode) core.endGroup();
await CloudRunnerError.handleException(error); await CloudRunnerError.handleException(error);
throw error; throw error;
} }

View File

@ -1,16 +1,16 @@
import CloudRunnerLogger from '../services/cloud-runner-logger'; import CloudRunnerLogger from '../services/cloud-runner-logger';
import { CloudRunnerState } from '../state/cloud-runner-state';
import * as core from '@actions/core'; import * as core from '@actions/core';
import CloudRunner from '../cloud-runner';
export class CloudRunnerError { export class CloudRunnerError {
public static async handleException(error: unknown) { public static async handleException(error: unknown) {
CloudRunnerLogger.error(JSON.stringify(error, undefined, 4)); CloudRunnerLogger.error(JSON.stringify(error, undefined, 4));
core.setFailed('Cloud Runner failed'); core.setFailed('Cloud Runner failed');
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources( await CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(
CloudRunnerState.buildParams.buildGuid, CloudRunner.buildParameters.buildGuid,
CloudRunnerState.buildParams, CloudRunner.buildParameters,
CloudRunnerState.branchName, CloudRunner.buildParameters.branch,
CloudRunnerState.defaultSecrets, CloudRunner.defaultSecrets,
); );
} }
} }

View File

@ -3,7 +3,7 @@ import BuildParameters from '../../build-parameters';
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process'; import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import CloudRunnerSecret from '../services/cloud-runner-secret'; import CloudRunnerSecret from '../services/cloud-runner-secret';
import { CloudRunnerState } from '../state/cloud-runner-state'; import CloudRunner from '../cloud-runner';
class KubernetesJobSpecFactory { class KubernetesJobSpecFactory {
static getJobSpec( static getJobSpec(
@ -103,7 +103,7 @@ class KubernetesJobSpecFactory {
name: 'main', name: 'main',
image, image,
command: ['/bin/sh'], command: ['/bin/sh'],
args: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(command, CloudRunnerState.buildParams)], args: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(command, CloudRunner.buildParameters)],
workingDir: `${workingDirectory}`, workingDir: `${workingDirectory}`,
resources: { resources: {

View File

@ -4,7 +4,7 @@ import CloudRunnerLogger from '../services/cloud-runner-logger';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { CloudRunnerStatics } from '../cloud-runner-statics'; import { CloudRunnerStatics } from '../cloud-runner-statics';
import waitUntil from 'async-wait-until'; import waitUntil from 'async-wait-until';
import { CloudRunnerState } from '../state/cloud-runner-state'; import CloudRunner from '../cloud-runner';
class KubernetesTaskRunner { class KubernetesTaskRunner {
static async runTask( static async runTask(
@ -24,7 +24,7 @@ class KubernetesTaskRunner {
didStreamAnyLogs = true; didStreamAnyLogs = true;
let message = chunk.toString().trimRight(`\n`); let message = chunk.toString().trimRight(`\n`);
message = `[${CloudRunnerStatics.logPrefix}] ${message}`; message = `[${CloudRunnerStatics.logPrefix}] ${message}`;
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
output += message; output += message;
} }
logCallback(message); logCallback(message);

View File

@ -1,7 +1,7 @@
import { BuildParameters } from '../..'; import { BuildParameters } from '../..';
import YAML from 'yaml'; import YAML from 'yaml';
import CloudRunnerSecret from './cloud-runner-secret'; import CloudRunnerSecret from './cloud-runner-secret';
import { CloudRunnerState } from '../state/cloud-runner-state'; import CloudRunner from '../cloud-runner';
export class CloudRunnerBuildCommandProcessor { export class CloudRunnerBuildCommandProcessor {
public static ProcessCommands(commands: string, buildParameters: BuildParameters): string { public static ProcessCommands(commands: string, buildParameters: BuildParameters): string {
@ -11,7 +11,7 @@ export class CloudRunnerBuildCommandProcessor {
return `echo "---" return `echo "---"
echo "start cloud runner init" echo "start cloud runner init"
${CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} printenv ${CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} printenv
echo "start of cloud runner job" echo "start of cloud runner job"
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '} ${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
${commands} ${commands}

View File

@ -0,0 +1,72 @@
import path from 'path';
import { CloudRunner } from '../..';
export class CloudRunnerFolders {
public static readonly repositoryFolder = 'repo';
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
public static get buildPathFull(): string {
return path.join(`/`, CloudRunnerFolders.buildVolumeFolder, CloudRunner.buildParameters.buildGuid);
}
public static get cacheFolderFull(): string {
return path.join(
'/',
CloudRunnerFolders.buildVolumeFolder,
CloudRunnerFolders.cacheFolder,
CloudRunnerFolders.cacheKey,
);
}
public static get cacheKey(): string {
return CloudRunner.buildParameters.cacheKey || CloudRunner.buildParameters.branch;
}
public static get builderPathFull(): string {
return path.join(CloudRunnerFolders.buildPathFull, `builder`);
}
public static get repoPathFull(): string {
return path.join(CloudRunnerFolders.buildPathFull, CloudRunnerFolders.repositoryFolder);
}
public static get projectPathFull(): string {
return path.join(CloudRunnerFolders.repoPathFull, CloudRunner.buildParameters.projectPath);
}
public static get libraryFolderFull(): string {
return path.join(CloudRunnerFolders.projectPathFull, `Library`);
}
public static get lfsDirectoryFull(): string {
return path.join(CloudRunnerFolders.repoPathFull, `.git`, `lfs`);
}
public static get purgeRemoteCaching(): boolean {
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
}
public static get lfsCacheFolderFull() {
return path.join(CloudRunnerFolders.cacheFolderFull, `lfs`);
}
public static get libraryCacheFolderFull() {
return path.join(CloudRunnerFolders.cacheFolderFull, `Library`);
}
public static get unityBuilderRepoUrl(): string {
return `https://${CloudRunner.buildParameters.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
}
public static get targetBuildRepoUrl(): string {
return `https://${CloudRunner.buildParameters.gitPrivateToken}@github.com/${CloudRunner.buildParameters.githubRepo}.git`;
}
public static get buildVolumeFolder() {
return 'data';
}
public static get cacheFolder() {
return 'cache';
}
}

View File

@ -1,7 +1,6 @@
import { Input } from '../..'; import { CloudRunner, Input } from '../..';
import ImageEnvironmentFactory from '../../image-environment-factory'; import ImageEnvironmentFactory from '../../image-environment-factory';
import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerBuildCommandProcessor } from './cloud-runner-build-command-process'; import { CloudRunnerBuildCommandProcessor } from './cloud-runner-build-command-process';
export class TaskParameterSerializer { export class TaskParameterSerializer {
@ -10,15 +9,15 @@ export class TaskParameterSerializer {
return [ return [
{ {
name: 'ContainerMemory', name: 'ContainerMemory',
value: CloudRunnerState.buildParams.cloudRunnerMemory, value: CloudRunner.buildParameters.cloudRunnerMemory,
}, },
{ {
name: 'ContainerCpu', name: 'ContainerCpu',
value: CloudRunnerState.buildParams.cloudRunnerCpu, value: CloudRunner.buildParameters.cloudRunnerCpu,
}, },
{ {
name: 'BUILD_TARGET', name: 'BUILD_TARGET',
value: CloudRunnerState.buildParams.platform, value: CloudRunner.buildParameters.platform,
}, },
...TaskParameterSerializer.serializeBuildParamsAndInput, ...TaskParameterSerializer.serializeBuildParamsAndInput,
]; ];
@ -27,7 +26,7 @@ export class TaskParameterSerializer {
let array = new Array(); let array = new Array();
array = TaskParameterSerializer.readBuildParameters(array); array = TaskParameterSerializer.readBuildParameters(array);
array = TaskParameterSerializer.readInput(array); array = TaskParameterSerializer.readInput(array);
const configurableHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks); const configurableHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunner.buildParameters.customJobHooks);
const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0); const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
if (secrets.length > 0) { if (secrets.length > 0) {
// eslint-disable-next-line unicorn/no-array-reduce // eslint-disable-next-line unicorn/no-array-reduce
@ -46,14 +45,14 @@ export class TaskParameterSerializer {
} }
private static readBuildParameters(array: any[]) { private static readBuildParameters(array: any[]) {
const keys = Object.keys(CloudRunnerState.buildParams); const keys = Object.keys(CloudRunner.buildParameters);
for (const element of keys) { for (const element of keys) {
array.push({ array.push({
name: element, name: element,
value: CloudRunnerState.buildParams[element], value: CloudRunner.buildParameters[element],
}); });
} }
array.push({ name: 'buildParameters', value: JSON.stringify(CloudRunnerState.buildParams) }); array.push({ name: 'buildParameters', value: JSON.stringify(CloudRunner.buildParameters) });
return array; return array;
} }
@ -71,15 +70,15 @@ export class TaskParameterSerializer {
} }
private static setupDefaultSecrets() { private static setupDefaultSecrets() {
if (CloudRunnerState.defaultSecrets === undefined) if (CloudRunner.defaultSecrets === undefined)
CloudRunnerState.defaultSecrets = ImageEnvironmentFactory.getEnvironmentVariables( CloudRunner.defaultSecrets = ImageEnvironmentFactory.getEnvironmentVariables(CloudRunner.buildParameters).map(
CloudRunnerState.buildParams, (x) => {
).map((x) => {
return { return {
ParameterKey: x.name, ParameterKey: x.name,
EnvironmentVariable: x.name, EnvironmentVariable: x.name,
ParameterValue: x.value, ParameterValue: x.value,
}; };
}); },
);
} }
} }

View File

@ -1,80 +0,0 @@
import path from 'path';
import { BuildParameters } from '../..';
import { CloudRunnerProviderInterface } from '../services/cloud-runner-provider-interface';
import CloudRunnerSecret from '../services/cloud-runner-secret';
export class CloudRunnerState {
public static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;
public static buildParams: BuildParameters;
public static defaultSecrets: CloudRunnerSecret[];
public static readonly repositoryFolder = 'repo';
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
public static get buildPathFull(): string {
return path.join(`/`, CloudRunnerState.buildVolumeFolder, CloudRunnerState.buildParams.buildGuid);
}
public static get cacheFolderFull(): string {
return path.join('/', CloudRunnerState.buildVolumeFolder, CloudRunnerState.cacheFolder, CloudRunnerState.cacheKey);
}
static setup(buildParameters: BuildParameters) {
CloudRunnerState.buildParams = buildParameters;
}
public static get branchName(): string {
return CloudRunnerState.buildParams.branch;
}
public static get cacheKey(): string {
return CloudRunnerState.buildParams.cacheKey || CloudRunnerState.buildParams.branch;
}
public static get builderPathFull(): string {
return path.join(CloudRunnerState.buildPathFull, `builder`);
}
public static get repoPathFull(): string {
return path.join(CloudRunnerState.buildPathFull, CloudRunnerState.repositoryFolder);
}
public static get projectPathFull(): string {
return path.join(CloudRunnerState.repoPathFull, CloudRunnerState.buildParams.projectPath);
}
public static get libraryFolderFull(): string {
return path.join(CloudRunnerState.projectPathFull, `Library`);
}
public static get lfsDirectoryFull(): string {
return path.join(CloudRunnerState.repoPathFull, `.git`, `lfs`);
}
public static get purgeRemoteCaching(): boolean {
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
}
public static get lfsCacheFolderFull() {
return path.join(CloudRunnerState.cacheFolderFull, `lfs`);
}
public static get libraryCacheFolderFull() {
return path.join(CloudRunnerState.cacheFolderFull, `Library`);
}
public static get unityBuilderRepoUrl(): string {
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
}
public static get targetBuildRepoUrl(): string {
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`;
}
public static get buildVolumeFolder() {
return 'data';
}
public static get cacheFolder() {
return 'cache';
}
}

View File

@ -1,87 +0,0 @@
import path from 'path';
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import CloudRunnerLogger from '../services/cloud-runner-logger';
import CloudRunnerSecret from '../services/cloud-runner-secret';
import { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { StepInterface } from './step-interface';
export class BuildStep implements StepInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) {
return await BuildStep.BuildStep(
cloudRunnerStepState.image,
cloudRunnerStepState.environment,
cloudRunnerStepState.secrets,
);
}
private static async BuildStep(
image: string,
environmentVariables: CloudRunnerEnvironmentVariable[],
secrets: CloudRunnerSecret[],
) {
CloudRunnerLogger.logLine(` `);
CloudRunnerLogger.logLine('Starting build automation job');
const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks).filter((x) =>
x.step.includes(`setup`),
);
return await CloudRunnerState.CloudRunnerProviderPlatform.runTask(
CloudRunnerState.buildParams.buildGuid,
image,
`apt-get update
apt-get install -y -q zip tree nodejs git-lfs jq unzip
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
export GITHUB_WORKSPACE="${CloudRunnerState.repoPathFull}"
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
mkdir -p ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${CloudRunnerState.buildParams.cloudRunnerBranch} ${
CloudRunnerState.unityBuilderRepoUrl
} "${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
${
CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'
} tree ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
chmod +x ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
cp -r "${path
.join(CloudRunnerState.builderPathFull, 'dist', 'default-build-script')
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
cp -r "${path
.join(CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
.replace(/\\/g, `/`)}" "/entrypoint.sh"
cp -r "${path
.join(CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
.replace(/\\/g, `/`)}" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
cd "${CloudRunnerState.libraryFolderFull.replace(/\\/g, `/`)}/.."
zip -r "lib-${CloudRunnerState.buildParams.buildGuid}.zip" "Library"
mv "lib-${CloudRunnerState.buildParams.buildGuid}.zip" "${CloudRunnerState.cacheFolderFull.replace(
/\\/g,
`/`,
)}/Library"
cd "${CloudRunnerState.repoPathFull.replace(/\\/g, `/`)}"
zip -r "build-${CloudRunnerState.buildParams.buildGuid}.zip" "build"
mv "build-${CloudRunnerState.buildParams.buildGuid}.zip" "${CloudRunnerState.cacheFolderFull.replace(
/\\/g,
`/`,
)}"
chmod +x ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path
.join(CloudRunnerState.builderPathFull, 'dist', `index.js`)
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${
CloudRunnerState.buildParams.buildGuid
}.zip" "${CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}/Library"
${CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${
CloudRunnerState.cacheFolderFull
}"
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
`,
`/${CloudRunnerState.buildVolumeFolder}`,
`/${CloudRunnerState.projectPathFull}`,
environmentVariables,
secrets,
);
}
}

View File

@ -1,62 +0,0 @@
import path from 'path';
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import CloudRunnerLogger from '../services/cloud-runner-logger';
import CloudRunnerSecret from '../services/cloud-runner-secret';
import { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { StepInterface } from './step-interface';
export class SetupStep implements StepInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) {
try {
return await SetupStep.downloadRepository(
cloudRunnerStepState.image,
cloudRunnerStepState.environment,
cloudRunnerStepState.secrets,
);
} catch (error) {
throw error;
}
}
private static async downloadRepository(
image: string,
environmentVariables: CloudRunnerEnvironmentVariable[],
secrets: CloudRunnerSecret[],
) {
try {
CloudRunnerLogger.log(` `);
CloudRunnerLogger.logLine('Starting step 1/2 (setup game files from repository)');
const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks).filter((x) =>
x.step.includes(`setup`),
);
return await CloudRunnerState.CloudRunnerProviderPlatform.runTask(
CloudRunnerState.buildParams.buildGuid,
image,
`apk update -q
apk add git-lfs jq tree zip unzip nodejs -q
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
mkdir -p ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${CloudRunnerState.buildParams.cloudRunnerBranch} ${
CloudRunnerState.unityBuilderRepoUrl
} "${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
${
CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'
} tree ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
chmod +x ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
`,
`/${CloudRunnerState.buildVolumeFolder}`,
`/${CloudRunnerState.buildVolumeFolder}/`,
environmentVariables,
secrets,
);
} catch (error) {
CloudRunnerLogger.logLine(`Failed download repository step 1/2`);
throw error;
}
}
}

View File

@ -1,8 +0,0 @@
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
export interface StepInterface {
run(
// eslint-disable-next-line no-unused-vars
cloudRunnerStepState: CloudRunnerStepState,
);
}

View File

@ -1,11 +1,13 @@
import CloudRunnerLogger from '../services/cloud-runner-logger'; import CloudRunnerLogger from '../services/cloud-runner-logger';
import { TaskParameterSerializer } from '../services/task-parameter-serializer'; import { TaskParameterSerializer } from '../services/task-parameter-serializer';
import { CloudRunnerState } from '../state/cloud-runner-state'; import { CloudRunnerFolders } from '../services/cloud-runner-folders';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state'; import { CloudRunnerStepState } from '../cloud-runner-step-state';
import { BuildStep } from '../steps/build-step';
import { CustomWorkflow } from './custom-workflow'; import { CustomWorkflow } from './custom-workflow';
import { WorkflowInterface } from './workflow-interface'; import { WorkflowInterface } from './workflow-interface';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
import path from 'path';
import CloudRunner from '../cloud-runner';
export class BuildAutomationWorkflow implements WorkflowInterface { export class BuildAutomationWorkflow implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) { async run(cloudRunnerStepState: CloudRunnerStepState) {
@ -20,12 +22,12 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
try { try {
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`); CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('pre build steps'); if (!CloudRunner.buildParameters.cliMode) core.startGroup('pre build steps');
let output = ''; let output = '';
if (CloudRunnerState.buildParams.preBuildSteps !== '') { if (CloudRunner.buildParameters.preBuildSteps !== '') {
output += await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.preBuildSteps); output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.preBuildSteps);
} }
if (!CloudRunnerState.buildParams.cliMode) core.endGroup(); if (!CloudRunner.buildParameters.cliMode) core.endGroup();
CloudRunnerLogger.logWithTime('Configurable pre build step(s) time'); CloudRunnerLogger.logWithTime('Configurable pre build step(s) time');
// core.startGroup('setup'); // core.startGroup('setup');
@ -39,23 +41,28 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
// core.endGroup(); // core.endGroup();
// CloudRunnerLogger.logWithTime('Download repository step time'); // CloudRunnerLogger.logWithTime('Download repository step time');
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('build'); if (!CloudRunner.buildParameters.cliMode) core.startGroup('build');
CloudRunnerLogger.log(baseImage.toString()); CloudRunnerLogger.log(baseImage.toString());
output += await new BuildStep().run( CloudRunnerLogger.logLine(` `);
new CloudRunnerStepState( CloudRunnerLogger.logLine('Starting build automation job');
baseImage,
output += await CloudRunner.CloudRunnerProviderPlatform.runTask(
CloudRunner.buildParameters.buildGuid,
baseImage.toString(),
BuildAutomationWorkflow.FullWorkflow,
`/${CloudRunnerFolders.buildVolumeFolder}`,
`/${CloudRunnerFolders.projectPathFull}`,
TaskParameterSerializer.readBuildEnvironmentVariables(), TaskParameterSerializer.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets, CloudRunner.defaultSecrets,
),
); );
if (!CloudRunnerState.buildParams.cliMode) core.endGroup(); if (!CloudRunner.buildParameters.cliMode) core.endGroup();
CloudRunnerLogger.logWithTime('Build time'); CloudRunnerLogger.logWithTime('Build time');
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('post build steps'); if (!CloudRunner.buildParameters.cliMode) core.startGroup('post build steps');
if (CloudRunnerState.buildParams.postBuildSteps !== '') { if (CloudRunner.buildParameters.postBuildSteps !== '') {
output += await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.postBuildSteps); output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.postBuildSteps);
} }
if (!CloudRunnerState.buildParams.cliMode) core.endGroup(); if (!CloudRunner.buildParameters.cliMode) core.endGroup();
CloudRunnerLogger.logWithTime('Configurable post build step(s) time'); CloudRunnerLogger.logWithTime('Configurable post build step(s) time');
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`); CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
@ -65,4 +72,68 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
throw error; throw error;
} }
} }
private static get FullWorkflow() {
const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunner.buildParameters.customJobHooks).filter((x) =>
x.step.includes(`setup`),
);
return `apt-get update
apt-get install -y -q zip tree nodejs git-lfs jq unzip
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
export GITHUB_WORKSPACE="${CloudRunnerFolders.repoPathFull}"
${BuildAutomationWorkflow.SetupCommands}
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
${BuildAutomationWorkflow.BuildCommands}`;
}
private static get SetupCommands() {
return `export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
echo "cloning"
mkdir -p ${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${CloudRunner.buildParameters.cloudRunnerBranch} ${
CloudRunnerFolders.unityBuilderRepoUrl
} "${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}"
${
CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'
} tree ${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
chmod +x ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
echo "caching"
node ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli`;
}
private static get BuildCommands() {
return `cp -r "${path
.join(CloudRunnerFolders.builderPathFull, 'dist', 'default-build-script')
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
cp -r "${path
.join(CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
.replace(/\\/g, `/`)}" "/entrypoint.sh"
cp -r "${path
.join(CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
.replace(/\\/g, `/`)}" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
cd "${CloudRunnerFolders.libraryFolderFull.replace(/\\/g, `/`)}/.."
zip -r "lib-${CloudRunner.buildParameters.buildGuid}.zip" "Library"
mv "lib-${CloudRunner.buildParameters.buildGuid}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(
/\\/g,
`/`,
)}/Library"
cd "${CloudRunnerFolders.repoPathFull.replace(/\\/g, `/`)}"
zip -r "build-${CloudRunner.buildParameters.buildGuid}.zip" "build"
mv "build-${CloudRunner.buildParameters.buildGuid}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(
/\\/g,
`/`,
)}"
chmod +x ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
node ${path
.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`)
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${
CloudRunner.buildParameters.buildGuid
}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
${CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${
CloudRunnerFolders.cacheFolderFull
}"`;
}
} }

View File

@ -1,15 +1,15 @@
import CloudRunnerLogger from '../services/cloud-runner-logger'; import CloudRunnerLogger from '../services/cloud-runner-logger';
import CloudRunnerSecret from '../services/cloud-runner-secret'; import CloudRunnerSecret from '../services/cloud-runner-secret';
import { CloudRunnerState } from '../state/cloud-runner-state'; import { CloudRunnerFolders } from '../services/cloud-runner-folders';
import YAML from 'yaml'; import YAML from 'yaml';
import { Input } from '../..'; import { CloudRunner, Input } from '../..';
import { TaskParameterSerializer } from '../services/task-parameter-serializer'; import { TaskParameterSerializer } from '../services/task-parameter-serializer';
export class CustomWorkflow { export class CustomWorkflow {
public static async runCustomJob(buildSteps) { public static async runCustomJob(buildSteps) {
try { try {
CloudRunnerLogger.log(`Cloud Runner is running in custom job mode`); CloudRunnerLogger.log(`Cloud Runner is running in custom job mode`);
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) { if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
CloudRunnerLogger.log(`Parsing build steps: ${buildSteps}`); CloudRunnerLogger.log(`Parsing build steps: ${buildSteps}`);
} }
try { try {
@ -24,14 +24,14 @@ export class CustomWorkflow {
}; };
return secret; return secret;
}); });
output += await CloudRunnerState.CloudRunnerProviderPlatform.runTask( output += await CloudRunner.CloudRunnerProviderPlatform.runTask(
CloudRunnerState.buildParams.buildGuid, CloudRunner.buildParameters.buildGuid,
step['image'], step['image'],
step['commands'], step['commands'],
`/${CloudRunnerState.buildVolumeFolder}`, `/${CloudRunnerFolders.buildVolumeFolder}`,
`/${CloudRunnerState.buildVolumeFolder}/`, `/${CloudRunnerFolders.buildVolumeFolder}/`,
TaskParameterSerializer.readBuildEnvironmentVariables(), TaskParameterSerializer.readBuildEnvironmentVariables(),
[...CloudRunnerState.defaultSecrets, ...stepSecrets], [...CloudRunner.defaultSecrets, ...stepSecrets],
); );
} }
return output; return output;

View File

@ -1,10 +1,9 @@
import { CloudRunnerState } from '../state/cloud-runner-state'; import { CloudRunnerStepState } from '../cloud-runner-step-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { CustomWorkflow } from './custom-workflow'; import { CustomWorkflow } from './custom-workflow';
import { WorkflowInterface } from './workflow-interface'; import { WorkflowInterface } from './workflow-interface';
import { BuildAutomationWorkflow } from './build-automation-workflow'; import { BuildAutomationWorkflow } from './build-automation-workflow';
import { TaskParameterSerializer } from '../services/task-parameter-serializer'; import { TaskParameterSerializer } from '../services/task-parameter-serializer';
import { SetupStep } from '../steps/setup-step'; import CloudRunner from '../cloud-runner';
export class WorkflowCompositionRoot implements WorkflowInterface { export class WorkflowCompositionRoot implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) { async run(cloudRunnerStepState: CloudRunnerStepState) {
@ -17,22 +16,14 @@ export class WorkflowCompositionRoot implements WorkflowInterface {
private static async runJob(baseImage: any) { private static async runJob(baseImage: any) {
try { try {
if (CloudRunnerState.buildParams.customJob === `setup`) { if (CloudRunner.buildParameters.customJob !== '') {
return await new SetupStep().run( return await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.customJob);
new CloudRunnerStepState(
baseImage,
TaskParameterSerializer.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
} else if (CloudRunnerState.buildParams.customJob !== '') {
return await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.customJob);
} }
return await new BuildAutomationWorkflow().run( return await new BuildAutomationWorkflow().run(
new CloudRunnerStepState( new CloudRunnerStepState(
baseImage, baseImage,
TaskParameterSerializer.readBuildEnvironmentVariables(), TaskParameterSerializer.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets, CloudRunner.defaultSecrets,
), ),
); );
} catch (error) { } catch (error) {

View File

@ -1,4 +1,4 @@
import { CloudRunnerStepState } from '../state/cloud-runner-step-state'; import { CloudRunnerStepState } from '../cloud-runner-step-state';
export interface WorkflowInterface { export interface WorkflowInterface {
run( run(