Correct test and implement dependency health check and start
							parent
							
								
									8f516da4da
								
							
						
					
					
						commit
						73149fb464
					
				|  | @ -154,6 +154,15 @@ inputs: | ||||||
|     default: '5Gi' |     default: '5Gi' | ||||||
|     required: false |     required: false | ||||||
|     description: 'Amount of disc space to assign the Kubernetes Persistent Volume' |     description: 'Amount of disc space to assign the Kubernetes Persistent Volume' | ||||||
|  |   # To Do - enables resilience | ||||||
|  |   # checkDependencyHealthOverride: | ||||||
|  |   #   default: '' | ||||||
|  |   #   required: false | ||||||
|  |   #   description: 'Use to specify a way to check depdency services health to enable resilient self-starting jobs' | ||||||
|  |   # startDependenciesOverride: | ||||||
|  |   #   default: '' | ||||||
|  |   #   required: false | ||||||
|  |   #   description: 'Use to specify a way to start depdency services health to enable resilient self-starting jobs' | ||||||
| outputs: | outputs: | ||||||
|   volume: |   volume: | ||||||
|     description: 'The Persistent Volume (PV) where the build artifacts have been stored by Kubernetes' |     description: 'The Persistent Volume (PV) where the build artifacts have been stored by Kubernetes' | ||||||
|  |  | ||||||
|  | @ -1918,6 +1918,7 @@ const kubernetes_job_spec_factory_1 = __importDefault(__nccwpck_require__(1739)) | ||||||
| const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915)); | const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915)); | ||||||
| const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | ||||||
| const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859)); | const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859)); | ||||||
|  | const depdency_override_service_1 = __importDefault(__nccwpck_require__(69862)); | ||||||
| class Kubernetes { | class Kubernetes { | ||||||
|     constructor(buildParameters) { |     constructor(buildParameters) { | ||||||
|         this.buildGuid = ''; |         this.buildGuid = ''; | ||||||
|  | @ -1947,6 +1948,9 @@ class Kubernetes { | ||||||
|                 this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; |                 this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; | ||||||
|                 this.serviceAccountName = `service-account-${buildGuid}`; |                 this.serviceAccountName = `service-account-${buildGuid}`; | ||||||
|                 yield kubernetes_rook_1.default.InitRook(buildParameters.kubeStorageClass); |                 yield kubernetes_rook_1.default.InitRook(buildParameters.kubeStorageClass); | ||||||
|  |                 if (yield depdency_override_service_1.default.CheckHealth()) { | ||||||
|  |                     yield depdency_override_service_1.default.TryStartDependencies(); | ||||||
|  |                 } | ||||||
|                 yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace); |                 yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace); | ||||||
|                 yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient); |                 yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient); | ||||||
|             } |             } | ||||||
|  | @ -2834,6 +2838,53 @@ class CloudRunnerNamespace { | ||||||
| exports["default"] = CloudRunnerNamespace; | exports["default"] = CloudRunnerNamespace; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /***/ }), | ||||||
|  | 
 | ||||||
|  | /***/ 69862: | ||||||
|  | /***/ (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 })); | ||||||
|  | const cloud_runner_system_1 = __nccwpck_require__(66879); | ||||||
|  | const input_1 = __importDefault(__nccwpck_require__(91933)); | ||||||
|  | class DependencyOverrideService { | ||||||
|  |     static CheckHealth() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (input_1.default.checkDependencyHealthOverride) { | ||||||
|  |                 try { | ||||||
|  |                     yield cloud_runner_system_1.CloudRunnerSystem.Run(input_1.default.checkDependencyHealthOverride); | ||||||
|  |                 } | ||||||
|  |                 catch (_a) { | ||||||
|  |                     return false; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             return true; | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  |     static TryStartDependencies() { | ||||||
|  |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  |             if (input_1.default.startDependenciesOverride) { | ||||||
|  |                 yield cloud_runner_system_1.CloudRunnerSystem.Run(input_1.default.startDependenciesOverride); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | exports["default"] = DependencyOverrideService; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| /***/ }), | /***/ }), | ||||||
| 
 | 
 | ||||||
| /***/ 35346: | /***/ 35346: | ||||||
|  | @ -4183,6 +4234,12 @@ class Input { | ||||||
|     static get kubeStorageClass() { |     static get kubeStorageClass() { | ||||||
|         return Input.getInput('kubeStorageClass') || ''; |         return Input.getInput('kubeStorageClass') || ''; | ||||||
|     } |     } | ||||||
|  |     static get checkDependencyHealthOverride() { | ||||||
|  |         return Input.getInput('checkDependencyHealthOverride') || ''; | ||||||
|  |     } | ||||||
|  |     static get startDependenciesOverride() { | ||||||
|  |         return Input.getInput('startDependenciesOverride') || ''; | ||||||
|  |     } | ||||||
|     static ToEnvVarFormat(input) { |     static ToEnvVarFormat(input) { | ||||||
|         return input |         return input | ||||||
|             .replace(/([A-Z])/g, ' $1') |             .replace(/([A-Z])/g, ' $1') | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -60,9 +60,10 @@ describe('Cloud Runner', () => { | ||||||
|       const buildParameter = await BuildParameters.create(); |       const buildParameter = await BuildParameters.create(); | ||||||
|       const baseImage = new ImageTag(buildParameter); |       const baseImage = new ImageTag(buildParameter); | ||||||
|       const results = await CloudRunner.run(buildParameter, baseImage.toString()); |       const results = await CloudRunner.run(buildParameter, baseImage.toString()); | ||||||
|       expect(results).toContain('library not included'); |       const libraryString = 'Rebuilding Library because the asset database could not be found!'; | ||||||
|  |       expect(results).toContain(libraryString); | ||||||
|       const results2 = await CloudRunner.run(buildParameter, baseImage.toString()); |       const results2 = await CloudRunner.run(buildParameter, baseImage.toString()); | ||||||
|       expect(results2).toContain('library included'); |       expect(results2).toEqual(expect.not.stringContaining(libraryString)); | ||||||
|       Input.githubInputEnabled = true; |       Input.githubInputEnabled = true; | ||||||
|     }, 1000000); |     }, 1000000); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ import KubernetesServiceAccount from './kubernetes-service-account'; | ||||||
| import CloudRunnerLogger from '../services/cloud-runner-logger'; | import CloudRunnerLogger from '../services/cloud-runner-logger'; | ||||||
| import { CoreV1Api } from '@kubernetes/client-node'; | import { CoreV1Api } from '@kubernetes/client-node'; | ||||||
| import KubernetesRook from './kubernetes-rook'; | import KubernetesRook from './kubernetes-rook'; | ||||||
|  | import DependencyOverrideService from '../services/depdency-override-service'; | ||||||
| 
 | 
 | ||||||
| class Kubernetes implements CloudRunnerProviderInterface { | class Kubernetes implements CloudRunnerProviderInterface { | ||||||
|   private kubeConfig: k8s.KubeConfig; |   private kubeConfig: k8s.KubeConfig; | ||||||
|  | @ -52,6 +53,9 @@ class Kubernetes implements CloudRunnerProviderInterface { | ||||||
|       this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; |       this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; | ||||||
|       this.serviceAccountName = `service-account-${buildGuid}`; |       this.serviceAccountName = `service-account-${buildGuid}`; | ||||||
|       await KubernetesRook.InitRook(buildParameters.kubeStorageClass); |       await KubernetesRook.InitRook(buildParameters.kubeStorageClass); | ||||||
|  |       if (await DependencyOverrideService.CheckHealth()) { | ||||||
|  |         await DependencyOverrideService.TryStartDependencies(); | ||||||
|  |       } | ||||||
|       await KubernetesStorage.createPersistentVolumeClaim( |       await KubernetesStorage.createPersistentVolumeClaim( | ||||||
|         buildParameters, |         buildParameters, | ||||||
|         this.pvcName, |         this.pvcName, | ||||||
|  |  | ||||||
|  | @ -0,0 +1,21 @@ | ||||||
|  | import { CloudRunnerSystem } from '../../cli/remote-client/remote-client-services/cloud-runner-system'; | ||||||
|  | import Input from '../../input'; | ||||||
|  | 
 | ||||||
|  | class DependencyOverrideService { | ||||||
|  |   public static async CheckHealth() { | ||||||
|  |     if (Input.checkDependencyHealthOverride) { | ||||||
|  |       try { | ||||||
|  |         await CloudRunnerSystem.Run(Input.checkDependencyHealthOverride); | ||||||
|  |       } catch { | ||||||
|  |         return false; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     return true; | ||||||
|  |   } | ||||||
|  |   public static async TryStartDependencies() { | ||||||
|  |     if (Input.startDependenciesOverride) { | ||||||
|  |       await CloudRunnerSystem.Run(Input.startDependenciesOverride); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | export default DependencyOverrideService; | ||||||
|  | @ -279,6 +279,14 @@ class Input { | ||||||
|     return Input.getInput('kubeStorageClass') || ''; |     return Input.getInput('kubeStorageClass') || ''; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   static get checkDependencyHealthOverride(): string { | ||||||
|  |     return Input.getInput('checkDependencyHealthOverride') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static get startDependenciesOverride(): string { | ||||||
|  |     return Input.getInput('startDependenciesOverride') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   public static ToEnvVarFormat(input: string) { |   public static ToEnvVarFormat(input: string) { | ||||||
|     return input |     return input | ||||||
|       .replace(/([A-Z])/g, ' $1') |       .replace(/([A-Z])/g, ' $1') | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue