pull/524/head
Frostebite 2023-03-26 19:55:42 +01:00
parent c367ef8c51
commit 62d089fd89
22 changed files with 273 additions and 285 deletions

View File

@ -118,7 +118,7 @@ inputs:
description:
'[CloudRunner] Run a pre build job after the repository setup but before the build job (in yaml format with the
keys image, secrets (name, value object array), command line string)'
customStepFiles:
containerHookFiles:
required: false
default: ''
description:

346
dist/index.js generated vendored
View File

@ -278,8 +278,8 @@ class BuildParameters {
containerCpu: cloud_runner_options_1.default.containerCpu,
kubeVolumeSize: cloud_runner_options_1.default.kubeVolumeSize,
kubeVolume: cloud_runner_options_1.default.kubeVolume,
postBuildSteps: cloud_runner_options_1.default.postBuildSteps,
preBuildSteps: cloud_runner_options_1.default.preBuildSteps,
postBuildContainerHooks: cloud_runner_options_1.default.postBuildContainerHooks,
preBuildContainerHooks: cloud_runner_options_1.default.preBuildContainerHooks,
customJob: cloud_runner_options_1.default.customJob,
runNumber: input_1.default.runNumber,
branch: input_1.default.branch.replace('/head', '') || (await git_repo_1.GitRepoReader.GetBranch()),
@ -802,11 +802,11 @@ class CloudRunnerOptions {
// ### ### ###
// Custom commands from files parameters
// ### ### ###
static get customStepFiles() {
return CloudRunnerOptions.getInput('customStepFiles')?.split(`,`) || [];
static get containerHookFiles() {
return CloudRunnerOptions.getInput('containerHookFiles')?.split(`,`) || [];
}
static get customHookFiles() {
return CloudRunnerOptions.getInput('customHookFiles')?.split(`,`) || [];
static get commandHookFiles() {
return CloudRunnerOptions.getInput('commandHookFiles')?.split(`,`) || [];
}
// ### ### ###
// Custom commands from yaml parameters
@ -814,11 +814,11 @@ class CloudRunnerOptions {
static get commandHooks() {
return CloudRunnerOptions.getInput('commandHooks') || '';
}
static get postBuildSteps() {
return CloudRunnerOptions.getInput('postBuildSteps') || '';
static get postBuildContainerHooks() {
return CloudRunnerOptions.getInput('postBuildContainerHooks') || '';
}
static get preBuildSteps() {
return CloudRunnerOptions.getInput('preBuildSteps') || '';
static get preBuildContainerHooks() {
return CloudRunnerOptions.getInput('preBuildContainerHooks') || '';
}
// ### ### ###
// Input override handling
@ -1592,7 +1592,7 @@ const zlib = __importStar(__nccwpck_require__(65628));
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const __1 = __nccwpck_require__(41359);
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const cloud_runner_custom_hooks_1 = __nccwpck_require__(58873);
const cloud_runner_command_hook_1 = __nccwpck_require__(38960);
const follow_log_stream_service_1 = __nccwpck_require__(64121);
const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
const github_1 = __importDefault(__nccwpck_require__(83654));
@ -1613,7 +1613,7 @@ class AWSTaskRunner {
{
name: taskDef.taskDefStackName,
environment,
command: ['-c', cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.ApplyHooksToCommands(commands, cloud_runner_1.default.buildParameters)],
command: ['-c', cloud_runner_command_hook_1.CloudRunnerCommandHooks.ApplyHooksToCommands(commands, cloud_runner_1.default.buildParameters)],
},
],
},
@ -2906,7 +2906,7 @@ const node_fs_1 = __nccwpck_require__(87561);
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const cloud_runner_system_1 = __nccwpck_require__(99393);
const fs = __importStar(__nccwpck_require__(87561));
const cloud_runner_custom_hooks_1 = __nccwpck_require__(58873);
const cloud_runner_command_hook_1 = __nccwpck_require__(38960);
class LocalDockerCloudRunner {
listResources() {
return new Promise((resolve) => resolve([]));
@ -2980,7 +2980,7 @@ set -e
mkdir -p /github/workspace/cloud-runner-cache
mkdir -p /data/cache
cp -a /github/workspace/cloud-runner-cache/. ${sharedFolder}
${cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.ApplyHooksToCommands(commands, this.buildParameters)}
${cloud_runner_command_hook_1.CloudRunnerCommandHooks.ApplyHooksToCommands(commands, this.buildParameters)}
cp -a ${sharedFolder}. /github/workspace/cloud-runner-cache/
`;
node_fs_1.writeFileSync(`${workspace}/${entrypointFilePath}`, fileContents, {
@ -3270,7 +3270,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const client_node_1 = __nccwpck_require__(89679);
const cloud_runner_custom_hooks_1 = __nccwpck_require__(58873);
const cloud_runner_command_hook_1 = __nccwpck_require__(38960);
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class KubernetesJobSpecFactory {
static getJobSpec(command, image, mountdir, workingDirectory, environment, secrets, buildGuid, buildParameters, secretName, pvcName, jobName, k8s, containerName) {
@ -3359,7 +3359,7 @@ class KubernetesJobSpecFactory {
command: ['/bin/sh'],
args: [
'-c',
`${cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.ApplyHooksToCommands(`${command}\nsleep 2m`, cloud_runner_1.default.buildParameters)}`,
`${cloud_runner_command_hook_1.CloudRunnerCommandHooks.ApplyHooksToCommands(`${command}\nsleep 2m`, cloud_runner_1.default.buildParameters)}`,
],
workingDir: `${workingDirectory}`,
resources: {
@ -4321,7 +4321,120 @@ exports["default"] = CloudRunnerConstants;
/***/ }),
/***/ 58873:
/***/ 79691:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
class CloudRunnerEnvironmentVariable {
}
exports["default"] = CloudRunnerEnvironmentVariable;
/***/ }),
/***/ 13527:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerFolders = void 0;
const node_path_1 = __importDefault(__nccwpck_require__(49411));
const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const build_parameters_1 = __importDefault(__nccwpck_require__(80787));
class CloudRunnerFolders {
static ToLinuxFolder(folder) {
return folder.replace(/\\/g, `/`);
}
// Only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
static get uniqueCloudRunnerJobFolderAbsolute() {
return cloud_runner_1.default.buildParameters && build_parameters_1.default.shouldUseRetainedWorkspaceMode(cloud_runner_1.default.buildParameters)
? node_path_1.default.join(`/`, CloudRunnerFolders.buildVolumeFolder, cloud_runner_1.default.lockedWorkspace)
: node_path_1.default.join(`/`, CloudRunnerFolders.buildVolumeFolder, cloud_runner_1.default.buildParameters.buildGuid);
}
static get cacheFolderForAllFull() {
return node_path_1.default.join('/', CloudRunnerFolders.buildVolumeFolder, CloudRunnerFolders.cacheFolder);
}
static get cacheFolderForCacheKeyFull() {
return node_path_1.default.join('/', CloudRunnerFolders.buildVolumeFolder, CloudRunnerFolders.cacheFolder, cloud_runner_1.default.buildParameters.cacheKey);
}
static get builderPathAbsolute() {
return node_path_1.default.join(cloud_runner_options_1.default.useSharedBuilder
? `/${CloudRunnerFolders.buildVolumeFolder}`
: CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute, `builder`);
}
static get repoPathAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute, CloudRunnerFolders.repositoryFolder);
}
static get projectPathAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.repoPathAbsolute, cloud_runner_1.default.buildParameters.projectPath);
}
static get libraryFolderAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.projectPathAbsolute, `Library`);
}
static get projectBuildFolderAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.repoPathAbsolute, cloud_runner_1.default.buildParameters.buildPath);
}
static get lfsFolderAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.repoPathAbsolute, `.git`, `lfs`);
}
static get purgeRemoteCaching() {
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
}
static get lfsCacheFolderFull() {
return node_path_1.default.join(CloudRunnerFolders.cacheFolderForCacheKeyFull, `lfs`);
}
static get libraryCacheFolderFull() {
return node_path_1.default.join(CloudRunnerFolders.cacheFolderForCacheKeyFull, `Library`);
}
static get unityBuilderRepoUrl() {
return `https://${cloud_runner_1.default.buildParameters.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
}
static get targetBuildRepoUrl() {
return `https://${cloud_runner_1.default.buildParameters.gitPrivateToken}@github.com/${cloud_runner_1.default.buildParameters.githubRepo}.git`;
}
static get buildVolumeFolder() {
return 'data';
}
static get cacheFolder() {
return 'cache';
}
}
exports.CloudRunnerFolders = CloudRunnerFolders;
CloudRunnerFolders.repositoryFolder = 'repo';
/***/ }),
/***/ 17963:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const nanoid_1 = __nccwpck_require__(17592);
const cloud_runner_constants_1 = __importDefault(__nccwpck_require__(91311));
class CloudRunnerNamespace {
static generateGuid(runNumber, platform) {
const nanoid = nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 4);
return `${runNumber}-${platform.toLowerCase().replace('standalone', '')}-${nanoid()}`;
}
}
exports["default"] = CloudRunnerNamespace;
/***/ }),
/***/ 38960:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
@ -4349,7 +4462,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Hook = exports.CloudRunnerCustomHooks = void 0;
exports.CloudRunnerCommandHooks = void 0;
const __1 = __nccwpck_require__(41359);
const yaml_1 = __importDefault(__nccwpck_require__(44603));
const remote_client_logger_1 = __nccwpck_require__(59412);
@ -4358,9 +4471,9 @@ const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
const fs = __importStar(__nccwpck_require__(87561));
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
// import CloudRunnerLogger from './cloud-runner-logger';
class CloudRunnerCustomHooks {
class CloudRunnerCommandHooks {
static ApplyHooksToCommands(commands, buildParameters) {
const hooks = CloudRunnerCustomHooks.getHooks(buildParameters.commandHooks);
const hooks = CloudRunnerCommandHooks.getHooks(buildParameters.commandHooks);
cloud_runner_logger_1.default.log(`Applying hooks ${hooks.length}`);
return `echo "---"
echo "start cloud runner init"
@ -4385,22 +4498,22 @@ echo "---${buildParameters.logId}"`;
}
return [
...output.filter((x) => x.hook !== undefined && x.hook.length > 0),
...CloudRunnerCustomHooks.GetCustomHooksFromFiles(`before`),
...CloudRunnerCustomHooks.GetCustomHooksFromFiles(`after`),
...CloudRunnerCommandHooks.GetCustomHooksFromFiles(`before`),
...CloudRunnerCommandHooks.GetCustomHooksFromFiles(`after`),
];
}
static GetCustomHooksFromFiles(hookLifecycle) {
const results = [];
// RemoteClientLogger.log(`GetCustomHookFiles: ${hookLifecycle}`);
try {
const gameCiCustomHooksPath = node_path_1.default.join(process.cwd(), `game-ci`, `hooks`);
const gameCiCustomHooksPath = node_path_1.default.join(process.cwd(), `game-ci`, `command-hooks`);
const files = fs.readdirSync(gameCiCustomHooksPath);
for (const file of files) {
if (!cloud_runner_options_1.default.customHookFiles.includes(file.replace(`.yaml`, ``))) {
if (!cloud_runner_options_1.default.commandHookFiles.includes(file.replace(`.yaml`, ``))) {
continue;
}
const fileContents = fs.readFileSync(node_path_1.default.join(gameCiCustomHooksPath, file), `utf8`);
const fileContentsObject = CloudRunnerCustomHooks.ParseHooks(fileContents)[0];
const fileContentsObject = CloudRunnerCommandHooks.ParseHooks(fileContents)[0];
if (fileContentsObject.hook.includes(hookLifecycle)) {
results.push(fileContentsObject);
}
@ -4435,7 +4548,7 @@ echo "---${buildParameters.logId}"`;
const isArray = hooks.replace(/\s/g, ``)[0] === `-`;
const object = isArray ? yaml_1.default.parse(hooks) : [yaml_1.default.parse(hooks)];
for (const hook of object) {
CloudRunnerCustomHooks.ConvertYamlSecrets(hook);
CloudRunnerCommandHooks.ConvertYamlSecrets(hook);
if (hook.secrets === undefined) {
hook.secrets = [];
}
@ -4451,19 +4564,12 @@ echo "---${buildParameters.logId}"`;
return secrets.length > 0 ? secrets.reduce((x, y) => [...x, ...y]) : [];
}
}
exports.CloudRunnerCustomHooks = CloudRunnerCustomHooks;
class Hook {
constructor() {
this.commands = new Array();
this.secrets = new Array();
}
}
exports.Hook = Hook;
exports.CloudRunnerCommandHooks = CloudRunnerCommandHooks;
/***/ }),
/***/ 96455:
/***/ 18313:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
@ -4491,7 +4597,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerCustomSteps = void 0;
exports.CloudRunnerContainerHook = void 0;
const yaml_1 = __importDefault(__nccwpck_require__(44603));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const core = __importStar(__nccwpck_require__(42186));
@ -4501,22 +4607,19 @@ const node_path_1 = __importDefault(__nccwpck_require__(49411));
const node_fs_1 = __importDefault(__nccwpck_require__(87561));
const input_1 = __importDefault(__nccwpck_require__(91933));
const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
class CloudRunnerCustomSteps {
static GetCustomStepsFromFiles(hookLifecycle) {
class CloudRunnerContainerHook {
static GetContainerHooksFromFiles(hookLifecycle) {
const results = [];
// RemoteClientLogger.log(
// `GetCustomStepFiles: ${hookLifecycle} CustomStepFiles: ${CloudRunnerOptions.customStepFiles}`,
// );
try {
const gameCiCustomStepsPath = node_path_1.default.join(process.cwd(), `game-ci`, `steps`);
const gameCiCustomStepsPath = node_path_1.default.join(process.cwd(), `game-ci`, `container-hooks`);
const files = node_fs_1.default.readdirSync(gameCiCustomStepsPath);
for (const file of files) {
if (!cloud_runner_options_1.default.customStepFiles.includes(file.replace(`.yaml`, ``))) {
if (!cloud_runner_options_1.default.containerHookFiles.includes(file.replace(`.yaml`, ``))) {
// RemoteClientLogger.log(`Skipping CustomStepFile: ${file}`);
continue;
}
const fileContents = node_fs_1.default.readFileSync(node_path_1.default.join(gameCiCustomStepsPath, file), `utf8`);
const fileContentsObject = CloudRunnerCustomSteps.ParseSteps(fileContents)[0];
const fileContentsObject = CloudRunnerContainerHook.ParseContainerHooks(fileContents)[0];
if (fileContentsObject.hook === hookLifecycle) {
results.push(fileContentsObject);
}
@ -4526,7 +4629,7 @@ class CloudRunnerCustomSteps {
remote_client_logger_1.RemoteClientLogger.log(`Failed Getting: ${hookLifecycle} \n ${JSON.stringify(error, undefined, 4)}`);
}
// RemoteClientLogger.log(`Active Steps From Files: \n ${JSON.stringify(results, undefined, 4)}`);
const builtInCustomSteps = CloudRunnerCustomSteps.ParseSteps(`- name: aws-s3-upload-build
const builtInContainerHooks = CloudRunnerContainerHook.ParseContainerHooks(`- name: aws-s3-upload-build
image: amazon/aws-cli
hook: after
commands: |
@ -4650,9 +4753,9 @@ class CloudRunnerCustomSteps {
- name: awsSecretAccessKey
value: ${process.env.AWS_SECRET_ACCESS_KEY || ``}
- name: awsDefaultRegion
value: ${process.env.AWS_REGION || ``}`).filter((x) => cloud_runner_options_1.default.customStepFiles.includes(x.name) && x.hook === hookLifecycle);
if (builtInCustomSteps.length > 0) {
results.push(...builtInCustomSteps);
value: ${process.env.AWS_REGION || ``}`).filter((x) => cloud_runner_options_1.default.containerHookFiles.includes(x.name) && x.hook === hookLifecycle);
if (builtInContainerHooks.length > 0) {
results.push(...builtInContainerHooks);
}
return results;
}
@ -4669,14 +4772,14 @@ class CloudRunnerCustomSteps {
};
});
}
static ParseSteps(steps) {
static ParseContainerHooks(steps) {
if (steps === '') {
return [];
}
const isArray = steps.replace(/\s/g, ``)[0] === `-`;
const object = isArray ? yaml_1.default.parse(steps) : [yaml_1.default.parse(steps)];
for (const step of object) {
CloudRunnerCustomSteps.ConvertYamlSecrets(step);
CloudRunnerContainerHook.ConvertYamlSecrets(step);
if (step.secrets === undefined) {
step.secrets = [];
}
@ -4702,8 +4805,8 @@ class CloudRunnerCustomSteps {
static async RunPostBuildSteps(cloudRunnerStepState) {
let output = ``;
const steps = [
...CloudRunnerCustomSteps.ParseSteps(cloud_runner_1.default.buildParameters.postBuildSteps),
...CloudRunnerCustomSteps.GetCustomStepsFromFiles(`after`),
...CloudRunnerContainerHook.ParseContainerHooks(cloud_runner_1.default.buildParameters.postBuildContainerHooks),
...CloudRunnerContainerHook.GetContainerHooksFromFiles(`after`),
];
if (steps.length > 0) {
if (!cloud_runner_1.default.buildParameters.isCliMode)
@ -4717,8 +4820,8 @@ class CloudRunnerCustomSteps {
static async RunPreBuildSteps(cloudRunnerStepState) {
let output = ``;
const steps = [
...CloudRunnerCustomSteps.ParseSteps(cloud_runner_1.default.buildParameters.preBuildSteps),
...CloudRunnerCustomSteps.GetCustomStepsFromFiles(`before`),
...CloudRunnerContainerHook.ParseContainerHooks(cloud_runner_1.default.buildParameters.preBuildContainerHooks),
...CloudRunnerContainerHook.GetContainerHooksFromFiles(`before`),
];
if (steps.length > 0) {
if (!cloud_runner_1.default.buildParameters.isCliMode)
@ -4730,120 +4833,7 @@ class CloudRunnerCustomSteps {
return output;
}
}
exports.CloudRunnerCustomSteps = CloudRunnerCustomSteps;
/***/ }),
/***/ 79691:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
class CloudRunnerEnvironmentVariable {
}
exports["default"] = CloudRunnerEnvironmentVariable;
/***/ }),
/***/ 13527:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CloudRunnerFolders = void 0;
const node_path_1 = __importDefault(__nccwpck_require__(49411));
const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const build_parameters_1 = __importDefault(__nccwpck_require__(80787));
class CloudRunnerFolders {
static ToLinuxFolder(folder) {
return folder.replace(/\\/g, `/`);
}
// Only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
static get uniqueCloudRunnerJobFolderAbsolute() {
return cloud_runner_1.default.buildParameters && build_parameters_1.default.shouldUseRetainedWorkspaceMode(cloud_runner_1.default.buildParameters)
? node_path_1.default.join(`/`, CloudRunnerFolders.buildVolumeFolder, cloud_runner_1.default.lockedWorkspace)
: node_path_1.default.join(`/`, CloudRunnerFolders.buildVolumeFolder, cloud_runner_1.default.buildParameters.buildGuid);
}
static get cacheFolderForAllFull() {
return node_path_1.default.join('/', CloudRunnerFolders.buildVolumeFolder, CloudRunnerFolders.cacheFolder);
}
static get cacheFolderForCacheKeyFull() {
return node_path_1.default.join('/', CloudRunnerFolders.buildVolumeFolder, CloudRunnerFolders.cacheFolder, cloud_runner_1.default.buildParameters.cacheKey);
}
static get builderPathAbsolute() {
return node_path_1.default.join(cloud_runner_options_1.default.useSharedBuilder
? `/${CloudRunnerFolders.buildVolumeFolder}`
: CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute, `builder`);
}
static get repoPathAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute, CloudRunnerFolders.repositoryFolder);
}
static get projectPathAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.repoPathAbsolute, cloud_runner_1.default.buildParameters.projectPath);
}
static get libraryFolderAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.projectPathAbsolute, `Library`);
}
static get projectBuildFolderAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.repoPathAbsolute, cloud_runner_1.default.buildParameters.buildPath);
}
static get lfsFolderAbsolute() {
return node_path_1.default.join(CloudRunnerFolders.repoPathAbsolute, `.git`, `lfs`);
}
static get purgeRemoteCaching() {
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
}
static get lfsCacheFolderFull() {
return node_path_1.default.join(CloudRunnerFolders.cacheFolderForCacheKeyFull, `lfs`);
}
static get libraryCacheFolderFull() {
return node_path_1.default.join(CloudRunnerFolders.cacheFolderForCacheKeyFull, `Library`);
}
static get unityBuilderRepoUrl() {
return `https://${cloud_runner_1.default.buildParameters.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
}
static get targetBuildRepoUrl() {
return `https://${cloud_runner_1.default.buildParameters.gitPrivateToken}@github.com/${cloud_runner_1.default.buildParameters.githubRepo}.git`;
}
static get buildVolumeFolder() {
return 'data';
}
static get cacheFolder() {
return 'cache';
}
}
exports.CloudRunnerFolders = CloudRunnerFolders;
CloudRunnerFolders.repositoryFolder = 'repo';
/***/ }),
/***/ 17963:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const nanoid_1 = __nccwpck_require__(17592);
const cloud_runner_constants_1 = __importDefault(__nccwpck_require__(91311));
class CloudRunnerNamespace {
static generateGuid(runNumber, platform) {
const nanoid = nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 4);
return `${runNumber}-${platform.toLowerCase().replace('standalone', '')}-${nanoid()}`;
}
}
exports["default"] = CloudRunnerNamespace;
exports.CloudRunnerContainerHook = CloudRunnerContainerHook;
/***/ }),
@ -5436,7 +5426,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.TaskParameterSerializer = void 0;
const __1 = __nccwpck_require__(41359);
const cloud_runner_custom_hooks_1 = __nccwpck_require__(58873);
const cloud_runner_command_hook_1 = __nccwpck_require__(38960);
const cloud_runner_query_override_1 = __importDefault(__nccwpck_require__(31011));
const cloud_runner_options_reader_1 = __importDefault(__nccwpck_require__(3343));
const build_parameters_1 = __importDefault(__nccwpck_require__(80787));
@ -5452,7 +5442,7 @@ class TaskParameterSerializer {
...TaskParameterSerializer.serializeFromObject(buildParameters),
...TaskParameterSerializer.serializeInput(),
...TaskParameterSerializer.serializeCloudRunnerOptions(),
...cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.getSecrets(cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.getHooks(buildParameters.commandHooks)),
...cloud_runner_command_hook_1.CloudRunnerCommandHooks.getSecrets(cloud_runner_command_hook_1.CloudRunnerCommandHooks.getHooks(buildParameters.commandHooks)),
]
.filter((x) => !TaskParameterSerializer.blockedParameterNames.has(x.name) &&
x.value !== '' &&
@ -5671,10 +5661,10 @@ exports.BuildAutomationWorkflow = void 0;
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_folders_1 = __nccwpck_require__(13527);
const core = __importStar(__nccwpck_require__(42186));
const cloud_runner_custom_hooks_1 = __nccwpck_require__(58873);
const cloud_runner_command_hook_1 = __nccwpck_require__(38960);
const node_path_1 = __importDefault(__nccwpck_require__(49411));
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
const cloud_runner_custom_steps_1 = __nccwpck_require__(96455);
const cloud_runner_container_hook_1 = __nccwpck_require__(18313);
class BuildAutomationWorkflow {
async run(cloudRunnerStepState) {
return await BuildAutomationWorkflow.standardBuildAutomation(cloudRunnerStepState.image, cloudRunnerStepState);
@ -5683,7 +5673,7 @@ class BuildAutomationWorkflow {
// TODO accept post and pre build steps as yaml files in the repo
cloud_runner_logger_1.default.log(`Cloud Runner is running standard build automation`);
let output = '';
output += await cloud_runner_custom_steps_1.CloudRunnerCustomSteps.RunPreBuildSteps(cloudRunnerStepState);
output += await cloud_runner_container_hook_1.CloudRunnerContainerHook.RunPreBuildSteps(cloudRunnerStepState);
cloud_runner_logger_1.default.logWithTime('Configurable pre build step(s) time');
if (!cloud_runner_1.default.buildParameters.isCliMode)
core.startGroup('build');
@ -5694,14 +5684,14 @@ class BuildAutomationWorkflow {
if (!cloud_runner_1.default.buildParameters.isCliMode)
core.endGroup();
cloud_runner_logger_1.default.logWithTime('Build time');
output += await cloud_runner_custom_steps_1.CloudRunnerCustomSteps.RunPostBuildSteps(cloudRunnerStepState);
output += await cloud_runner_container_hook_1.CloudRunnerContainerHook.RunPostBuildSteps(cloudRunnerStepState);
cloud_runner_logger_1.default.logWithTime('Configurable post build step(s) time');
cloud_runner_logger_1.default.log(`Cloud Runner finished running standard build automation`);
return output;
}
static get BuildWorkflow() {
const setupHooks = cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.getHooks(cloud_runner_1.default.buildParameters.commandHooks).filter((x) => x.step?.includes(`setup`));
const buildHooks = cloud_runner_custom_hooks_1.CloudRunnerCustomHooks.getHooks(cloud_runner_1.default.buildParameters.commandHooks).filter((x) => x.step?.includes(`build`));
const setupHooks = cloud_runner_command_hook_1.CloudRunnerCommandHooks.getHooks(cloud_runner_1.default.buildParameters.commandHooks).filter((x) => x.step?.includes(`setup`));
const buildHooks = cloud_runner_command_hook_1.CloudRunnerCommandHooks.getHooks(cloud_runner_1.default.buildParameters.commandHooks).filter((x) => x.step?.includes(`build`));
const builderPath = cloud_runner_folders_1.CloudRunnerFolders.ToLinuxFolder(node_path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathAbsolute, 'dist', `index.js`));
return `apt-get update > /dev/null
apt-get install -y curl tar tree npm git-lfs jq git > /dev/null
@ -5761,11 +5751,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.CustomWorkflow = void 0;
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
const cloud_runner_folders_1 = __nccwpck_require__(13527);
const cloud_runner_custom_steps_1 = __nccwpck_require__(96455);
const cloud_runner_container_hook_1 = __nccwpck_require__(18313);
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
class CustomWorkflow {
static async runContainerJobFromString(buildSteps, environmentVariables, secrets) {
return await CustomWorkflow.runContainerJob(cloud_runner_custom_steps_1.CloudRunnerCustomSteps.ParseSteps(buildSteps), environmentVariables, secrets);
return await CustomWorkflow.runContainerJob(cloud_runner_container_hook_1.CloudRunnerContainerHook.ParseContainerHooks(buildSteps), environmentVariables, secrets);
}
static async runContainerJob(steps, environmentVariables, secrets) {
try {

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@ -57,8 +57,8 @@ class BuildParameters {
public inputPullCommand!: string;
public cacheKey!: string;
public postBuildSteps!: string;
public preBuildSteps!: string;
public postBuildContainerHooks!: string;
public preBuildContainerHooks!: string;
public customJob!: string;
public runNumber!: string;
public branch!: string;
@ -157,8 +157,8 @@ class BuildParameters {
containerCpu: CloudRunnerOptions.containerCpu,
kubeVolumeSize: CloudRunnerOptions.kubeVolumeSize,
kubeVolume: CloudRunnerOptions.kubeVolume,
postBuildSteps: CloudRunnerOptions.postBuildSteps,
preBuildSteps: CloudRunnerOptions.preBuildSteps,
postBuildContainerHooks: CloudRunnerOptions.postBuildContainerHooks,
preBuildContainerHooks: CloudRunnerOptions.preBuildContainerHooks,
customJob: CloudRunnerOptions.customJob,
runNumber: Input.runNumber,
branch: Input.branch.replace('/head', '') || (await GitRepoReader.GetBranch()),

View File

@ -143,12 +143,12 @@ class CloudRunnerOptions {
// Custom commands from files parameters
// ### ### ###
static get customStepFiles(): string[] {
return CloudRunnerOptions.getInput('customStepFiles')?.split(`,`) || [];
static get containerHookFiles(): string[] {
return CloudRunnerOptions.getInput('containerHookFiles')?.split(`,`) || [];
}
static get customHookFiles(): string[] {
return CloudRunnerOptions.getInput('customHookFiles')?.split(`,`) || [];
static get commandHookFiles(): string[] {
return CloudRunnerOptions.getInput('commandHookFiles')?.split(`,`) || [];
}
// ### ### ###
@ -159,12 +159,12 @@ class CloudRunnerOptions {
return CloudRunnerOptions.getInput('commandHooks') || '';
}
static get postBuildSteps(): string {
return CloudRunnerOptions.getInput('postBuildSteps') || '';
static get postBuildContainerHooks(): string {
return CloudRunnerOptions.getInput('postBuildContainerHooks') || '';
}
static get preBuildSteps(): string {
return CloudRunnerOptions.getInput('preBuildSteps') || '';
static get preBuildContainerHooks(): string {
return CloudRunnerOptions.getInput('preBuildContainerHooks') || '';
}
// ### ### ###

View File

@ -6,7 +6,7 @@ import * as zlib from 'node:zlib';
import CloudRunnerLogger from '../../services/cloud-runner-logger';
import { Input } from '../../..';
import CloudRunner from '../../cloud-runner';
import { CloudRunnerCustomHooks } from '../../services/cloud-runner-custom-hooks';
import { CloudRunnerCommandHooks } from '../../services/cloud-runner-hooks/cloud-runner-command-hook';
import { FollowLogStreamService } from '../../services/follow-log-stream-service';
import CloudRunnerOptions from '../../cloud-runner-options';
import GitHub from '../../../github';
@ -41,7 +41,7 @@ class AWSTaskRunner {
{
name: taskDef.taskDefStackName,
environment,
command: ['-c', CloudRunnerCustomHooks.ApplyHooksToCommands(commands, CloudRunner.buildParameters)],
command: ['-c', CloudRunnerCommandHooks.ApplyHooksToCommands(commands, CloudRunner.buildParameters)],
},
],
},

View File

@ -11,7 +11,7 @@ import { ProviderResource } from '../provider-resource';
import { ProviderWorkflow } from '../provider-workflow';
import { CloudRunnerSystem } from '../../services/cloud-runner-system';
import * as fs from 'node:fs';
import { CloudRunnerCustomHooks } from '../../services/cloud-runner-custom-hooks';
import { CloudRunnerCommandHooks } from '../../services/cloud-runner-hooks/cloud-runner-command-hook';
import { StringKeyValuePair } from '../../../shared-types';
class LocalDockerCloudRunner implements ProviderInterface {
@ -119,7 +119,7 @@ set -e
mkdir -p /github/workspace/cloud-runner-cache
mkdir -p /data/cache
cp -a /github/workspace/cloud-runner-cache/. ${sharedFolder}
${CloudRunnerCustomHooks.ApplyHooksToCommands(commands, this.buildParameters)}
${CloudRunnerCommandHooks.ApplyHooksToCommands(commands, this.buildParameters)}
cp -a ${sharedFolder}. /github/workspace/cloud-runner-cache/
`;
writeFileSync(`${workspace}/${entrypointFilePath}`, fileContents, {

View File

@ -1,6 +1,6 @@
import { V1EnvVar, V1EnvVarSource, V1SecretKeySelector } from '@kubernetes/client-node';
import BuildParameters from '../../../build-parameters';
import { CloudRunnerCustomHooks } from '../../services/cloud-runner-custom-hooks';
import { CloudRunnerCommandHooks } from '../../services/cloud-runner-hooks/cloud-runner-command-hook';
import CloudRunnerEnvironmentVariable from '../../services/cloud-runner-environment-variable';
import CloudRunnerSecret from '../../services/cloud-runner-secret';
import CloudRunner from '../../cloud-runner';
@ -108,7 +108,7 @@ class KubernetesJobSpecFactory {
command: ['/bin/sh'],
args: [
'-c',
`${CloudRunnerCustomHooks.ApplyHooksToCommands(`${command}\nsleep 2m`, CloudRunner.buildParameters)}`,
`${CloudRunnerCommandHooks.ApplyHooksToCommands(`${command}\nsleep 2m`, CloudRunner.buildParameters)}`,
],
workingDir: `${workingDirectory}`,

View File

@ -1,17 +1,17 @@
import { BuildParameters, Input } from '../..';
import { BuildParameters, Input } from '../../..';
import YAML from 'yaml';
import CloudRunnerSecret from './cloud-runner-secret';
import { RemoteClientLogger } from '../remote-client/remote-client-logger';
import { RemoteClientLogger } from '../../remote-client/remote-client-logger';
import path from 'node:path';
import CloudRunnerOptions from '../cloud-runner-options';
import CloudRunnerOptions from '../../cloud-runner-options';
import * as fs from 'node:fs';
import CloudRunnerLogger from './cloud-runner-logger';
import CloudRunnerLogger from '../cloud-runner-logger';
import { CommandHook } from './command-hook';
// import CloudRunnerLogger from './cloud-runner-logger';
export class CloudRunnerCustomHooks {
export class CloudRunnerCommandHooks {
public static ApplyHooksToCommands(commands: string, buildParameters: BuildParameters): string {
const hooks = CloudRunnerCustomHooks.getHooks(buildParameters.commandHooks);
const hooks = CloudRunnerCommandHooks.getHooks(buildParameters.commandHooks);
CloudRunnerLogger.log(`Applying hooks ${hooks.length}`);
return `echo "---"
@ -25,9 +25,9 @@ echo "end of cloud runner job"
echo "---${buildParameters.logId}"`;
}
public static getHooks(customCommandHooks: string): Hook[] {
public static getHooks(customCommandHooks: string): CommandHook[] {
const experimentHooks = customCommandHooks;
let output = new Array<Hook>();
let output = new Array<CommandHook>();
if (experimentHooks && experimentHooks !== '') {
try {
output = YAML.parse(experimentHooks);
@ -38,24 +38,24 @@ echo "---${buildParameters.logId}"`;
return [
...output.filter((x) => x.hook !== undefined && x.hook.length > 0),
...CloudRunnerCustomHooks.GetCustomHooksFromFiles(`before`),
...CloudRunnerCustomHooks.GetCustomHooksFromFiles(`after`),
...CloudRunnerCommandHooks.GetCustomHooksFromFiles(`before`),
...CloudRunnerCommandHooks.GetCustomHooksFromFiles(`after`),
];
}
static GetCustomHooksFromFiles(hookLifecycle: string): Hook[] {
const results: Hook[] = [];
static GetCustomHooksFromFiles(hookLifecycle: string): CommandHook[] {
const results: CommandHook[] = [];
// RemoteClientLogger.log(`GetCustomHookFiles: ${hookLifecycle}`);
try {
const gameCiCustomHooksPath = path.join(process.cwd(), `game-ci`, `hooks`);
const gameCiCustomHooksPath = path.join(process.cwd(), `game-ci`, `command-hooks`);
const files = fs.readdirSync(gameCiCustomHooksPath);
for (const file of files) {
if (!CloudRunnerOptions.customHookFiles.includes(file.replace(`.yaml`, ``))) {
if (!CloudRunnerOptions.commandHookFiles.includes(file.replace(`.yaml`, ``))) {
continue;
}
const fileContents = fs.readFileSync(path.join(gameCiCustomHooksPath, file), `utf8`);
const fileContentsObject = CloudRunnerCustomHooks.ParseHooks(fileContents)[0];
const fileContentsObject = CloudRunnerCommandHooks.ParseHooks(fileContents)[0];
if (fileContentsObject.hook.includes(hookLifecycle)) {
results.push(fileContentsObject);
}
@ -69,7 +69,7 @@ echo "---${buildParameters.logId}"`;
return results;
}
private static ConvertYamlSecrets(object: Hook) {
private static ConvertYamlSecrets(object: CommandHook) {
if (object.secrets === undefined) {
object.secrets = [];
@ -84,7 +84,7 @@ echo "---${buildParameters.logId}"`;
});
}
public static ParseHooks(hooks: string): Hook[] {
public static ParseHooks(hooks: string): CommandHook[] {
if (hooks === '') {
return [];
}
@ -95,9 +95,9 @@ echo "---${buildParameters.logId}"`;
// }
const isArray = hooks.replace(/\s/g, ``)[0] === `-`;
const object: Hook[] = isArray ? YAML.parse(hooks) : [YAML.parse(hooks)];
const object: CommandHook[] = isArray ? YAML.parse(hooks) : [YAML.parse(hooks)];
for (const hook of object) {
CloudRunnerCustomHooks.ConvertYamlSecrets(hook);
CloudRunnerCommandHooks.ConvertYamlSecrets(hook);
if (hook.secrets === undefined) {
hook.secrets = [];
}
@ -116,10 +116,3 @@ echo "---${buildParameters.logId}"`;
return secrets.length > 0 ? secrets.reduce((x: any, y: any) => [...x, ...y]) : [];
}
}
export class Hook {
public commands: string[] = new Array<string>();
public secrets: CloudRunnerSecret[] = new Array<CloudRunnerSecret>();
public name!: string;
public hook!: string[];
public step!: string[];
}

View File

@ -1,32 +1,28 @@
import YAML from 'yaml';
import CloudRunner from '../cloud-runner';
import CloudRunner from '../../cloud-runner';
import * as core from '@actions/core';
import { CustomWorkflow } from '../workflows/custom-workflow';
import { RemoteClientLogger } from '../remote-client/remote-client-logger';
import { CustomWorkflow } from '../../workflows/custom-workflow';
import { RemoteClientLogger } from '../../remote-client/remote-client-logger';
import path from 'node:path';
import fs from 'node:fs';
import Input from '../../input';
import CloudRunnerOptions from '../cloud-runner-options';
import { CustomStep } from './custom-step';
import { CloudRunnerStepState } from '../cloud-runner-step-state';
import Input from '../../../input';
import CloudRunnerOptions from '../../cloud-runner-options';
import { ContainerHook as ContainerHook } from './container-hook';
import { CloudRunnerStepState } from '../../cloud-runner-step-state';
export class CloudRunnerCustomSteps {
static GetCustomStepsFromFiles(hookLifecycle: string): CustomStep[] {
const results: CustomStep[] = [];
// RemoteClientLogger.log(
// `GetCustomStepFiles: ${hookLifecycle} CustomStepFiles: ${CloudRunnerOptions.customStepFiles}`,
// );
export class CloudRunnerContainerHook {
static GetContainerHooksFromFiles(hookLifecycle: string): ContainerHook[] {
const results: ContainerHook[] = [];
try {
const gameCiCustomStepsPath = path.join(process.cwd(), `game-ci`, `steps`);
const gameCiCustomStepsPath = path.join(process.cwd(), `game-ci`, `container-hooks`);
const files = fs.readdirSync(gameCiCustomStepsPath);
for (const file of files) {
if (!CloudRunnerOptions.customStepFiles.includes(file.replace(`.yaml`, ``))) {
if (!CloudRunnerOptions.containerHookFiles.includes(file.replace(`.yaml`, ``))) {
// RemoteClientLogger.log(`Skipping CustomStepFile: ${file}`);
continue;
}
const fileContents = fs.readFileSync(path.join(gameCiCustomStepsPath, file), `utf8`);
const fileContentsObject = CloudRunnerCustomSteps.ParseSteps(fileContents)[0];
const fileContentsObject = CloudRunnerContainerHook.ParseContainerHooks(fileContents)[0];
if (fileContentsObject.hook === hookLifecycle) {
results.push(fileContentsObject);
}
@ -37,7 +33,7 @@ export class CloudRunnerCustomSteps {
// RemoteClientLogger.log(`Active Steps From Files: \n ${JSON.stringify(results, undefined, 4)}`);
const builtInCustomSteps: CustomStep[] = CloudRunnerCustomSteps.ParseSteps(
const builtInContainerHooks: ContainerHook[] = CloudRunnerContainerHook.ParseContainerHooks(
`- name: aws-s3-upload-build
image: amazon/aws-cli
hook: after
@ -179,15 +175,15 @@ export class CloudRunnerCustomSteps {
value: ${process.env.AWS_SECRET_ACCESS_KEY || ``}
- name: awsDefaultRegion
value: ${process.env.AWS_REGION || ``}`,
).filter((x) => CloudRunnerOptions.customStepFiles.includes(x.name) && x.hook === hookLifecycle);
if (builtInCustomSteps.length > 0) {
results.push(...builtInCustomSteps);
).filter((x) => CloudRunnerOptions.containerHookFiles.includes(x.name) && x.hook === hookLifecycle);
if (builtInContainerHooks.length > 0) {
results.push(...builtInContainerHooks);
}
return results;
}
private static ConvertYamlSecrets(object: CustomStep) {
private static ConvertYamlSecrets(object: ContainerHook) {
if (object.secrets === undefined) {
object.secrets = [];
@ -202,14 +198,14 @@ export class CloudRunnerCustomSteps {
});
}
public static ParseSteps(steps: string): CustomStep[] {
public static ParseContainerHooks(steps: string): ContainerHook[] {
if (steps === '') {
return [];
}
const isArray = steps.replace(/\s/g, ``)[0] === `-`;
const object: CustomStep[] = isArray ? YAML.parse(steps) : [YAML.parse(steps)];
const object: ContainerHook[] = isArray ? YAML.parse(steps) : [YAML.parse(steps)];
for (const step of object) {
CloudRunnerCustomSteps.ConvertYamlSecrets(step);
CloudRunnerContainerHook.ConvertYamlSecrets(step);
if (step.secrets === undefined) {
step.secrets = [];
} else {
@ -235,9 +231,9 @@ export class CloudRunnerCustomSteps {
static async RunPostBuildSteps(cloudRunnerStepState: CloudRunnerStepState) {
let output = ``;
const steps: CustomStep[] = [
...CloudRunnerCustomSteps.ParseSteps(CloudRunner.buildParameters.postBuildSteps),
...CloudRunnerCustomSteps.GetCustomStepsFromFiles(`after`),
const steps: ContainerHook[] = [
...CloudRunnerContainerHook.ParseContainerHooks(CloudRunner.buildParameters.postBuildContainerHooks),
...CloudRunnerContainerHook.GetContainerHooksFromFiles(`after`),
];
if (steps.length > 0) {
@ -254,9 +250,9 @@ export class CloudRunnerCustomSteps {
}
static async RunPreBuildSteps(cloudRunnerStepState: CloudRunnerStepState) {
let output = ``;
const steps: CustomStep[] = [
...CloudRunnerCustomSteps.ParseSteps(CloudRunner.buildParameters.preBuildSteps),
...CloudRunnerCustomSteps.GetCustomStepsFromFiles(`before`),
const steps: ContainerHook[] = [
...CloudRunnerContainerHook.ParseContainerHooks(CloudRunner.buildParameters.preBuildContainerHooks),
...CloudRunnerContainerHook.GetContainerHooksFromFiles(`before`),
];
if (steps.length > 0) {

View File

@ -0,0 +1,9 @@
import CloudRunnerSecret from '../cloud-runner-secret';
export class CommandHook {
public commands: string[] = new Array<string>();
public secrets: CloudRunnerSecret[] = new Array<CloudRunnerSecret>();
public name!: string;
public hook!: string[];
public step!: string[];
}

View File

@ -1,6 +1,6 @@
import CloudRunnerSecret from './cloud-runner-secret';
import CloudRunnerSecret from '../cloud-runner-secret';
export class CustomStep {
export class ContainerHook {
public commands!: string;
public secrets: CloudRunnerSecret[] = new Array<CloudRunnerSecret>();
public name!: string;

View File

@ -1,6 +1,6 @@
import { Input } from '../..';
import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import { CloudRunnerCustomHooks } from './cloud-runner-custom-hooks';
import { CloudRunnerCommandHooks } from './cloud-runner-hooks/cloud-runner-command-hook';
import CloudRunnerSecret from './cloud-runner-secret';
import CloudRunnerQueryOverride from './cloud-runner-query-override';
import CloudRunnerOptionsReader from './cloud-runner-options-reader';
@ -32,7 +32,7 @@ export class TaskParameterSerializer {
...TaskParameterSerializer.serializeFromObject(buildParameters),
...TaskParameterSerializer.serializeInput(),
...TaskParameterSerializer.serializeCloudRunnerOptions(),
...CloudRunnerCustomHooks.getSecrets(CloudRunnerCustomHooks.getHooks(buildParameters.commandHooks)),
...CloudRunnerCommandHooks.getSecrets(CloudRunnerCommandHooks.getHooks(buildParameters.commandHooks)),
]
.filter(
(x) =>

View File

@ -6,8 +6,8 @@ import CloudRunnerLogger from '../services/cloud-runner-logger';
import { v4 as uuidv4 } from 'uuid';
import CloudRunnerOptions from '../cloud-runner-options';
import setups from './cloud-runner-suite.test';
import { CloudRunnerCustomSteps } from '../services/cloud-runner-custom-steps';
import { CloudRunnerCustomHooks } from '../services/cloud-runner-custom-hooks';
import { CloudRunnerContainerHook } from '../services/cloud-runner-hooks/cloud-runner-container-hook';
import { CloudRunnerCommandHooks } from '../services/cloud-runner-hooks/cloud-runner-command-hook';
async function CreateParameters(overrides: any) {
if (overrides) {
@ -33,8 +33,8 @@ commands: echo "test"`;
cacheKey: `test-case-${uuidv4()}`,
};
CloudRunner.setup(await CreateParameters(overrides));
const stringObject = CloudRunnerCustomSteps.ParseSteps(yamlString);
const stringObject2 = CloudRunnerCustomSteps.ParseSteps(yamlString2);
const stringObject = CloudRunnerContainerHook.ParseContainerHooks(yamlString);
const stringObject2 = CloudRunnerContainerHook.ParseContainerHooks(yamlString2);
CloudRunnerLogger.log(yamlString);
CloudRunnerLogger.log(JSON.stringify(stringObject, undefined, 4));
@ -44,7 +44,7 @@ commands: echo "test"`;
expect(stringObject2.length).toBe(1);
expect(stringObject2[0].hook).toBe(`before`);
const getCustomStepsFromFiles = CloudRunnerCustomSteps.GetCustomStepsFromFiles(`before`);
const getCustomStepsFromFiles = CloudRunnerContainerHook.GetContainerHooksFromFiles(`before`);
CloudRunnerLogger.log(JSON.stringify(getCustomStepsFromFiles, undefined, 4));
});
if (CloudRunnerOptions.cloudRunnerDebug && CloudRunnerOptions.providerStrategy !== `k8s`) {
@ -55,13 +55,13 @@ commands: echo "test"`;
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
targetPlatform: 'StandaloneLinux64',
cacheKey: `test-case-${uuidv4()}`,
customStepFiles: `my-test-step-pre-build,my-test-step-post-build`,
containerHookFiles: `my-test-step-pre-build,my-test-step-post-build`,
customHookFiles: `my-test-hook-pre-build,my-test-hook-post-build`,
};
const buildParameter2 = await CreateParameters(overrides);
await CloudRunner.setup(buildParameter2);
const beforeHooks = CloudRunnerCustomHooks.GetCustomHooksFromFiles(`before`);
const afterHooks = CloudRunnerCustomHooks.GetCustomHooksFromFiles(`after`);
const beforeHooks = CloudRunnerCommandHooks.GetCustomHooksFromFiles(`before`);
const afterHooks = CloudRunnerCommandHooks.GetCustomHooksFromFiles(`after`);
expect(beforeHooks).toHaveLength(1);
expect(afterHooks).toHaveLength(1);
});
@ -72,13 +72,13 @@ commands: echo "test"`;
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
targetPlatform: 'StandaloneLinux64',
cacheKey: `test-case-${uuidv4()}`,
customStepFiles: `my-test-step-pre-build,my-test-step-post-build`,
containerHookFiles: `my-test-step-pre-build,my-test-step-post-build`,
customHookFiles: `my-test-hook-pre-build,my-test-hook-post-build`,
};
const buildParameter2 = await CreateParameters(overrides);
await CloudRunner.setup(buildParameter2);
const beforeSteps = CloudRunnerCustomSteps.GetCustomStepsFromFiles(`before`);
const afterSteps = CloudRunnerCustomSteps.GetCustomStepsFromFiles(`after`);
const beforeSteps = CloudRunnerContainerHook.GetContainerHooksFromFiles(`before`);
const afterSteps = CloudRunnerContainerHook.GetContainerHooksFromFiles(`after`);
expect(beforeSteps).toHaveLength(1);
expect(afterSteps).toHaveLength(1);
});
@ -89,7 +89,7 @@ commands: echo "test"`;
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
targetPlatform: 'StandaloneLinux64',
cacheKey: `test-case-${uuidv4()}`,
customStepFiles: `my-test-step-pre-build,my-test-step-post-build`,
containerHookFiles: `my-test-step-pre-build,my-test-step-post-build`,
customHookFiles: `my-test-hook-pre-build,my-test-hook-post-build`,
};
const buildParameter2 = await CreateParameters(overrides);

View File

@ -28,7 +28,7 @@ describe('Cloud Runner pre-built S3 steps', () => {
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
targetPlatform: 'StandaloneLinux64',
cacheKey: `test-case-${uuidv4()}`,
customStepFiles: `aws-s3-pull-cache,aws-s3-upload-cache,aws-s3-upload-build`,
containerHookFiles: `aws-s3-pull-cache,aws-s3-upload-cache,aws-s3-upload-build`,
};
const buildParameter2 = await CreateParameters(overrides);
const baseImage2 = new ImageTag(buildParameter2);

View File

@ -28,10 +28,10 @@ describe('Cloud Runner Caching', () => {
unityVersion: UnityVersioning.determineUnityVersion('test-project', UnityVersioning.read('test-project')),
targetPlatform: 'StandaloneLinux64',
cacheKey: `test-case-${uuidv4()}`,
customStepFiles: `debug-cache`,
containerHookFiles: `debug-cache`,
};
if (CloudRunnerOptions.providerStrategy === `k8s`) {
overrides.customStepFiles += `,aws-s3-pull-cache,aws-s3-upload-cache`;
overrides.containerHookFiles += `,aws-s3-pull-cache,aws-s3-upload-cache`;
}
const buildParameter = await CreateParameters(overrides);
expect(buildParameter.projectPath).toEqual(overrides.projectPath);

View File

@ -3,10 +3,10 @@ import { CloudRunnerFolders } from '../services/cloud-runner-folders';
import { CloudRunnerStepState } from '../cloud-runner-step-state';
import { WorkflowInterface } from './workflow-interface';
import * as core from '@actions/core';
import { CloudRunnerCustomHooks } from '../services/cloud-runner-custom-hooks';
import { CloudRunnerCommandHooks } from '../services/cloud-runner-hooks/cloud-runner-command-hook';
import path from 'node:path';
import CloudRunner from '../cloud-runner';
import { CloudRunnerCustomSteps } from '../services/cloud-runner-custom-steps';
import { CloudRunnerContainerHook } from '../services/cloud-runner-hooks/cloud-runner-container-hook';
export class BuildAutomationWorkflow implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) {
@ -19,7 +19,7 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
let output = '';
output += await CloudRunnerCustomSteps.RunPreBuildSteps(cloudRunnerStepState);
output += await CloudRunnerContainerHook.RunPreBuildSteps(cloudRunnerStepState);
CloudRunnerLogger.logWithTime('Configurable pre build step(s) time');
if (!CloudRunner.buildParameters.isCliMode) core.startGroup('build');
@ -39,7 +39,7 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
if (!CloudRunner.buildParameters.isCliMode) core.endGroup();
CloudRunnerLogger.logWithTime('Build time');
output += await CloudRunnerCustomSteps.RunPostBuildSteps(cloudRunnerStepState);
output += await CloudRunnerContainerHook.RunPostBuildSteps(cloudRunnerStepState);
CloudRunnerLogger.logWithTime('Configurable post build step(s) time');
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
@ -48,10 +48,10 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
}
private static get BuildWorkflow() {
const setupHooks = CloudRunnerCustomHooks.getHooks(CloudRunner.buildParameters.commandHooks).filter((x) =>
const setupHooks = CloudRunnerCommandHooks.getHooks(CloudRunner.buildParameters.commandHooks).filter((x) =>
x.step?.includes(`setup`),
);
const buildHooks = CloudRunnerCustomHooks.getHooks(CloudRunner.buildParameters.commandHooks).filter((x) =>
const buildHooks = CloudRunnerCommandHooks.getHooks(CloudRunner.buildParameters.commandHooks).filter((x) =>
x.step?.includes(`build`),
);
const builderPath = CloudRunnerFolders.ToLinuxFolder(

View File

@ -2,8 +2,8 @@ import CloudRunnerLogger from '../services/cloud-runner-logger';
import CloudRunnerSecret from '../services/cloud-runner-secret';
import { CloudRunnerFolders } from '../services/cloud-runner-folders';
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
import { CloudRunnerCustomSteps } from '../services/cloud-runner-custom-steps';
import { CustomStep } from '../services/custom-step';
import { CloudRunnerContainerHook } from '../services/cloud-runner-hooks/cloud-runner-container-hook';
import { ContainerHook } from '../services/cloud-runner-hooks/container-hook';
import CloudRunner from '../cloud-runner';
export class CustomWorkflow {
@ -13,14 +13,14 @@ export class CustomWorkflow {
secrets: CloudRunnerSecret[],
): Promise<string> {
return await CustomWorkflow.runContainerJob(
CloudRunnerCustomSteps.ParseSteps(buildSteps),
CloudRunnerContainerHook.ParseContainerHooks(buildSteps),
environmentVariables,
secrets,
);
}
public static async runContainerJob(
steps: CustomStep[],
steps: ContainerHook[],
environmentVariables: CloudRunnerEnvironmentVariable[],
secrets: CloudRunnerSecret[],
) {