Correct test and implement dependency health check and start

pull/353/head
Frostebite 2022-03-14 23:14:38 +00:00
parent 8f516da4da
commit 73149fb464
7 changed files with 103 additions and 3 deletions

View File

@ -154,6 +154,15 @@ inputs:
default: '5Gi'
required: false
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:
volume:
description: 'The Persistent Volume (PV) where the build artifacts have been stored by Kubernetes'

57
dist/index.js vendored
View File

@ -1918,6 +1918,7 @@ const kubernetes_job_spec_factory_1 = __importDefault(__nccwpck_require__(1739))
const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915));
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859));
const depdency_override_service_1 = __importDefault(__nccwpck_require__(69862));
class Kubernetes {
constructor(buildParameters) {
this.buildGuid = '';
@ -1947,6 +1948,9 @@ class Kubernetes {
this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
this.serviceAccountName = `service-account-${buildGuid}`;
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_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient);
}
@ -2834,6 +2838,53 @@ class 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:
@ -4183,6 +4234,12 @@ class Input {
static get kubeStorageClass() {
return Input.getInput('kubeStorageClass') || '';
}
static get checkDependencyHealthOverride() {
return Input.getInput('checkDependencyHealthOverride') || '';
}
static get startDependenciesOverride() {
return Input.getInput('startDependenciesOverride') || '';
}
static ToEnvVarFormat(input) {
return input
.replace(/([A-Z])/g, ' $1')

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -60,9 +60,10 @@ describe('Cloud Runner', () => {
const buildParameter = await BuildParameters.create();
const baseImage = new ImageTag(buildParameter);
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());
expect(results2).toContain('library included');
expect(results2).toEqual(expect.not.stringContaining(libraryString));
Input.githubInputEnabled = true;
}, 1000000);
}

View File

@ -13,6 +13,7 @@ import KubernetesServiceAccount from './kubernetes-service-account';
import CloudRunnerLogger from '../services/cloud-runner-logger';
import { CoreV1Api } from '@kubernetes/client-node';
import KubernetesRook from './kubernetes-rook';
import DependencyOverrideService from '../services/depdency-override-service';
class Kubernetes implements CloudRunnerProviderInterface {
private kubeConfig: k8s.KubeConfig;
@ -52,6 +53,9 @@ class Kubernetes implements CloudRunnerProviderInterface {
this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
this.serviceAccountName = `service-account-${buildGuid}`;
await KubernetesRook.InitRook(buildParameters.kubeStorageClass);
if (await DependencyOverrideService.CheckHealth()) {
await DependencyOverrideService.TryStartDependencies();
}
await KubernetesStorage.createPersistentVolumeClaim(
buildParameters,
this.pvcName,

View File

@ -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;

View File

@ -279,6 +279,14 @@ class Input {
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) {
return input
.replace(/([A-Z])/g, ' $1')