Fix
parent
af72cd4a7a
commit
150c69904b
|
|
@ -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 }}
|
||||||
|
|
|
||||||
|
|
@ -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';
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -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 ' '
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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[],
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -23,5 +23,5 @@ export {
|
||||||
Project,
|
Project,
|
||||||
Unity,
|
Unity,
|
||||||
Versioning,
|
Versioning,
|
||||||
CloudRunner as RemoteBuilder,
|
CloudRunner as CloudRunner,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue