refactoring workflows

pull/310/head
Frostebite 2021-10-06 02:19:42 +01:00
parent 7f2f4312ea
commit 994d8aac5c
13 changed files with 296 additions and 306 deletions

364
dist/index.js vendored
View File

@ -1069,6 +1069,75 @@ exports.AWSTemplates = AWSTemplates;
"use strict"; "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 aws_build_platform_1 = __importDefault(__webpack_require__(81683));
const cloud_runner_namespace_1 = __importDefault(__webpack_require__(63287));
const cloud_runner_state_1 = __webpack_require__(70912);
const kubernetes_build_platform_1 = __importDefault(__webpack_require__(10471));
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
const cloud_runner_step_state_1 = __webpack_require__(64854);
const workflow_composition_root_1 = __webpack_require__(54204);
const cloud_runner_error_1 = __webpack_require__(2600);
class CloudRunner {
static setup(buildParameters) {
cloud_runner_logger_1.default.setup();
cloud_runner_state_1.CloudRunnerState.buildGuid = cloud_runner_namespace_1.default.generateBuildName(cloud_runner_state_1.CloudRunnerState.readRunNumber(), buildParameters.platform);
cloud_runner_state_1.CloudRunnerState.buildParams = buildParameters;
cloud_runner_state_1.CloudRunnerState.setupBranchName();
cloud_runner_state_1.CloudRunnerState.setupFolderVariables();
cloud_runner_state_1.CloudRunnerState.setupDefaultSecrets();
CloudRunner.setupBuildPlatform();
}
static setupBuildPlatform() {
switch (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCluster) {
case 'aws':
cloud_runner_logger_1.default.log('Building with AWS');
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new aws_build_platform_1.default(cloud_runner_state_1.CloudRunnerState.buildParams);
break;
default:
case 'k8s':
cloud_runner_logger_1.default.log('Building with Kubernetes');
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new kubernetes_build_platform_1.default(cloud_runner_state_1.CloudRunnerState.buildParams);
break;
}
}
static run(buildParameters, baseImage) {
return __awaiter(this, void 0, void 0, function* () {
CloudRunner.setup(buildParameters);
try {
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.setupSharedBuildResources(cloud_runner_state_1.CloudRunnerState.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
yield new workflow_composition_root_1.WorkflowCompositionRoot().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources(cloud_runner_state_1.CloudRunnerState.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
}
catch (error) {
yield cloud_runner_error_1.CloudRunnerError.handleException(error);
throw error;
}
});
}
}
exports.default = CloudRunner;
/***/ }),
/***/ 2600:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k; if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
@ -1101,88 +1170,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
const aws_build_platform_1 = __importDefault(__webpack_require__(81683)); exports.CloudRunnerError = void 0;
const core = __importStar(__webpack_require__(42186));
const cloud_runner_namespace_1 = __importDefault(__webpack_require__(63287));
const cloud_runner_state_1 = __webpack_require__(70912);
const kubernetes_build_platform_1 = __importDefault(__webpack_require__(10471));
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855)); const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
const build_step_1 = __webpack_require__(91491); const cloud_runner_state_1 = __webpack_require__(70912);
const compression_step_1 = __webpack_require__(6400); const core = __importStar(__webpack_require__(42186));
const download_repository_step_1 = __webpack_require__(12929); class CloudRunnerError {
const custom_step_1 = __webpack_require__(14377);
const ephemeral_github_runner_step_1 = __webpack_require__(23795);
const cloud_runner_step_state_1 = __webpack_require__(64854);
class CloudRunner {
static setup(buildParameters) {
cloud_runner_logger_1.default.setup();
cloud_runner_state_1.CloudRunnerState.buildGuid = cloud_runner_namespace_1.default.generateBuildName(cloud_runner_state_1.CloudRunnerState.readRunNumber(), buildParameters.platform);
cloud_runner_state_1.CloudRunnerState.buildParams = buildParameters;
cloud_runner_state_1.CloudRunnerState.setupBranchName();
cloud_runner_state_1.CloudRunnerState.setupFolderVariables();
cloud_runner_state_1.CloudRunnerState.setupDefaultSecrets();
CloudRunner.setupBuildPlatform();
}
static setupBuildPlatform() {
switch (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCluster) {
case 'aws':
cloud_runner_logger_1.default.log('Building with AWS');
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new aws_build_platform_1.default(cloud_runner_state_1.CloudRunnerState.buildParams);
break;
default:
case 'k8s':
cloud_runner_logger_1.default.log('Building with Kubernetes');
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new kubernetes_build_platform_1.default(cloud_runner_state_1.CloudRunnerState.buildParams);
break;
}
}
static run(buildParameters, baseImage) {
return __awaiter(this, void 0, void 0, function* () {
CloudRunner.setup(buildParameters);
try {
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.setupSharedBuildResources(cloud_runner_state_1.CloudRunnerState.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
yield CloudRunner.runJob(baseImage.toString());
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources(cloud_runner_state_1.CloudRunnerState.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
}
catch (error) {
yield CloudRunner.handleException(error);
throw error;
}
});
}
static runJob(baseImage) {
return __awaiter(this, void 0, void 0, function* () {
core.info(`Custom build steps: ${cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps}`);
if (cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps === '') {
yield CloudRunner.standardBuildAutomation(baseImage);
}
else if (cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps === 'ephemeral') {
yield new ephemeral_github_runner_step_1.EphemeralGitHubRunnerStep().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
}
else if (cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps === 'download') {
yield new download_repository_step_1.DownloadRepositoryStep().run(new cloud_runner_step_state_1.CloudRunnerStepState('alpine/git', cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
}
else {
yield custom_step_1.CustomStep.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps);
}
});
}
static standardBuildAutomation(baseImage) {
return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.log(`Cloud Runner is running standard build automation`);
yield new download_repository_step_1.DownloadRepositoryStep().run(new cloud_runner_step_state_1.CloudRunnerStepState('alpine/git', cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
cloud_runner_logger_1.default.logWithTime('Download repository step time');
yield custom_step_1.CustomStep.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.preBuildSteps);
cloud_runner_logger_1.default.logWithTime('Pre build step(s) time');
new build_step_1.BuildStep().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
cloud_runner_logger_1.default.logWithTime('Build time');
yield new compression_step_1.CompressionStep().run(new cloud_runner_step_state_1.CloudRunnerStepState('alpine', cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
cloud_runner_logger_1.default.logWithTime('Compression time');
yield custom_step_1.CustomStep.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.postBuildSteps);
cloud_runner_logger_1.default.logWithTime('Post build step(s) time');
cloud_runner_logger_1.default.log(`Cloud Runner finished running standard build automation`);
});
}
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));
@ -1191,7 +1183,7 @@ class CloudRunner {
}); });
} }
} }
exports.default = CloudRunner; exports.CloudRunnerError = CloudRunnerError;
/***/ }), /***/ }),
@ -2172,126 +2164,6 @@ class CloudRunnerStepState {
exports.CloudRunnerStepState = CloudRunnerStepState; exports.CloudRunnerStepState = CloudRunnerStepState;
/***/ }),
/***/ 91491:
/***/ (function(__unused_webpack_module, exports, __webpack_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 cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
const cloud_runner_state_1 = __webpack_require__(70912);
class BuildStep {
run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () {
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.log('Starting part 2/4 (build unity project)');
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runBuildTask(cloud_runner_state_1.CloudRunnerState.buildGuid, image, [
`
printenv
export GITHUB_WORKSPACE="${cloud_runner_state_1.CloudRunnerState.repoPathFull}"
cp -r "${cloud_runner_state_1.CloudRunnerState.builderPathFull}/dist/default-build-script/" "/UnityBuilderAction"
cp -r "${cloud_runner_state_1.CloudRunnerState.builderPathFull}/dist/entrypoint.sh" "/entrypoint.sh"
cp -r "${cloud_runner_state_1.CloudRunnerState.builderPathFull}/dist/steps/" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
${process.env.DEBUG ? '' : '#'}tree -L 4 "${cloud_runner_state_1.CloudRunnerState.buildPathFull}"
${process.env.DEBUG ? '' : '#'}ls -lh "/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}"
`,
], `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.projectPathFull}`, environmentVariables, secrets);
});
}
}
exports.BuildStep = BuildStep;
/***/ }),
/***/ 6400:
/***/ (function(__unused_webpack_module, exports, __webpack_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.CompressionStep = void 0;
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
const cloud_runner_state_1 = __webpack_require__(70912);
class CompressionStep {
run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () {
yield CompressionStep.CompressionStep(cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
});
}
static CompressionStep(environmentVariables, secrets) {
return __awaiter(this, void 0, void 0, function* () {
cloud_runner_logger_1.default.log('Starting step 3/4 build compression');
// Cleanup
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runBuildTask(cloud_runner_state_1.CloudRunnerState.buildGuid, 'alpine', [
`
printenv
apk update -q
apk add zip tree -q
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
cd "$libraryFolderFull/.."
zip -r "lib-$BUILDID.zip" "./Library"
mv "lib-$BUILDID.zip" "/$cacheFolderFull/lib"
cd "$repoPathFull"
ls -lh "$repoPathFull"
zip -r "build-$BUILDID.zip" "./${cloud_runner_state_1.CloudRunnerState.buildParams.buildPath}"
mv "build-$BUILDID.zip" "/$cacheFolderFull/build-$BUILDID.zip"
${process.env.DEBUG ? '' : '#'}tree -L 4 "/$cacheFolderFull"
${process.env.DEBUG ? '' : '#'}tree -L 4 "/$cacheFolderFull/.."
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
`,
], `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, [
...environmentVariables,
...[
{
name: 'cacheFolderFull',
value: cloud_runner_state_1.CloudRunnerState.cacheFolderFull,
},
],
], secrets);
cloud_runner_logger_1.default.log('compression step complete');
});
}
}
exports.CompressionStep = CompressionStep;
/***/ }), /***/ }),
/***/ 12929: /***/ 12929:
@ -2349,7 +2221,7 @@ exports.DownloadRepositoryStep = DownloadRepositoryStep;
/***/ }), /***/ }),
/***/ 14377: /***/ 3786:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) { /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -2367,11 +2239,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CustomStep = void 0; exports.CustomWorkflow = void 0;
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855)); const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
const cloud_runner_state_1 = __webpack_require__(70912); const cloud_runner_state_1 = __webpack_require__(70912);
const yaml_1 = __importDefault(__webpack_require__(13552)); const yaml_1 = __importDefault(__webpack_require__(13552));
class CustomStep { class CustomWorkflow {
static runCustomJob(buildSteps) { static runCustomJob(buildSteps) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
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`);
@ -2390,12 +2262,12 @@ class CustomStep {
}); });
} }
} }
exports.CustomStep = CustomStep; exports.CustomWorkflow = CustomWorkflow;
/***/ }), /***/ }),
/***/ 23795: /***/ 37092:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) { /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict"; "use strict";
@ -2413,13 +2285,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.EphemeralGitHubRunnerStep = void 0; exports.EphemeralGitHubRunnerWorkflow = void 0;
const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855)); const cloud_runner_logger_1 = __importDefault(__webpack_require__(22855));
const cloud_runner_state_1 = __webpack_require__(70912); const cloud_runner_state_1 = __webpack_require__(70912);
class EphemeralGitHubRunnerStep { class EphemeralGitHubRunnerWorkflow {
run(cloudRunnerStepState) { run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
yield EphemeralGitHubRunnerStep.runJobAsEphemeralGitHubRunner(cloudRunnerStepState.image, cloudRunnerStepState.environment, cloudRunnerStepState.secrets); yield EphemeralGitHubRunnerWorkflow.runJobAsEphemeralGitHubRunner(cloudRunnerStepState.image, cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
}); });
} }
static runJobAsEphemeralGitHubRunner(image, environmentVariables, secrets) { static runJobAsEphemeralGitHubRunner(image, environmentVariables, secrets) {
@ -2430,7 +2302,77 @@ class EphemeralGitHubRunnerStep {
}); });
} }
} }
exports.EphemeralGitHubRunnerStep = EphemeralGitHubRunnerStep; exports.EphemeralGitHubRunnerWorkflow = EphemeralGitHubRunnerWorkflow;
/***/ }),
/***/ 54204:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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.WorkflowCompositionRoot = void 0;
const cloud_runner_state_1 = __webpack_require__(70912);
const cloud_runner_step_state_1 = __webpack_require__(64854);
const download_repository_step_1 = __webpack_require__(12929);
const custom_workflow_1 = __webpack_require__(3786);
const ephemeral_github_runner_workflow_1 = __webpack_require__(37092);
const core = __importStar(__webpack_require__(42186));
class WorkflowCompositionRoot {
run(cloudRunnerStepState) {
return __awaiter(this, void 0, void 0, function* () {
yield WorkflowCompositionRoot.runJob(cloudRunnerStepState.image);
});
}
static runJob(baseImage) {
return __awaiter(this, void 0, void 0, function* () {
core.info(`Custom build steps: ${cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps}`);
if (cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps === '') {
yield new ephemeral_github_runner_workflow_1.EphemeralGitHubRunnerWorkflow().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
}
else if (cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps === 'ephemeral') {
yield new ephemeral_github_runner_workflow_1.EphemeralGitHubRunnerWorkflow().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
}
else if (cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps === 'download') {
yield new download_repository_step_1.DownloadRepositoryStep().run(new cloud_runner_step_state_1.CloudRunnerStepState('alpine/git', cloud_runner_state_1.CloudRunnerState.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
}
else {
yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.customBuildSteps);
}
});
}
}
exports.WorkflowCompositionRoot = WorkflowCompositionRoot;
/***/ }), /***/ }),

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -1,16 +1,12 @@
import AWSBuildPlatform from './aws/aws-build-platform'; import AWSBuildPlatform from './aws/aws-build-platform';
import * as core from '@actions/core';
import { BuildParameters } from '..'; import { BuildParameters } from '..';
import CloudRunnerNamespace from './services/cloud-runner-namespace'; import CloudRunnerNamespace from './services/cloud-runner-namespace';
import { CloudRunnerState } from './state/cloud-runner-state'; import { CloudRunnerState } from './state/cloud-runner-state';
import Kubernetes from './k8s/kubernetes-build-platform'; import Kubernetes from './k8s/kubernetes-build-platform';
import CloudRunnerLogger from './services/cloud-runner-logger'; import CloudRunnerLogger from './services/cloud-runner-logger';
import { BuildStep } from './steps/build-step';
import { CompressionStep } from './steps/compression-step';
import { DownloadRepositoryStep } from './steps/download-repository-step';
import { CustomStep } from './workflows/custom-step';
import { EphemeralGitHubRunnerStep } from './workflows/ephemeral-github-runner-step';
import { CloudRunnerStepState } from './state/cloud-runner-step-state'; import { CloudRunnerStepState } from './state/cloud-runner-step-state';
import { WorkflowCompositionRoot } from './workflows/workflow-composition-root';
import { CloudRunnerError } from './error/cloud-runner-error';
class CloudRunner { class CloudRunner {
private static setup(buildParameters: BuildParameters) { private static setup(buildParameters: BuildParameters) {
@ -49,7 +45,13 @@ class CloudRunner {
CloudRunnerState.branchName, CloudRunnerState.branchName,
CloudRunnerState.defaultSecrets, CloudRunnerState.defaultSecrets,
); );
await CloudRunner.runJob(baseImage.toString()); await new WorkflowCompositionRoot().run(
new CloudRunnerStepState(
baseImage,
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources( await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources(
CloudRunnerState.buildGuid, CloudRunnerState.buildGuid,
CloudRunnerState.buildParams, CloudRunnerState.buildParams,
@ -57,84 +59,9 @@ class CloudRunner {
CloudRunnerState.defaultSecrets, CloudRunnerState.defaultSecrets,
); );
} catch (error) { } catch (error) {
await CloudRunner.handleException(error); await CloudRunnerError.handleException(error);
throw error; throw error;
} }
} }
private static async runJob(baseImage: any) {
core.info(`Custom build steps: ${CloudRunnerState.buildParams.customBuildSteps}`);
if (CloudRunnerState.buildParams.customBuildSteps === '') {
await CloudRunner.standardBuildAutomation(baseImage);
} else if (CloudRunnerState.buildParams.customBuildSteps === 'ephemeral') {
await new EphemeralGitHubRunnerStep().run(
new CloudRunnerStepState(
baseImage,
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
} else if (CloudRunnerState.buildParams.customBuildSteps === 'download') {
await new DownloadRepositoryStep().run(
new CloudRunnerStepState(
'alpine/git',
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
} else {
await CustomStep.runCustomJob(CloudRunnerState.buildParams.customBuildSteps);
}
}
private static async standardBuildAutomation(baseImage: any) {
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
await new DownloadRepositoryStep().run(
new CloudRunnerStepState(
'alpine/git',
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
CloudRunnerLogger.logWithTime('Download repository step time');
await CustomStep.runCustomJob(CloudRunnerState.buildParams.preBuildSteps);
CloudRunnerLogger.logWithTime('Pre build step(s) time');
new BuildStep().run(
new CloudRunnerStepState(
baseImage,
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
CloudRunnerLogger.logWithTime('Build time');
await new CompressionStep().run(
new CloudRunnerStepState(
'alpine',
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
CloudRunnerLogger.logWithTime('Compression time');
await CustomStep.runCustomJob(CloudRunnerState.buildParams.postBuildSteps);
CloudRunnerLogger.logWithTime('Post build step(s) time');
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
}
private static async handleException(error: unknown) {
CloudRunnerLogger.error(JSON.stringify(error, undefined, 4));
core.setFailed('Remote Builder failed');
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources(
CloudRunnerState.buildGuid,
CloudRunnerState.buildParams,
CloudRunnerState.branchName,
CloudRunnerState.defaultSecrets,
);
}
} }
export default CloudRunner; export default CloudRunner;

View File

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

View File

@ -3,9 +3,9 @@ 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 { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state'; import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { StandardStepInterface } from './standard-step-interface'; import { StepInterface } from './step-interface';
export class BuildStep implements StandardStepInterface { export class BuildStep implements StepInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) { async run(cloudRunnerStepState: CloudRunnerStepState) {
await BuildStep.BuildStep( await BuildStep.BuildStep(
cloudRunnerStepState.image, cloudRunnerStepState.image,

View File

@ -3,9 +3,9 @@ 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 { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state'; import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { StandardStepInterface } from './standard-step-interface'; import { StepInterface } from './step-interface';
export class CompressionStep implements StandardStepInterface { export class CompressionStep implements StepInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) { async run(cloudRunnerStepState: CloudRunnerStepState) {
await CompressionStep.CompressionStep(cloudRunnerStepState.environment, cloudRunnerStepState.secrets); await CompressionStep.CompressionStep(cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
} }

View File

@ -3,9 +3,9 @@ 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 { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state'; import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { StandardStepInterface } from './standard-step-interface'; import { StepInterface } from './step-interface';
export class DownloadRepositoryStep implements StandardStepInterface { export class DownloadRepositoryStep implements StepInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) { async run(cloudRunnerStepState: CloudRunnerStepState) {
await DownloadRepositoryStep.downloadRepositoryStep( await DownloadRepositoryStep.downloadRepositoryStep(
cloudRunnerStepState.image, cloudRunnerStepState.image,

View File

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

View File

@ -0,0 +1,53 @@
import CloudRunnerLogger from '../services/cloud-runner-logger';
import { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { BuildStep } from '../steps/build-step';
import { CompressionStep } from '../steps/compression-step';
import { DownloadRepositoryStep } from '../steps/download-repository-step';
import { CustomWorkflow } from './custom-workflow';
import { WorkflowInterface } from './workflow-interface';
export class BuildAutomationWorkflow implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) {
await BuildAutomationWorkflow.standardBuildAutomation(cloudRunnerStepState.image);
}
private static async standardBuildAutomation(baseImage: any) {
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
await new DownloadRepositoryStep().run(
new CloudRunnerStepState(
'alpine/git',
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
CloudRunnerLogger.logWithTime('Download repository step time');
await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.preBuildSteps);
CloudRunnerLogger.logWithTime('Pre build step(s) time');
new BuildStep().run(
new CloudRunnerStepState(
baseImage,
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
CloudRunnerLogger.logWithTime('Build time');
await new CompressionStep().run(
new CloudRunnerStepState(
'alpine',
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
CloudRunnerLogger.logWithTime('Compression time');
await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.postBuildSteps);
CloudRunnerLogger.logWithTime('Post build step(s) time');
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
}
}

View File

@ -3,7 +3,7 @@ import CloudRunnerSecret from '../services/cloud-runner-secret';
import { CloudRunnerState } from '../state/cloud-runner-state'; import { CloudRunnerState } from '../state/cloud-runner-state';
import YAML from 'yaml'; import YAML from 'yaml';
export class CustomStep { export class CustomWorkflow {
public static async runCustomJob(buildSteps) { public static async runCustomJob(buildSteps) {
CloudRunnerLogger.log(`Cloud Runner is running in custom job mode`); CloudRunnerLogger.log(`Cloud Runner is running in custom job mode`);
buildSteps = YAML.parse(buildSteps); buildSteps = YAML.parse(buildSteps);

View File

@ -3,11 +3,11 @@ 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 { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state'; import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { StandardStepInterface } from '../steps/standard-step-interface'; import { WorkflowInterface } from './workflow-interface';
export class EphemeralGitHubRunnerStep implements StandardStepInterface { export class EphemeralGitHubRunnerWorkflow implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) { async run(cloudRunnerStepState: CloudRunnerStepState) {
await EphemeralGitHubRunnerStep.runJobAsEphemeralGitHubRunner( await EphemeralGitHubRunnerWorkflow.runJobAsEphemeralGitHubRunner(
cloudRunnerStepState.image, cloudRunnerStepState.image,
cloudRunnerStepState.environment, cloudRunnerStepState.environment,
cloudRunnerStepState.secrets, cloudRunnerStepState.secrets,

View File

@ -0,0 +1,44 @@
import { CloudRunnerState } from '../state/cloud-runner-state';
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
import { DownloadRepositoryStep } from '../steps/download-repository-step';
import { CustomWorkflow } from './custom-workflow';
import { EphemeralGitHubRunnerWorkflow } from './ephemeral-github-runner-workflow';
import { WorkflowInterface } from './workflow-interface';
import * as core from '@actions/core';
export class WorkflowCompositionRoot implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) {
await WorkflowCompositionRoot.runJob(cloudRunnerStepState.image);
}
private static async runJob(baseImage: any) {
core.info(`Custom build steps: ${CloudRunnerState.buildParams.customBuildSteps}`);
if (CloudRunnerState.buildParams.customBuildSteps === '') {
await new EphemeralGitHubRunnerWorkflow().run(
new CloudRunnerStepState(
baseImage,
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
} else if (CloudRunnerState.buildParams.customBuildSteps === 'ephemeral') {
await new EphemeralGitHubRunnerWorkflow().run(
new CloudRunnerStepState(
baseImage,
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
} else if (CloudRunnerState.buildParams.customBuildSteps === 'download') {
await new DownloadRepositoryStep().run(
new CloudRunnerStepState(
'alpine/git',
CloudRunnerState.readBuildEnvironmentVariables(),
CloudRunnerState.defaultSecrets,
),
);
} else {
await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.customBuildSteps);
}
}
}

View File

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