pull/289/head
Frostebite 2021-08-17 22:13:46 +00:00 committed by GitHub
parent af72cd4a7a
commit 150c69904b
14 changed files with 94 additions and 94 deletions

View File

@ -51,7 +51,7 @@ jobs:
id: k8s-unity-build id: k8s-unity-build
env: env:
DEBUG: true DEBUG: true
remoteBuilderBranch: remote-builder/unified-providers cloudRunerBranch: remote-builder/unified-providers
with: with:
cloudRunnerCluster: k8s cloudRunnerCluster: k8s
targetPlatform: ${{ matrix.targetPlatform }} targetPlatform: ${{ matrix.targetPlatform }}

60
dist/index.js vendored
View File

@ -47,10 +47,10 @@ function run() {
const buildParameters = yield model_1.BuildParameters.create(); const buildParameters = yield model_1.BuildParameters.create();
const baseImage = new model_1.ImageTag(buildParameters); const baseImage = new model_1.ImageTag(buildParameters);
let builtImage; let builtImage;
switch (buildParameters.remoteBuildCluster) { switch (buildParameters.cloudRunnerCluster) {
case 'aws': case 'aws':
case 'k8s': case 'k8s':
yield model_1.RemoteBuilder.build(buildParameters, baseImage); yield model_1.CloudRunner.build(buildParameters, baseImage);
break; break;
// default and local case // default and local case
default: default:
@ -229,12 +229,12 @@ class BuildParameters {
customParameters: input_1.default.customParameters, customParameters: input_1.default.customParameters,
sshAgent: input_1.default.sshAgent, sshAgent: input_1.default.sshAgent,
chownFilesTo: input_1.default.chownFilesTo, chownFilesTo: input_1.default.chownFilesTo,
remoteBuildCluster: input_1.default.remoteBuildCluster, cloudRunnerCluster: input_1.default.cloudRunnerCluster,
awsBaseStackName: input_1.default.awsBaseStackName, awsBaseStackName: input_1.default.awsBaseStackName,
kubeConfig: input_1.default.kubeConfig, kubeConfig: input_1.default.kubeConfig,
githubToken: input_1.default.githubToken, githubToken: input_1.default.githubToken,
remoteBuildMemory: input_1.default.remoteBuildMemory, cloudRunnerMemory: input_1.default.cloudRunnerMemory,
remoteBuildCpu: input_1.default.remoteBuildCpu, cloudRunnerCpu: input_1.default.cloudRunnerCpu,
kubeVolumeSize: input_1.default.kubeVolumeSize, kubeVolumeSize: input_1.default.kubeVolumeSize,
kubeVolume: input_1.default.kubeVolume, kubeVolume: input_1.default.kubeVolume,
postBuildSteps: input_1.default.postBuildSteps, postBuildSteps: input_1.default.postBuildSteps,
@ -917,7 +917,7 @@ class CloudRunner {
CloudRunner.setupDefaultSecrets(); CloudRunner.setupDefaultSecrets();
try { try {
CloudRunner.setupBuildPlatform(); CloudRunner.setupBuildPlatform();
yield this.RemoteBuilderProviderPlatform.setupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets); yield this.CloudRunnerProviderPlatform.setupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
yield CloudRunner.SetupStep(); yield CloudRunner.SetupStep();
const t2 = Date.now(); const t2 = Date.now();
core.info(`Setup time: ${Math.floor((t2 - t) / 1000)}s`); core.info(`Setup time: ${Math.floor((t2 - t) / 1000)}s`);
@ -937,14 +937,14 @@ class CloudRunner {
}; };
return secret; return secret;
}); });
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, step['image'], step['commands'], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [ yield this.CloudRunnerProviderPlatform.runBuildTask(this.buildGuid, step['image'], step['commands'], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [
{ {
name: 'GITHUB_SHA', name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '', value: process.env.GITHUB_SHA || '',
}, },
], [...this.defaultSecrets, ...stepSecrets]); ], [...this.defaultSecrets, ...stepSecrets]);
} }
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets); yield this.CloudRunnerProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
} }
catch (error) { catch (error) {
yield CloudRunner.handleException(error); yield CloudRunner.handleException(error);
@ -971,16 +971,16 @@ class CloudRunner {
const purgeRemoteCache = process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined; const purgeRemoteCache = process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
const initializeSourceRepoForCaching = `${this.builderPathFull}/dist/remote-builder/cloneNoLFS.sh "${this.repoPathFull}" "${targetBuildRepoUrl}" "${testLFSFile}"`; const initializeSourceRepoForCaching = `${this.builderPathFull}/dist/remote-builder/cloneNoLFS.sh "${this.repoPathFull}" "${targetBuildRepoUrl}" "${testLFSFile}"`;
const handleCaching = `${this.builderPathFull}/dist/remote-builder/handleCaching.sh "${this.cacheFolderFull}" "${this.libraryFolderFull}" "${lfsDirectory}" "${purgeRemoteCache}"`; const handleCaching = `${this.builderPathFull}/dist/remote-builder/handleCaching.sh "${this.cacheFolderFull}" "${this.libraryFolderFull}" "${lfsDirectory}" "${purgeRemoteCache}"`;
const remoteBuilderBranch = process.env.remoteBuilderBranch ? `--branch "${process.env.remoteBuilderBranch}"` : ''; const CloudRunnerBranch = process.env.CloudRunnerBranch ? `--branch "${process.env.CloudRunnerBranch}"` : '';
const cloneRemoteBuilder = `git clone -q ${remoteBuilderBranch} ${unityBuilderRepoUrl} ${this.builderPathFull}`; const cloneCloudRunner = `git clone -q ${CloudRunnerBranch} ${unityBuilderRepoUrl} ${this.builderPathFull}`;
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine/git', [ yield this.CloudRunnerProviderPlatform.runBuildTask(this.buildGuid, 'alpine/git', [
` printenv ` printenv
apk update -q apk update -q
apk add unzip zip git-lfs jq tree -q apk add unzip zip git-lfs jq tree -q
mkdir -p ${this.buildPathFull} mkdir -p ${this.buildPathFull}
mkdir -p ${this.builderPathFull} mkdir -p ${this.builderPathFull}
mkdir -p ${this.repoPathFull} mkdir -p ${this.repoPathFull}
${cloneRemoteBuilder} ${cloneCloudRunner}
echo ' ' echo ' '
echo 'Initializing source repository for cloning with caching of LFS files' echo 'Initializing source repository for cloning with caching of LFS files'
${initializeSourceRepoForCaching} ${initializeSourceRepoForCaching}
@ -1008,7 +1008,7 @@ class CloudRunner {
static BuildStep(baseImage) { static BuildStep(baseImage) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info('Starting part 2/4 (build unity project)'); core.info('Starting part 2/4 (build unity project)');
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, baseImage.toString(), [ yield this.CloudRunnerProviderPlatform.runBuildTask(this.buildGuid, baseImage.toString(), [
` `
printenv printenv
export GITHUB_WORKSPACE="${this.repoPathFull}" export GITHUB_WORKSPACE="${this.repoPathFull}"
@ -1028,7 +1028,7 @@ class CloudRunner {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info('Starting step 3/4 build compression'); core.info('Starting step 3/4 build compression');
// Cleanup // Cleanup
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine', [ yield this.CloudRunnerProviderPlatform.runBuildTask(this.buildGuid, 'alpine', [
` `
printenv printenv
apk update -q apk update -q
@ -1055,15 +1055,15 @@ class CloudRunner {
}); });
} }
static setupBuildPlatform() { static setupBuildPlatform() {
switch (this.buildParams.remoteBuildCluster) { switch (this.buildParams.cloudRunnerCluster) {
case 'aws': case 'aws':
core.info('Building with AWS'); core.info('Building with AWS');
this.RemoteBuilderProviderPlatform = new aws_build_platform_1.default(this.buildParams); this.CloudRunnerProviderPlatform = new aws_build_platform_1.default(this.buildParams);
break; break;
default: default:
case 'k8s': case 'k8s':
core.info('Building with Kubernetes'); core.info('Building with Kubernetes');
this.RemoteBuilderProviderPlatform = new kubernetes_build_platform_1.default(this.buildParams); this.CloudRunnerProviderPlatform = new kubernetes_build_platform_1.default(this.buildParams);
break; break;
} }
} }
@ -1138,11 +1138,11 @@ class CloudRunner {
return [ return [
{ {
name: 'ContainerMemory', name: 'ContainerMemory',
value: this.buildParams.remoteBuildMemory, value: this.buildParams.cloudRunnerMemory,
}, },
{ {
name: 'ContainerCpu', name: 'ContainerCpu',
value: this.buildParams.remoteBuildCpu, value: this.buildParams.cloudRunnerCpu,
}, },
{ {
name: 'GITHUB_WORKSPACE', name: 'GITHUB_WORKSPACE',
@ -1206,7 +1206,7 @@ class CloudRunner {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.error(JSON.stringify(error, undefined, 4)); core.error(JSON.stringify(error, undefined, 4));
core.setFailed('Remote Builder failed'); core.setFailed('Remote Builder failed');
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets); yield this.CloudRunnerProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
}); });
} }
} }
@ -1581,8 +1581,8 @@ class KubernetesJobSpecFactory {
workingDir: `/${workingDirectory}`, workingDir: `/${workingDirectory}`,
resources: { resources: {
requests: { requests: {
memory: buildParameters.remoteBuildMemory, memory: buildParameters.cloudRunnerMemory,
cpu: buildParameters.remoteBuildCpu, cpu: buildParameters.cloudRunnerCpu,
}, },
}, },
env: environment, env: environment,
@ -2286,7 +2286,7 @@ 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.RemoteBuilder = exports.Versioning = exports.Unity = exports.Project = exports.Platform = exports.Output = exports.ImageTag = exports.Input = exports.Docker = exports.Cache = exports.BuildParameters = exports.Action = void 0; exports.CloudRunner = exports.Versioning = exports.Unity = exports.Project = exports.Platform = exports.Output = exports.ImageTag = exports.Input = exports.Docker = exports.Cache = exports.BuildParameters = exports.Action = void 0;
const action_1 = __importDefault(__webpack_require__(89088)); const action_1 = __importDefault(__webpack_require__(89088));
exports.Action = action_1.default; exports.Action = action_1.default;
const build_parameters_1 = __importDefault(__webpack_require__(80787)); const build_parameters_1 = __importDefault(__webpack_require__(80787));
@ -2310,7 +2310,7 @@ exports.Unity = unity_1.default;
const versioning_1 = __importDefault(__webpack_require__(88729)); const versioning_1 = __importDefault(__webpack_require__(88729));
exports.Versioning = versioning_1.default; exports.Versioning = versioning_1.default;
const cloud_runner_1 = __importDefault(__webpack_require__(79144)); const cloud_runner_1 = __importDefault(__webpack_require__(79144));
exports.RemoteBuilder = cloud_runner_1.default; exports.CloudRunner = cloud_runner_1.default;
/***/ }), /***/ }),
@ -2398,8 +2398,8 @@ class Input {
static get postBuildSteps() { static get postBuildSteps() {
return core.getInput('postBuildSteps'); return core.getInput('postBuildSteps');
} }
static get remoteBuildCluster() { static get cloudRunnerCluster() {
return core.getInput('remoteBuildCluster') || ''; return core.getInput('cloudRunnerCluster') || '';
} }
static get awsBaseStackName() { static get awsBaseStackName() {
return core.getInput('awsBaseStackName') || ''; return core.getInput('awsBaseStackName') || '';
@ -2410,11 +2410,11 @@ class Input {
static get githubToken() { static get githubToken() {
return core.getInput('githubToken') || ''; return core.getInput('githubToken') || '';
} }
static get remoteBuildMemory() { static get cloudRunnerMemory() {
return core.getInput('remoteBuildMemory') || '750M'; return core.getInput('cloudRunnerMemory') || '750M';
} }
static get remoteBuildCpu() { static get cloudRunnerCpu() {
return core.getInput('remoteBuildCpu') || '1.0'; return core.getInput('cloudRunnerCpu') || '1.0';
} }
static get kubeVolumeSize() { static get kubeVolumeSize() {
return core.getInput('kubeVolumeSize') || '5Gi'; return core.getInput('kubeVolumeSize') || '5Gi';

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
cacheFolderFull=$1 cacheFolderFull=$1
libraryFolderFull=$2 libraryFolderFull=$2
gitLFSDestinationFolder=$3 gitLFSDestinationFolder=$3
purgeRemoteBuilderCache=$4 purgeCloudRunnerCache=$4
cacheFolderWithBranch="$cacheFolderFull" cacheFolderWithBranch="$cacheFolderFull"
lfsCacheFolder="$cacheFolderFull/lfs" lfsCacheFolder="$cacheFolderFull/lfs"
@ -78,7 +78,7 @@ echo "copied $LFS_ASSETS_HASH to $lfsCacheFolder"
echo ' ' echo ' '
# purge cache # purge cache
if [ "$purgeRemoteBuilderCache" == "true" ]; then if [ "$purgeCloudRunnerCache" == "true" ]; then
echo "purging the entire cache" echo "purging the entire cache"
rm -r "$cacheFolderFull" rm -r "$cacheFolderFull"
echo ' ' echo ' '

View File

@ -1,5 +1,5 @@
import * as core from '@actions/core'; import * as core from '@actions/core';
import { Action, BuildParameters, Cache, Docker, ImageTag, Output, RemoteBuilder } from './model'; import { Action, BuildParameters, Cache, Docker, ImageTag, Output, CloudRunner } from './model';
async function run() { async function run() {
try { try {
@ -12,10 +12,10 @@ async function run() {
const baseImage = new ImageTag(buildParameters); const baseImage = new ImageTag(buildParameters);
let builtImage; let builtImage;
switch (buildParameters.remoteBuildCluster) { switch (buildParameters.cloudRunnerCluster) {
case 'aws': case 'aws':
case 'k8s': case 'k8s':
await RemoteBuilder.build(buildParameters, baseImage); await CloudRunner.build(buildParameters, baseImage);
break; break;
// default and local case // default and local case

View File

@ -23,12 +23,12 @@ class BuildParameters {
public androidKeyaliasPass!: string; public androidKeyaliasPass!: string;
public customParameters!: string; public customParameters!: string;
public sshAgent!: string; public sshAgent!: string;
public remoteBuildCluster!: string; public cloudRunnerCluster!: string;
public awsBaseStackName!: string; public awsBaseStackName!: string;
public kubeConfig!: string; public kubeConfig!: string;
public githubToken!: string; public githubToken!: string;
public remoteBuildMemory!: string; public cloudRunnerMemory!: string;
public remoteBuildCpu!: string; public cloudRunnerCpu!: string;
public kubeVolumeSize!: string; public kubeVolumeSize!: string;
public kubeVolume!: string; public kubeVolume!: string;
public chownFilesTo!: string; public chownFilesTo!: string;
@ -65,12 +65,12 @@ class BuildParameters {
customParameters: Input.customParameters, customParameters: Input.customParameters,
sshAgent: Input.sshAgent, sshAgent: Input.sshAgent,
chownFilesTo: Input.chownFilesTo, chownFilesTo: Input.chownFilesTo,
remoteBuildCluster: Input.remoteBuildCluster, cloudRunnerCluster: Input.cloudRunnerCluster,
awsBaseStackName: Input.awsBaseStackName, awsBaseStackName: Input.awsBaseStackName,
kubeConfig: Input.kubeConfig, kubeConfig: Input.kubeConfig,
githubToken: Input.githubToken, githubToken: Input.githubToken,
remoteBuildMemory: Input.remoteBuildMemory, cloudRunnerMemory: Input.cloudRunnerMemory,
remoteBuildCpu: Input.remoteBuildCpu, cloudRunnerCpu: Input.cloudRunnerCpu,
kubeVolumeSize: Input.kubeVolumeSize, kubeVolumeSize: Input.kubeVolumeSize,
kubeVolume: Input.kubeVolume, kubeVolume: Input.kubeVolume,
postBuildSteps: Input.postBuildSteps, postBuildSteps: Input.postBuildSteps,

View File

@ -1,11 +1,11 @@
import * as SDK from 'aws-sdk'; import * as SDK from 'aws-sdk';
import { customAlphabet } from 'nanoid'; import { customAlphabet } from 'nanoid';
import RemoteBuilderSecret from './cloud-runner-secret'; import CloudRunnerSecret from './cloud-runner-secret';
import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import * as fs from 'fs'; import * as fs from 'fs';
import * as core from '@actions/core'; import * as core from '@actions/core';
import CloudRunnerTaskDef from './cloud-runner-task-def'; import CloudRunnerTaskDef from './cloud-runner-task-def';
import RemoteBuilderConstants from './cloud-runner-constants'; import CloudRunnerConstants from './cloud-runner-constants';
import AWSBuildRunner from './aws-build-runner'; import AWSBuildRunner from './aws-build-runner';
import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface'; import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface';
import BuildParameters from '../build-parameters'; import BuildParameters from '../build-parameters';
@ -44,8 +44,8 @@ class AWSBuildEnvironment implements CloudRunnerProviderInterface {
commands: string[], commands: string[],
mountdir: string, mountdir: string,
workingdir: string, workingdir: string,
environment: RemoteBuilderEnvironmentVariable[], environment: CloudRunnerEnvironmentVariable[],
secrets: RemoteBuilderSecret[], secrets: CloudRunnerSecret[],
): Promise<void> { ): Promise<void> {
const ECS = new SDK.ECS(); const ECS = new SDK.ECS();
const CF = new SDK.CloudFormation(); const CF = new SDK.CloudFormation();
@ -115,9 +115,9 @@ class AWSBuildEnvironment implements CloudRunnerProviderInterface {
commands: string[], commands: string[],
mountdir: string, mountdir: string,
workingdir: string, workingdir: string,
secrets: RemoteBuilderSecret[], secrets: CloudRunnerSecret[],
): Promise<CloudRunnerTaskDef> { ): Promise<CloudRunnerTaskDef> {
const logGuid = customAlphabet(RemoteBuilderConstants.alphabet, 9)(); const logGuid = customAlphabet(CloudRunnerConstants.alphabet, 9)();
commands[1] += ` commands[1] += `
echo "${logGuid}" echo "${logGuid}"
`; `;
@ -323,7 +323,7 @@ class AWSBuildEnvironment implements CloudRunnerProviderInterface {
CF: SDK.CloudFormation, CF: SDK.CloudFormation,
taskDefStackName: string, taskDefStackName: string,
taskDefCloudFormation: string, taskDefCloudFormation: string,
secrets: RemoteBuilderSecret[], secrets: CloudRunnerSecret[],
) { ) {
core.info(JSON.stringify(secrets, undefined, 4)); core.info(JSON.stringify(secrets, undefined, 4));
core.info(taskDefCloudFormation); core.info(taskDefCloudFormation);

View File

@ -1,5 +1,5 @@
import * as AWS from 'aws-sdk'; import * as AWS from 'aws-sdk';
import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import * as core from '@actions/core'; import * as core from '@actions/core';
import CloudRunnerTaskDef from './cloud-runner-task-def'; import CloudRunnerTaskDef from './cloud-runner-task-def';
import * as zlib from 'zlib'; import * as zlib from 'zlib';
@ -9,7 +9,7 @@ class AWSBuildRunner {
taskDef: CloudRunnerTaskDef, taskDef: CloudRunnerTaskDef,
ECS: AWS.ECS, ECS: AWS.ECS,
CF: AWS.CloudFormation, CF: AWS.CloudFormation,
environment: RemoteBuilderEnvironmentVariable[], environment: CloudRunnerEnvironmentVariable[],
buildGuid: string, buildGuid: string,
commands: string[], commands: string[],
) { ) {

View File

@ -1,11 +1,11 @@
import AWSBuildPlatform from './aws-build-platform'; import AWSBuildPlatform from './aws-build-platform';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { BuildParameters } from '..'; import { BuildParameters } from '..';
import RemoteBuilderNamespace from './cloud-runner-namespace'; import CloudRunnerNamespace from './cloud-runner-namespace';
import RemoteBuilderSecret from './cloud-runner-secret'; import CloudRunnerSecret from './cloud-runner-secret';
import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface'; import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface';
import Kubernetes from './kubernetes-build-platform'; import Kubernetes from './kubernetes-build-platform';
import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import ImageEnvironmentFactory from '../image-environment-factory'; import ImageEnvironmentFactory from '../image-environment-factory';
import YAML from 'yaml'; import YAML from 'yaml';
const repositoryFolder = 'repo'; const repositoryFolder = 'repo';
@ -13,9 +13,9 @@ const buildVolumeFolder = 'data';
const cacheFolder = 'cache'; const cacheFolder = 'cache';
class CloudRunner { class CloudRunner {
static RemoteBuilderProviderPlatform: CloudRunnerProviderInterface; static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;
private static buildParams: BuildParameters; private static buildParams: BuildParameters;
private static defaultSecrets: RemoteBuilderSecret[]; private static defaultSecrets: CloudRunnerSecret[];
private static buildGuid: string; private static buildGuid: string;
private static branchName: string; private static branchName: string;
private static buildPathFull: string; private static buildPathFull: string;
@ -35,7 +35,7 @@ class CloudRunner {
static async build(buildParameters: BuildParameters, baseImage) { static async build(buildParameters: BuildParameters, baseImage) {
const t = Date.now(); const t = Date.now();
CloudRunner.buildGuid = RemoteBuilderNamespace.generateBuildName( CloudRunner.buildGuid = CloudRunnerNamespace.generateBuildName(
CloudRunner.readRunNumber(), CloudRunner.readRunNumber(),
buildParameters.platform, buildParameters.platform,
); );
@ -45,7 +45,7 @@ class CloudRunner {
CloudRunner.setupDefaultSecrets(); CloudRunner.setupDefaultSecrets();
try { try {
CloudRunner.setupBuildPlatform(); CloudRunner.setupBuildPlatform();
await this.RemoteBuilderProviderPlatform.setupSharedBuildResources( await this.CloudRunnerProviderPlatform.setupSharedBuildResources(
this.buildGuid, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,
@ -62,15 +62,15 @@ class CloudRunner {
this.buildParams.postBuildSteps = YAML.parse(this.buildParams.postBuildSteps); this.buildParams.postBuildSteps = YAML.parse(this.buildParams.postBuildSteps);
core.info(`Post build steps ${JSON.stringify(this.buildParams.postBuildSteps, undefined, 4)}`); core.info(`Post build steps ${JSON.stringify(this.buildParams.postBuildSteps, undefined, 4)}`);
for (const step of this.buildParams.postBuildSteps) { for (const step of this.buildParams.postBuildSteps) {
const stepSecrets: RemoteBuilderSecret[] = step.secrets.map((x) => { const stepSecrets: CloudRunnerSecret[] = step.secrets.map((x) => {
const secret: RemoteBuilderSecret = { const secret: CloudRunnerSecret = {
ParameterKey: x.name, ParameterKey: x.name,
EnvironmentVariable: x.name, EnvironmentVariable: x.name,
ParameterValue: x.value, ParameterValue: x.value,
}; };
return secret; return secret;
}); });
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.CloudRunnerProviderPlatform.runBuildTask(
this.buildGuid, this.buildGuid,
step['image'], step['image'],
step['commands'], step['commands'],
@ -85,7 +85,7 @@ class CloudRunner {
[...this.defaultSecrets, ...stepSecrets], [...this.defaultSecrets, ...stepSecrets],
); );
} }
await this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources( await this.CloudRunnerProviderPlatform.cleanupSharedBuildResources(
this.buildGuid, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,
@ -119,9 +119,9 @@ class CloudRunner {
const purgeRemoteCache = process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined; const purgeRemoteCache = process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
const initializeSourceRepoForCaching = `${this.builderPathFull}/dist/remote-builder/cloneNoLFS.sh "${this.repoPathFull}" "${targetBuildRepoUrl}" "${testLFSFile}"`; const initializeSourceRepoForCaching = `${this.builderPathFull}/dist/remote-builder/cloneNoLFS.sh "${this.repoPathFull}" "${targetBuildRepoUrl}" "${testLFSFile}"`;
const handleCaching = `${this.builderPathFull}/dist/remote-builder/handleCaching.sh "${this.cacheFolderFull}" "${this.libraryFolderFull}" "${lfsDirectory}" "${purgeRemoteCache}"`; const handleCaching = `${this.builderPathFull}/dist/remote-builder/handleCaching.sh "${this.cacheFolderFull}" "${this.libraryFolderFull}" "${lfsDirectory}" "${purgeRemoteCache}"`;
const remoteBuilderBranch = process.env.remoteBuilderBranch ? `--branch "${process.env.remoteBuilderBranch}"` : ''; const CloudRunnerBranch = process.env.CloudRunnerBranch ? `--branch "${process.env.CloudRunnerBranch}"` : '';
const cloneRemoteBuilder = `git clone -q ${remoteBuilderBranch} ${unityBuilderRepoUrl} ${this.builderPathFull}`; const cloneCloudRunner = `git clone -q ${CloudRunnerBranch} ${unityBuilderRepoUrl} ${this.builderPathFull}`;
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.CloudRunnerProviderPlatform.runBuildTask(
this.buildGuid, this.buildGuid,
'alpine/git', 'alpine/git',
[ [
@ -131,7 +131,7 @@ class CloudRunner {
mkdir -p ${this.buildPathFull} mkdir -p ${this.buildPathFull}
mkdir -p ${this.builderPathFull} mkdir -p ${this.builderPathFull}
mkdir -p ${this.repoPathFull} mkdir -p ${this.repoPathFull}
${cloneRemoteBuilder} ${cloneCloudRunner}
echo ' ' echo ' '
echo 'Initializing source repository for cloning with caching of LFS files' echo 'Initializing source repository for cloning with caching of LFS files'
${initializeSourceRepoForCaching} ${initializeSourceRepoForCaching}
@ -163,7 +163,7 @@ class CloudRunner {
private static async BuildStep(baseImage: any) { private static async BuildStep(baseImage: any) {
core.info('Starting part 2/4 (build unity project)'); core.info('Starting part 2/4 (build unity project)');
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.CloudRunnerProviderPlatform.runBuildTask(
this.buildGuid, this.buildGuid,
baseImage.toString(), baseImage.toString(),
[ [
@ -190,7 +190,7 @@ class CloudRunner {
private static async CompressionStep() { private static async CompressionStep() {
core.info('Starting step 3/4 build compression'); core.info('Starting step 3/4 build compression');
// Cleanup // Cleanup
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.CloudRunnerProviderPlatform.runBuildTask(
this.buildGuid, this.buildGuid,
'alpine', 'alpine',
[ [
@ -225,15 +225,15 @@ class CloudRunner {
} }
private static setupBuildPlatform() { private static setupBuildPlatform() {
switch (this.buildParams.remoteBuildCluster) { switch (this.buildParams.cloudRunnerCluster) {
case 'aws': case 'aws':
core.info('Building with AWS'); core.info('Building with AWS');
this.RemoteBuilderProviderPlatform = new AWSBuildPlatform(this.buildParams); this.CloudRunnerProviderPlatform = new AWSBuildPlatform(this.buildParams);
break; break;
default: default:
case 'k8s': case 'k8s':
core.info('Building with Kubernetes'); core.info('Building with Kubernetes');
this.RemoteBuilderProviderPlatform = new Kubernetes(this.buildParams); this.CloudRunnerProviderPlatform = new Kubernetes(this.buildParams);
break; break;
} }
} }
@ -312,15 +312,15 @@ class CloudRunner {
); );
} }
private static readBuildEnvironmentVariables(): RemoteBuilderEnvironmentVariable[] { private static readBuildEnvironmentVariables(): CloudRunnerEnvironmentVariable[] {
return [ return [
{ {
name: 'ContainerMemory', name: 'ContainerMemory',
value: this.buildParams.remoteBuildMemory, value: this.buildParams.cloudRunnerMemory,
}, },
{ {
name: 'ContainerCpu', name: 'ContainerCpu',
value: this.buildParams.remoteBuildCpu, value: this.buildParams.cloudRunnerCpu,
}, },
{ {
name: 'GITHUB_WORKSPACE', name: 'GITHUB_WORKSPACE',
@ -385,7 +385,7 @@ class CloudRunner {
private static async handleException(error: unknown) { private static async handleException(error: unknown) {
core.error(JSON.stringify(error, undefined, 4)); core.error(JSON.stringify(error, undefined, 4));
core.setFailed('Remote Builder failed'); core.setFailed('Remote Builder failed');
await this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources( await this.CloudRunnerProviderPlatform.cleanupSharedBuildResources(
this.buildGuid, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,

View File

@ -2,9 +2,9 @@ import * as k8s from '@kubernetes/client-node';
import { BuildParameters } from '..'; import { BuildParameters } from '..';
import * as core from '@actions/core'; import * as core from '@actions/core';
import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface'; import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface';
import RemoteBuilderSecret from './cloud-runner-secret'; import CloudRunnerSecret from './cloud-runner-secret';
import KubernetesStorage from './kubernetes-storage'; import KubernetesStorage from './kubernetes-storage';
import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import KubernetesLogging from './kubernetes-logging'; import KubernetesLogging from './kubernetes-logging';
import KubernetesSecret from './kubernetes-secret'; import KubernetesSecret from './kubernetes-secret';
import KubernetesUtilities from './kubernetes-utils'; import KubernetesUtilities from './kubernetes-utils';
@ -77,8 +77,8 @@ class Kubernetes implements CloudRunnerProviderInterface {
commands: string[], commands: string[],
mountdir: string, mountdir: string,
workingdir: string, workingdir: string,
environment: RemoteBuilderEnvironmentVariable[], environment: CloudRunnerEnvironmentVariable[],
secrets: RemoteBuilderSecret[], secrets: CloudRunnerSecret[],
): Promise<void> { ): Promise<void> {
try { try {
// setup // setup

View File

@ -1,5 +1,5 @@
import BuildParameters from '../build-parameters'; import BuildParameters from '../build-parameters';
import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
class KubernetesJobSpecFactory { class KubernetesJobSpecFactory {
static getJobSpec( static getJobSpec(
@ -7,7 +7,7 @@ class KubernetesJobSpecFactory {
image: string, image: string,
mountdir: string, mountdir: string,
workingDirectory: string, workingDirectory: string,
environment: RemoteBuilderEnvironmentVariable[], environment: CloudRunnerEnvironmentVariable[],
buildGuid: string, buildGuid: string,
buildParameters: BuildParameters, buildParameters: BuildParameters,
secretName, secretName,
@ -109,8 +109,8 @@ class KubernetesJobSpecFactory {
workingDir: `/${workingDirectory}`, workingDir: `/${workingDirectory}`,
resources: { resources: {
requests: { requests: {
memory: buildParameters.remoteBuildMemory, memory: buildParameters.cloudRunnerMemory,
cpu: buildParameters.remoteBuildCpu, cpu: buildParameters.cloudRunnerCpu,
}, },
}, },
env: environment, env: environment,

View File

@ -1,11 +1,11 @@
import { CoreV1Api } from '@kubernetes/client-node'; import { CoreV1Api } from '@kubernetes/client-node';
import RemoteBuilderSecret from './cloud-runner-secret'; import CloudRunnerSecret from './cloud-runner-secret';
import * as k8s from '@kubernetes/client-node'; import * as k8s from '@kubernetes/client-node';
const base64 = require('base-64'); const base64 = require('base-64');
class KubernetesSecret { class KubernetesSecret {
static async createSecret( static async createSecret(
secrets: RemoteBuilderSecret[], secrets: CloudRunnerSecret[],
secretName: string, secretName: string,
namespace: string, namespace: string,
kubeClient: CoreV1Api, kubeClient: CoreV1Api,

View File

@ -23,5 +23,5 @@ export {
Project, Project,
Unity, Unity,
Versioning, Versioning,
CloudRunner as RemoteBuilder, CloudRunner as CloudRunner,
}; };

View File

@ -97,8 +97,8 @@ class Input {
return core.getInput('postBuildSteps'); return core.getInput('postBuildSteps');
} }
static get remoteBuildCluster() { static get cloudRunnerCluster() {
return core.getInput('remoteBuildCluster') || ''; return core.getInput('cloudRunnerCluster') || '';
} }
static get awsBaseStackName() { static get awsBaseStackName() {
@ -113,12 +113,12 @@ class Input {
return core.getInput('githubToken') || ''; return core.getInput('githubToken') || '';
} }
static get remoteBuildMemory() { static get cloudRunnerMemory() {
return core.getInput('remoteBuildMemory') || '750M'; return core.getInput('cloudRunnerMemory') || '750M';
} }
static get remoteBuildCpu() { static get cloudRunnerCpu() {
return core.getInput('remoteBuildCpu') || '1.0'; return core.getInput('cloudRunnerCpu') || '1.0';
} }
static get kubeVolumeSize() { static get kubeVolumeSize() {