Support cache and input override commands as input + full support custom hooks
							parent
							
								
									dcfc6e50c5
								
							
						
					
					
						commit
						c022d6e656
					
				|  | @ -264,6 +264,7 @@ class BuildParameters { | ||||||
|             const buildVersion = yield versioning_1.default.determineVersion(input_1.default.versioningStrategy, input_1.default.specifiedVersion); |             const buildVersion = yield versioning_1.default.determineVersion(input_1.default.versioningStrategy, input_1.default.specifiedVersion); | ||||||
|             const androidVersionCode = android_versioning_1.default.determineVersionCode(buildVersion, input_1.default.androidVersionCode); |             const androidVersionCode = android_versioning_1.default.determineVersionCode(buildVersion, input_1.default.androidVersionCode); | ||||||
|             const androidSdkManagerParameters = android_versioning_1.default.determineSdkManagerParameters(input_1.default.androidTargetSdkVersion); |             const androidSdkManagerParameters = android_versioning_1.default.determineSdkManagerParameters(input_1.default.androidTargetSdkVersion); | ||||||
|  |             yield input_1.default.PopulateQueryOverrideInput(); | ||||||
|             let unitySerial = ''; |             let unitySerial = ''; | ||||||
|             if (!process.env.UNITY_SERIAL) { |             if (!process.env.UNITY_SERIAL) { | ||||||
|                 //No serial was present so it is a personal license that we need to convert
 |                 //No serial was present so it is a personal license that we need to convert
 | ||||||
|  | @ -306,7 +307,6 @@ class BuildParameters { | ||||||
|                 cloudRunnerCluster: input_1.default.cloudRunnerCluster, |                 cloudRunnerCluster: input_1.default.cloudRunnerCluster, | ||||||
|                 awsBaseStackName: input_1.default.awsBaseStackName, |                 awsBaseStackName: input_1.default.awsBaseStackName, | ||||||
|                 kubeConfig: input_1.default.kubeConfig, |                 kubeConfig: input_1.default.kubeConfig, | ||||||
|                 githubToken: yield input_1.default.githubToken(), |  | ||||||
|                 cloudRunnerMemory: input_1.default.cloudRunnerMemory, |                 cloudRunnerMemory: input_1.default.cloudRunnerMemory, | ||||||
|                 cloudRunnerCpu: input_1.default.cloudRunnerCpu, |                 cloudRunnerCpu: input_1.default.cloudRunnerCpu, | ||||||
|                 kubeVolumeSize: input_1.default.kubeVolumeSize, |                 kubeVolumeSize: input_1.default.kubeVolumeSize, | ||||||
|  | @ -322,6 +322,11 @@ class BuildParameters { | ||||||
|                 gitSha: input_1.default.gitSha, |                 gitSha: input_1.default.gitSha, | ||||||
|                 logId: nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 9)(), |                 logId: nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 9)(), | ||||||
|                 buildGuid: cloud_runner_namespace_1.default.generateBuildName(input_1.default.runNumber, input_1.default.targetPlatform), |                 buildGuid: cloud_runner_namespace_1.default.generateBuildName(input_1.default.runNumber, input_1.default.targetPlatform), | ||||||
|  |                 customJobHooks: input_1.default.customJobHooks(), | ||||||
|  |                 cachePullOverrideCommand: input_1.default.cachePullOverrideCommand(), | ||||||
|  |                 cachePushOverrideCommand: input_1.default.cachePushOverrideCommand(), | ||||||
|  |                 readInputOverrideCommand: input_1.default.readInputOverrideCommand(), | ||||||
|  |                 readInputFromOverrideList: input_1.default.readInputFromOverrideList(), | ||||||
|             }; |             }; | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  | @ -638,8 +643,8 @@ 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 (process.env.CLOUD_RUNNER_PRE_CACHE_PUSH) { |                 if (cloud_runner_state_1.CloudRunnerState.buildParams.cachePushOverrideCommand) { | ||||||
|                     cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(process.env.CLOUD_RUNNER_PRE_CACHE_PUSH)); |                     cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_state_1.CloudRunnerState.buildParams.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}`); | ||||||
|  | @ -679,8 +684,8 @@ class Caching { | ||||||
|                         return typeof arguments_[number] != 'undefined' ? arguments_[number] : match; |                         return typeof arguments_[number] != 'undefined' ? arguments_[number] : match; | ||||||
|                     }); |                     }); | ||||||
|                 }; |                 }; | ||||||
|                 if (process.env.CLOUD_RUNNER_PRE_CACHE_PULL) { |                 if (cloud_runner_state_1.CloudRunnerState.buildParams.cachePullOverrideCommand) { | ||||||
|                     cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(process.env.CLOUD_RUNNER_PRE_CACHE_PULL)); |                     cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_state_1.CloudRunnerState.buildParams.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_state_1.CloudRunnerState.buildParams.buildGuid}`; | ||||||
|  | @ -2594,7 +2599,7 @@ const __1 = __nccwpck_require__(41359); | ||||||
| const yaml_1 = __importDefault(__nccwpck_require__(44603)); | const yaml_1 = __importDefault(__nccwpck_require__(44603)); | ||||||
| class CloudRunnerBuildCommandProcessor { | class CloudRunnerBuildCommandProcessor { | ||||||
|     static ProcessCommands(commands, buildParameters) { |     static ProcessCommands(commands, buildParameters) { | ||||||
|         const hooks = CloudRunnerBuildCommandProcessor.getHooks().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" | ||||||
|       ${__1.Input.cloudRunnerTests ? '' : '#'} printenv |       ${__1.Input.cloudRunnerTests ? '' : '#'} printenv | ||||||
|  | @ -2606,8 +2611,8 @@ class CloudRunnerBuildCommandProcessor { | ||||||
|       ---${buildParameters.logId}" |       ---${buildParameters.logId}" | ||||||
|     `;
 |     `;
 | ||||||
|     } |     } | ||||||
|     static getHooks() { |     static getHooks(customJobHooks) { | ||||||
|         const experimentHooks = process.env.EXPERIMENTAL_HOOKS; |         const experimentHooks = customJobHooks; | ||||||
|         let output = new Array(); |         let output = new Array(); | ||||||
|         if (experimentHooks && experimentHooks !== '') { |         if (experimentHooks && experimentHooks !== '') { | ||||||
|             try { |             try { | ||||||
|  | @ -2764,7 +2769,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(); |         const configurableHooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.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
 | ||||||
|  | @ -2867,10 +2872,10 @@ class CloudRunnerState { | ||||||
|         return path_1.default.join(CloudRunnerState.cacheFolderFull, `Library`); |         return path_1.default.join(CloudRunnerState.cacheFolderFull, `Library`); | ||||||
|     } |     } | ||||||
|     static get unityBuilderRepoUrl() { |     static get unityBuilderRepoUrl() { | ||||||
|         return `https://${CloudRunnerState.buildParams.githubToken}@github.com/game-ci/unity-builder.git`; |         return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/game-ci/unity-builder.git`; | ||||||
|     } |     } | ||||||
|     static get targetBuildRepoUrl() { |     static get targetBuildRepoUrl() { | ||||||
|         return `https://${CloudRunnerState.buildParams.githubToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`; |         return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`; | ||||||
|     } |     } | ||||||
|     static get buildVolumeFolder() { |     static get buildVolumeFolder() { | ||||||
|         return 'data'; |         return 'data'; | ||||||
|  | @ -2938,7 +2943,7 @@ class BuildStep { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             cloud_runner_logger_1.default.logLine(` `); |             cloud_runner_logger_1.default.logLine(` `); | ||||||
|             cloud_runner_logger_1.default.logLine('Starting part 2/2 (build unity project)'); |             cloud_runner_logger_1.default.logLine('Starting part 2/2 (build unity project)'); | ||||||
|             const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks().filter((x) => x.step.includes(`setup`)); |             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, `${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '} |             return yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, image, `${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '} | ||||||
|         export GITHUB_WORKSPACE="${cloud_runner_state_1.CloudRunnerState.repoPathFull}" |         export GITHUB_WORKSPACE="${cloud_runner_state_1.CloudRunnerState.repoPathFull}" | ||||||
|         cp -r "${path_1.default |         cp -r "${path_1.default | ||||||
|  | @ -3021,7 +3026,7 @@ class SetupStep { | ||||||
|             try { |             try { | ||||||
|                 cloud_runner_logger_1.default.log(` `); |                 cloud_runner_logger_1.default.log(` `); | ||||||
|                 cloud_runner_logger_1.default.logLine('Starting step 1/2 (setup game files from repository)'); |                 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().filter((x) => x.step.includes(`setup`)); |                 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
 |                 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 |         apk add git-lfs jq tree zip unzip nodejs -q | ||||||
|         ${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '} |         ${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '} | ||||||
|  | @ -3656,6 +3661,35 @@ class ActionYamlReader { | ||||||
| exports.ActionYamlReader = ActionYamlReader; | exports.ActionYamlReader = ActionYamlReader; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 2263: | ||||||
|  | /***/ (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()); | ||||||
|  |     }); | ||||||
|  | }; | ||||||
|  | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
|  | exports.GenericInputReader = void 0; | ||||||
|  | const cloud_runner_system_1 = __nccwpck_require__(66879); | ||||||
|  | class GenericInputReader { | ||||||
|  |     static Run(command) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             return yield cloud_runner_system_1.CloudRunnerSystem.Run(command); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports.GenericInputReader = GenericInputReader; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 24271: | /***/ 24271: | ||||||
|  | @ -3809,6 +3843,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { | ||||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||||
| 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 generic_input_reader_1 = __nccwpck_require__(2263); | ||||||
| const git_repo_1 = __nccwpck_require__(24271); | const git_repo_1 = __nccwpck_require__(24271); | ||||||
| const github_cli_1 = __nccwpck_require__(44990); | const github_cli_1 = __nccwpck_require__(44990); | ||||||
| const platform_1 = __importDefault(__nccwpck_require__(9707)); | const platform_1 = __importDefault(__nccwpck_require__(9707)); | ||||||
|  | @ -3823,18 +3858,60 @@ class Input { | ||||||
|     static get cloudRunnerTests() { |     static get cloudRunnerTests() { | ||||||
|         return Input.getInput(`cloudRunnerTests`) || Input.getInput(`CloudRunnerTests`) || false; |         return Input.getInput(`cloudRunnerTests`) || Input.getInput(`CloudRunnerTests`) || false; | ||||||
|     } |     } | ||||||
|  |     static shouldUseOverride(query) { | ||||||
|  |         if (Input.readInputOverrideCommand() !== '') { | ||||||
|  |             if (Input.readInputFromOverrideList() !== '') { | ||||||
|  |                 return Input.readInputFromOverrideList().split(', ').includes(query) ? true : false; | ||||||
|  |             } | ||||||
|  |             else { | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     static queryOverride(query) { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (!this.shouldUseOverride(query)) { | ||||||
|  |                 throw new Error(`Should not be trying to run override query on ${query}`); | ||||||
|  |             } | ||||||
|  |             // eslint-disable-next-line func-style
 | ||||||
|  |             const formatFunction = function (format) { | ||||||
|  |                 const arguments_ = Array.prototype.slice.call([query], 1); | ||||||
|  |                 return format.replace(/{(\d+)}/g, function (match, number) { | ||||||
|  |                     return typeof arguments_[number] != 'undefined' ? arguments_[number] : match; | ||||||
|  |                 }); | ||||||
|  |             }; | ||||||
|  |             return yield generic_input_reader_1.GenericInputReader.Run(formatFunction(Input.readInputOverrideCommand())); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     static PopulateQueryOverrideInput() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             const queries = Input.readInputFromOverrideList().split(', '); | ||||||
|  |             Input.queryOverrides = new Array(); | ||||||
|  |             for (const element of queries) { | ||||||
|  |                 if (Input.shouldUseOverride(element)) { | ||||||
|  |                     Input.queryOverrides.Push(yield Input.queryOverride(element)); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|     static getInput(query) { |     static getInput(query) { | ||||||
|         const coreInput = core.getInput(query); |         const coreInput = core.getInput(query); | ||||||
|         if (Input.githubInputEnabled && coreInput && coreInput !== '') { |         if (Input.githubInputEnabled && coreInput && coreInput !== '') { | ||||||
|             return coreInput; |             return coreInput; | ||||||
|         } |         } | ||||||
|         return Input.cliOptions !== undefined && Input.cliOptions[query] !== undefined |         if (Input.cliOptions !== undefined && Input.cliOptions[query] !== undefined) { | ||||||
|             ? Input.cliOptions[query] |             return Input.cliOptions[query]; | ||||||
|             : process.env[query] !== undefined |         } | ||||||
|                 ? process.env[query] |         if (Input.queryOverrides !== undefined && Input.queryOverrides[query] !== undefined) { | ||||||
|                 : process.env[Input.ToEnvVarFormat(query)] |             return Input.queryOverrides[query]; | ||||||
|                     ? process.env[Input.ToEnvVarFormat(query)] |         } | ||||||
|                     : ''; |         if (process.env[query] !== undefined) { | ||||||
|  |             return process.env[query]; | ||||||
|  |         } | ||||||
|  |         if (process.env[Input.ToEnvVarFormat(query)] !== undefined) { | ||||||
|  |             return process.env[Input.ToEnvVarFormat(query)]; | ||||||
|  |         } | ||||||
|  |         return ''; | ||||||
|     } |     } | ||||||
|     static get region() { |     static get region() { | ||||||
|         return Input.getInput('region') || 'eu-west-2'; |         return Input.getInput('region') || 'eu-west-2'; | ||||||
|  | @ -3944,9 +4021,27 @@ class Input { | ||||||
|     } |     } | ||||||
|     static gitPrivateToken() { |     static gitPrivateToken() { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|             return core.getInput('gitPrivateToken') || (yield Input.githubToken()); |             return core.getInput('gitPrivateToken') || (yield github_cli_1.GithubCliReader.GetGitHubAuthToken()) || ''; | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |     static get customJob() { | ||||||
|  |         return Input.getInput('customJob') || ''; | ||||||
|  |     } | ||||||
|  |     static customJobHooks() { | ||||||
|  |         return Input.getInput('customJobHooks') || ''; | ||||||
|  |     } | ||||||
|  |     static cachePushOverrideCommand() { | ||||||
|  |         return Input.getInput('cachePushOverrideCommand') || ''; | ||||||
|  |     } | ||||||
|  |     static cachePullOverrideCommand() { | ||||||
|  |         return Input.getInput('cachePullOverrideCommand') || ''; | ||||||
|  |     } | ||||||
|  |     static readInputFromOverrideList() { | ||||||
|  |         return Input.getInput('readInputFromOverrideList') || ''; | ||||||
|  |     } | ||||||
|  |     static readInputOverrideCommand() { | ||||||
|  |         return Input.getInput('readInputOverrideCommand') || ''; | ||||||
|  |     } | ||||||
|     static get chownFilesTo() { |     static get chownFilesTo() { | ||||||
|         return Input.getInput('chownFilesTo') || ''; |         return Input.getInput('chownFilesTo') || ''; | ||||||
|     } |     } | ||||||
|  | @ -3960,9 +4055,6 @@ class Input { | ||||||
|     static get preBuildSteps() { |     static get preBuildSteps() { | ||||||
|         return Input.getInput('preBuildSteps') || ''; |         return Input.getInput('preBuildSteps') || ''; | ||||||
|     } |     } | ||||||
|     static get customJob() { |  | ||||||
|         return Input.getInput('customJob') || ''; |  | ||||||
|     } |  | ||||||
|     static get awsBaseStackName() { |     static get awsBaseStackName() { | ||||||
|         return Input.getInput('awsBaseStackName') || 'game-ci'; |         return Input.getInput('awsBaseStackName') || 'game-ci'; | ||||||
|     } |     } | ||||||
|  | @ -3975,11 +4067,6 @@ class Input { | ||||||
|     static get cloudRunnerMemory() { |     static get cloudRunnerMemory() { | ||||||
|         return Input.getInput('cloudRunnerMemory') || '750M'; |         return Input.getInput('cloudRunnerMemory') || '750M'; | ||||||
|     } |     } | ||||||
|     static githubToken() { |  | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |  | ||||||
|             return Input.getInput('githubToken') || (yield github_cli_1.GithubCliReader.GetGitHubAuthToken()) || ''; |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|     static get kubeConfig() { |     static get kubeConfig() { | ||||||
|         return Input.getInput('kubeConfig') || ''; |         return Input.getInput('kubeConfig') || ''; | ||||||
|     } |     } | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -36,12 +36,16 @@ class BuildParameters { | ||||||
|   public remoteBuildCluster!: string; |   public remoteBuildCluster!: string; | ||||||
|   public awsStackName!: string; |   public awsStackName!: string; | ||||||
|   public kubeConfig!: string; |   public kubeConfig!: string; | ||||||
|   public githubToken!: string; |  | ||||||
|   public cloudRunnerMemory!: string; |   public cloudRunnerMemory!: string; | ||||||
|   public cloudRunnerCpu!: string; |   public cloudRunnerCpu!: string; | ||||||
|   public kubeVolumeSize!: string; |   public kubeVolumeSize!: string; | ||||||
|   public kubeVolume!: string; |   public kubeVolume!: string; | ||||||
|   public chownFilesTo!: string; |   public chownFilesTo!: string; | ||||||
|  |   public customJobHooks!: string; | ||||||
|  |   public cachePushOverrideCommand!: string; | ||||||
|  |   public cachePullOverrideCommand!: string; | ||||||
|  |   public readInputFromOverrideList!: string; | ||||||
|  |   public readInputOverrideCommand!: string; | ||||||
| 
 | 
 | ||||||
|   public postBuildSteps!: string; |   public postBuildSteps!: string; | ||||||
|   public preBuildSteps!: string; |   public preBuildSteps!: string; | ||||||
|  | @ -64,6 +68,8 @@ class BuildParameters { | ||||||
| 
 | 
 | ||||||
|     const androidSdkManagerParameters = AndroidVersioning.determineSdkManagerParameters(Input.androidTargetSdkVersion); |     const androidSdkManagerParameters = AndroidVersioning.determineSdkManagerParameters(Input.androidTargetSdkVersion); | ||||||
| 
 | 
 | ||||||
|  |     await Input.PopulateQueryOverrideInput(); | ||||||
|  | 
 | ||||||
|     let unitySerial = ''; |     let unitySerial = ''; | ||||||
|     if (!process.env.UNITY_SERIAL) { |     if (!process.env.UNITY_SERIAL) { | ||||||
|       //No serial was present so it is a personal license that we need to convert
 |       //No serial was present so it is a personal license that we need to convert
 | ||||||
|  | @ -107,7 +113,6 @@ class BuildParameters { | ||||||
|       cloudRunnerCluster: Input.cloudRunnerCluster, |       cloudRunnerCluster: Input.cloudRunnerCluster, | ||||||
|       awsBaseStackName: Input.awsBaseStackName, |       awsBaseStackName: Input.awsBaseStackName, | ||||||
|       kubeConfig: Input.kubeConfig, |       kubeConfig: Input.kubeConfig, | ||||||
|       githubToken: await Input.githubToken(), |  | ||||||
|       cloudRunnerMemory: Input.cloudRunnerMemory, |       cloudRunnerMemory: Input.cloudRunnerMemory, | ||||||
|       cloudRunnerCpu: Input.cloudRunnerCpu, |       cloudRunnerCpu: Input.cloudRunnerCpu, | ||||||
|       kubeVolumeSize: Input.kubeVolumeSize, |       kubeVolumeSize: Input.kubeVolumeSize, | ||||||
|  | @ -123,6 +128,11 @@ class BuildParameters { | ||||||
|       gitSha: Input.gitSha, |       gitSha: Input.gitSha, | ||||||
|       logId: customAlphabet(CloudRunnerConstants.alphabet, 9)(), |       logId: customAlphabet(CloudRunnerConstants.alphabet, 9)(), | ||||||
|       buildGuid: CloudRunnerNamespace.generateBuildName(Input.runNumber, Input.targetPlatform), |       buildGuid: CloudRunnerNamespace.generateBuildName(Input.runNumber, Input.targetPlatform), | ||||||
|  |       customJobHooks: Input.customJobHooks(), | ||||||
|  |       cachePullOverrideCommand: Input.cachePullOverrideCommand(), | ||||||
|  |       cachePushOverrideCommand: Input.cachePushOverrideCommand(), | ||||||
|  |       readInputOverrideCommand: Input.readInputOverrideCommand(), | ||||||
|  |       readInputFromOverrideList: Input.readInputFromOverrideList(), | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -38,8 +38,8 @@ 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 (process.env.CLOUD_RUNNER_PRE_CACHE_PUSH) { |       if (CloudRunnerState.buildParams.cachePushOverrideCommand) { | ||||||
|         CloudRunnerSystem.Run(formatFunction(process.env.CLOUD_RUNNER_PRE_CACHE_PUSH)); |         CloudRunnerSystem.Run(formatFunction(CloudRunnerState.buildParams.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}`); | ||||||
|  | @ -86,8 +86,8 @@ export class Caching { | ||||||
|         }); |         }); | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       if (process.env.CLOUD_RUNNER_PRE_CACHE_PULL) { |       if (CloudRunnerState.buildParams.cachePullOverrideCommand) { | ||||||
|         CloudRunnerSystem.Run(formatFunction(process.env.CLOUD_RUNNER_PRE_CACHE_PULL)); |         CloudRunnerSystem.Run(formatFunction(CloudRunnerState.buildParams.cachePullOverrideCommand)); | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       if (fs.existsSync(`${cacheSelection}.zip`)) { |       if (fs.existsSync(`${cacheSelection}.zip`)) { | ||||||
|  |  | ||||||
|  | @ -4,7 +4,9 @@ import CloudRunnerSecret from './cloud-runner-secret'; | ||||||
| 
 | 
 | ||||||
| export class CloudRunnerBuildCommandProcessor { | export class CloudRunnerBuildCommandProcessor { | ||||||
|   public static ProcessCommands(commands: string, buildParameters: BuildParameters): string { |   public static ProcessCommands(commands: string, buildParameters: BuildParameters): string { | ||||||
|     const hooks = CloudRunnerBuildCommandProcessor.getHooks().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" | ||||||
|  | @ -18,8 +20,8 @@ export class CloudRunnerBuildCommandProcessor { | ||||||
|     `;
 |     `;
 | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public static getHooks(): Hook[] { |   public static getHooks(customJobHooks): Hook[] { | ||||||
|     const experimentHooks = process.env.EXPERIMENTAL_HOOKS; |     const experimentHooks = customJobHooks; | ||||||
|     let output = new Array<Hook>(); |     let output = new Array<Hook>(); | ||||||
|     if (experimentHooks && experimentHooks !== '') { |     if (experimentHooks && experimentHooks !== '') { | ||||||
|       try { |       try { | ||||||
|  |  | ||||||
|  | @ -27,7 +27,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(); |     const configurableHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.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
 | ||||||
|  |  | ||||||
|  | @ -64,11 +64,11 @@ export class CloudRunnerState { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public static get unityBuilderRepoUrl(): string { |   public static get unityBuilderRepoUrl(): string { | ||||||
|     return `https://${CloudRunnerState.buildParams.githubToken}@github.com/game-ci/unity-builder.git`; |     return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/game-ci/unity-builder.git`; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public static get targetBuildRepoUrl(): string { |   public static get targetBuildRepoUrl(): string { | ||||||
|     return `https://${CloudRunnerState.buildParams.githubToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`; |     return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   public static get buildVolumeFolder() { |   public static get buildVolumeFolder() { | ||||||
|  |  | ||||||
|  | @ -24,7 +24,9 @@ export class BuildStep implements StepInterface { | ||||||
|   ) { |   ) { | ||||||
|     CloudRunnerLogger.logLine(` `); |     CloudRunnerLogger.logLine(` `); | ||||||
|     CloudRunnerLogger.logLine('Starting part 2/2 (build unity project)'); |     CloudRunnerLogger.logLine('Starting part 2/2 (build unity project)'); | ||||||
|     const hooks = CloudRunnerBuildCommandProcessor.getHooks().filter((x) => x.step.includes(`setup`)); |     const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks).filter((x) => | ||||||
|  |       x.step.includes(`setup`), | ||||||
|  |     ); | ||||||
|     return await CloudRunnerState.CloudRunnerProviderPlatform.runTask( |     return await CloudRunnerState.CloudRunnerProviderPlatform.runTask( | ||||||
|       CloudRunnerState.buildParams.buildGuid, |       CloudRunnerState.buildParams.buildGuid, | ||||||
|       image, |       image, | ||||||
|  |  | ||||||
|  | @ -35,7 +35,9 @@ export class SetupStep implements StepInterface { | ||||||
|     try { |     try { | ||||||
|       CloudRunnerLogger.log(` `); |       CloudRunnerLogger.log(` `); | ||||||
|       CloudRunnerLogger.logLine('Starting step 1/2 (setup game files from repository)'); |       CloudRunnerLogger.logLine('Starting step 1/2 (setup game files from repository)'); | ||||||
|       const hooks = CloudRunnerBuildCommandProcessor.getHooks().filter((x) => x.step.includes(`setup`)); |       const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks).filter((x) => | ||||||
|  |         x.step.includes(`setup`), | ||||||
|  |       ); | ||||||
|       return await CloudRunnerState.CloudRunnerProviderPlatform.runTask( |       return await CloudRunnerState.CloudRunnerProviderPlatform.runTask( | ||||||
|         CloudRunnerState.buildParams.buildGuid, |         CloudRunnerState.buildParams.buildGuid, | ||||||
|         image, |         image, | ||||||
|  |  | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | import { CloudRunnerSystem } from '../cli/remote-client/remote-client-services/cloud-runner-system'; | ||||||
|  | 
 | ||||||
|  | export class GenericInputReader { | ||||||
|  |   public static async Run(command) { | ||||||
|  |     return await CloudRunnerSystem.Run(command); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| import fs from 'fs'; | import fs from 'fs'; | ||||||
| import path from 'path'; | import path from 'path'; | ||||||
|  | import { GenericInputReader } from './input-readers/generic-input-reader'; | ||||||
| import { GitRepoReader } from './input-readers/git-repo'; | import { GitRepoReader } from './input-readers/git-repo'; | ||||||
| import { GithubCliReader } from './input-readers/github-cli'; | import { GithubCliReader } from './input-readers/github-cli'; | ||||||
| import Platform from './platform'; | import Platform from './platform'; | ||||||
|  | @ -13,25 +14,70 @@ const core = require('@actions/core'); | ||||||
|  */ |  */ | ||||||
| class Input { | class Input { | ||||||
|   public static cliOptions; |   public static cliOptions; | ||||||
|  |   public static queryOverrides; | ||||||
|   public static githubInputEnabled: boolean = true; |   public static githubInputEnabled: boolean = true; | ||||||
| 
 | 
 | ||||||
|   // also enabled debug logging for cloud runner
 |   // also enabled debug logging for cloud runner
 | ||||||
|   static get cloudRunnerTests(): boolean { |   static get cloudRunnerTests(): boolean { | ||||||
|     return Input.getInput(`cloudRunnerTests`) || Input.getInput(`CloudRunnerTests`) || false; |     return Input.getInput(`cloudRunnerTests`) || Input.getInput(`CloudRunnerTests`) || false; | ||||||
|   } |   } | ||||||
|  |   private static shouldUseOverride(query) { | ||||||
|  |     if (Input.readInputOverrideCommand() !== '') { | ||||||
|  |       if (Input.readInputFromOverrideList() !== '') { | ||||||
|  |         return Input.readInputFromOverrideList().split(', ').includes(query) ? true : false; | ||||||
|  |       } else { | ||||||
|  |         return true; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private static async queryOverride(query) { | ||||||
|  |     if (!this.shouldUseOverride(query)) { | ||||||
|  |       throw new Error(`Should not be trying to run override query on ${query}`); | ||||||
|  |     } | ||||||
|  |     // eslint-disable-next-line func-style
 | ||||||
|  |     const formatFunction = function (format: string) { | ||||||
|  |       const arguments_ = Array.prototype.slice.call([query], 1); | ||||||
|  |       return format.replace(/{(\d+)}/g, function (match, number) { | ||||||
|  |         return typeof arguments_[number] != 'undefined' ? arguments_[number] : match; | ||||||
|  |       }); | ||||||
|  |     }; | ||||||
|  |     return await GenericInputReader.Run(formatFunction(Input.readInputOverrideCommand())); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public static async PopulateQueryOverrideInput() { | ||||||
|  |     const queries = Input.readInputFromOverrideList().split(', '); | ||||||
|  |     Input.queryOverrides = new Array(); | ||||||
|  |     for (const element of queries) { | ||||||
|  |       if (Input.shouldUseOverride(element)) { | ||||||
|  |         Input.queryOverrides.Push(await Input.queryOverride(element)); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private static getInput(query) { |   private static getInput(query) { | ||||||
|     const coreInput = core.getInput(query); |     const coreInput = core.getInput(query); | ||||||
|     if (Input.githubInputEnabled && coreInput && coreInput !== '') { |     if (Input.githubInputEnabled && coreInput && coreInput !== '') { | ||||||
|       return coreInput; |       return coreInput; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return Input.cliOptions !== undefined && Input.cliOptions[query] !== undefined |     if (Input.cliOptions !== undefined && Input.cliOptions[query] !== undefined) { | ||||||
|       ? Input.cliOptions[query] |       return Input.cliOptions[query]; | ||||||
|       : process.env[query] !== undefined |     } | ||||||
|       ? process.env[query] | 
 | ||||||
|       : process.env[Input.ToEnvVarFormat(query)] |     if (Input.queryOverrides !== undefined && Input.queryOverrides[query] !== undefined) { | ||||||
|       ? process.env[Input.ToEnvVarFormat(query)] |       return Input.queryOverrides[query]; | ||||||
|       : ''; |     } | ||||||
|  | 
 | ||||||
|  |     if (process.env[query] !== undefined) { | ||||||
|  |       return process.env[query]; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (process.env[Input.ToEnvVarFormat(query)] !== undefined) { | ||||||
|  |       return process.env[Input.ToEnvVarFormat(query)]; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return ''; | ||||||
|   } |   } | ||||||
|   static get region(): string { |   static get region(): string { | ||||||
|     return Input.getInput('region') || 'eu-west-2'; |     return Input.getInput('region') || 'eu-west-2'; | ||||||
|  | @ -155,7 +201,31 @@ class Input { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static async gitPrivateToken() { |   static async gitPrivateToken() { | ||||||
|     return core.getInput('gitPrivateToken') || (await Input.githubToken()); |     return core.getInput('gitPrivateToken') || (await GithubCliReader.GetGitHubAuthToken()) || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static get customJob() { | ||||||
|  |     return Input.getInput('customJob') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static customJobHooks() { | ||||||
|  |     return Input.getInput('customJobHooks') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static cachePushOverrideCommand() { | ||||||
|  |     return Input.getInput('cachePushOverrideCommand') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static cachePullOverrideCommand() { | ||||||
|  |     return Input.getInput('cachePullOverrideCommand') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static readInputFromOverrideList() { | ||||||
|  |     return Input.getInput('readInputFromOverrideList') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static readInputOverrideCommand() { | ||||||
|  |     return Input.getInput('readInputOverrideCommand') || ''; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get chownFilesTo() { |   static get chownFilesTo() { | ||||||
|  | @ -176,10 +246,6 @@ class Input { | ||||||
|     return Input.getInput('preBuildSteps') || ''; |     return Input.getInput('preBuildSteps') || ''; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get customJob() { |  | ||||||
|     return Input.getInput('customJob') || ''; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   static get awsBaseStackName() { |   static get awsBaseStackName() { | ||||||
|     return Input.getInput('awsBaseStackName') || 'game-ci'; |     return Input.getInput('awsBaseStackName') || 'game-ci'; | ||||||
|   } |   } | ||||||
|  | @ -196,10 +262,6 @@ class Input { | ||||||
|     return Input.getInput('cloudRunnerMemory') || '750M'; |     return Input.getInput('cloudRunnerMemory') || '750M'; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static async githubToken() { |  | ||||||
|     return Input.getInput('githubToken') || (await GithubCliReader.GetGitHubAuthToken()) || ''; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   static get kubeConfig() { |   static get kubeConfig() { | ||||||
|     return Input.getInput('kubeConfig') || ''; |     return Input.getInput('kubeConfig') || ''; | ||||||
|   } |   } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue