pull/289/head
Frostebite 2021-08-17 20:09:42 +00:00 committed by GitHub
parent dd22d28e75
commit 0d9c2bf1d8
17 changed files with 466 additions and 466 deletions

804
dist/index.js vendored
View File

@ -616,8 +616,8 @@ const unity_1 = __importDefault(__webpack_require__(70498));
exports.Unity = unity_1.default; 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 remote_builder_1 = __importDefault(__webpack_require__(49358)); const cloud_runner_1 = __importDefault(__webpack_require__(84875));
exports.RemoteBuilder = remote_builder_1.default; exports.RemoteBuilder = cloud_runner_1.default;
/***/ }), /***/ }),
@ -891,7 +891,7 @@ const SDK = __importStar(__webpack_require__(71786));
const nanoid_1 = __webpack_require__(39140); const nanoid_1 = __webpack_require__(39140);
const fs = __importStar(__webpack_require__(35747)); const fs = __importStar(__webpack_require__(35747));
const core = __importStar(__webpack_require__(42186)); const core = __importStar(__webpack_require__(42186));
const remote_builder_constants_1 = __importDefault(__webpack_require__(92560)); const cloud_runner_constants_1 = __importDefault(__webpack_require__(74094));
const aws_build_runner_1 = __importDefault(__webpack_require__(11201)); const aws_build_runner_1 = __importDefault(__webpack_require__(11201));
const crypto = __webpack_require__(33373); const crypto = __webpack_require__(33373);
class AWSBuildEnvironment { class AWSBuildEnvironment {
@ -968,7 +968,7 @@ class AWSBuildEnvironment {
} }
setupCloudFormations(CF, buildGuid, image, entrypoint, commands, mountdir, workingdir, secrets) { setupCloudFormations(CF, buildGuid, image, entrypoint, commands, mountdir, workingdir, secrets) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const logGuid = nanoid_1.customAlphabet(remote_builder_constants_1.default.alphabet, 9)(); const logGuid = nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 9)();
commands[1] += ` commands[1] += `
echo "${logGuid}" echo "${logGuid}"
`; `;
@ -1362,6 +1362,404 @@ class AWSBuildRunner {
exports.default = AWSBuildRunner; exports.default = AWSBuildRunner;
/***/ }),
/***/ 74094:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
class CloudRunnerConstants {
}
CloudRunnerConstants.alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
exports.default = CloudRunnerConstants;
/***/ }),
/***/ 27557:
/***/ (function(__unused_webpack_module, exports, __webpack_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 = __webpack_require__(39140);
const cloud_runner_constants_1 = __importDefault(__webpack_require__(74094));
class CloudRunnerNamespace {
static generateBuildName(runNumber, platform) {
const nanoid = nanoid_1.customAlphabet(cloud_runner_constants_1.default.alphabet, 4);
return `${runNumber}-${platform.toLowerCase().replace('standalone', '')}-${nanoid()}`;
}
}
exports.default = CloudRunnerNamespace;
/***/ }),
/***/ 84875:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const aws_build_platform_1 = __importDefault(__webpack_require__(70187));
const core = __importStar(__webpack_require__(42186));
const cloud_runner_namespace_1 = __importDefault(__webpack_require__(27557));
const kubernetes_build_platform_1 = __importDefault(__webpack_require__(81730));
const image_environment_factory_1 = __importDefault(__webpack_require__(25145));
const yaml_1 = __importDefault(__webpack_require__(13552));
const repositoryFolder = 'repo';
const buildVolumeFolder = 'data';
const cacheFolder = 'cache';
class CloudRunner {
static build(buildParameters, baseImage) {
return __awaiter(this, void 0, void 0, function* () {
const t = Date.now();
CloudRunner.buildGuid = cloud_runner_namespace_1.default.generateBuildName(CloudRunner.readRunNumber(), buildParameters.platform);
CloudRunner.buildParams = buildParameters;
CloudRunner.setupBranchName();
CloudRunner.setupFolderVariables();
CloudRunner.setupDefaultSecrets();
try {
CloudRunner.setupBuildPlatform();
yield this.RemoteBuilderProviderPlatform.setupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
yield CloudRunner.SetupStep();
const t2 = Date.now();
core.info(`Setup time: ${Math.floor((t2 - t) / 1000)}s`);
yield CloudRunner.BuildStep(baseImage);
const t3 = Date.now();
core.info(`Build time: ${Math.floor((t3 - t2) / 1000)}s`);
yield CloudRunner.CompressionStep();
core.info(`Post build steps ${this.buildParams.postBuildSteps}`);
this.buildParams.postBuildSteps = yaml_1.default.parse(this.buildParams.postBuildSteps);
core.info(`Post build steps ${JSON.stringify(this.buildParams.postBuildSteps, undefined, 4)}`);
for (const step of this.buildParams.postBuildSteps) {
const stepSecrets = step.secrets.map((x) => {
const secret = {
ParameterKey: x.name,
EnvironmentVariable: x.name,
ParameterValue: x.value,
};
return secret;
});
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, step['image'], step['commands'], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
], [...this.defaultSecrets, ...stepSecrets]);
}
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
}
catch (error) {
yield CloudRunner.handleException(error);
throw error;
}
});
}
static setupFolderVariables() {
this.buildPathFull = `/${buildVolumeFolder}/${this.buildGuid}`;
this.builderPathFull = `${this.buildPathFull}/builder`;
this.steamPathFull = `${this.buildPathFull}/steam`;
this.repoPathFull = `${this.buildPathFull}/${repositoryFolder}`;
this.projectPathFull = `${this.repoPathFull}/${this.buildParams.projectPath}`;
this.libraryFolderFull = `${this.projectPathFull}/Library`;
this.cacheFolderFull = `/${buildVolumeFolder}/${cacheFolder}/${this.branchName}`;
}
static SetupStep() {
return __awaiter(this, void 0, void 0, function* () {
core.info('Starting step 1/4 clone and restore cache)');
const lfsDirectory = `${this.repoPathFull}/.git/lfs`;
const testLFSFile = `${this.projectPathFull}/Assets/LFS_Test_File.jpg`;
const unityBuilderRepoUrl = `https://${this.buildParams.githubToken}@github.com/game-ci/unity-builder.git`;
const targetBuildRepoUrl = `https://${this.buildParams.githubToken}@github.com/${process.env.GITHUB_REPOSITORY}.git`;
const purgeRemoteCache = process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
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 remoteBuilderBranch = process.env.remoteBuilderBranch ? `--branch "${process.env.remoteBuilderBranch}"` : '';
const cloneRemoteBuilder = `git clone -q ${remoteBuilderBranch} ${unityBuilderRepoUrl} ${this.builderPathFull}`;
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine/git', [
` printenv
apk update -q
apk add unzip zip git-lfs jq tree -q
mkdir -p ${this.buildPathFull}
mkdir -p ${this.builderPathFull}
mkdir -p ${this.repoPathFull}
${cloneRemoteBuilder}
echo ' '
echo 'Initializing source repository for cloning with caching of LFS files'
${initializeSourceRepoForCaching}
export LFS_ASSETS_HASH="$(cat ${this.repoPathFull}/.lfs-assets-guid)"
echo 'Source repository initialized'
echo ' '
${process.env.DEBUG ? '' : '#'}echo $LFS_ASSETS_HASH
${process.env.DEBUG ? '' : '#'}echo 'Large File before LFS caching and pull'
${process.env.DEBUG ? '' : '#'}ls -alh "${lfsDirectory}"
${process.env.DEBUG ? '' : '#'}echo ' '
echo 'Starting checks of cache for the Unity project Library and git LFS files'
${handleCaching}
${process.env.DEBUG ? '' : '#'}echo 'Caching complete'
${process.env.DEBUG ? '' : '#'}echo ' '
${process.env.DEBUG ? '' : '#'}echo 'Large File after LFS caching and pull'
${process.env.DEBUG ? '' : '#'}ls -alh "${lfsDirectory}"
${process.env.DEBUG ? '' : '#'}echo ' '
${process.env.DEBUG ? '' : '#'}tree -L 4 "${this.buildPathFull}"
${process.env.DEBUG ? '' : '#'}ls -lh "/${buildVolumeFolder}"
${process.env.DEBUG ? '' : '#'}echo ' '
`,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}/`, CloudRunner.defaultGitShaEnvironmentVariable, this.defaultSecrets);
});
}
static BuildStep(baseImage) {
return __awaiter(this, void 0, void 0, function* () {
core.info('Starting part 2/4 (build unity project)');
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, baseImage.toString(), [
`
printenv
export GITHUB_WORKSPACE="${this.repoPathFull}"
cp -r "${this.builderPathFull}/dist/default-build-script/" "/UnityBuilderAction"
cp -r "${this.builderPathFull}/dist/entrypoint.sh" "/entrypoint.sh"
cp -r "${this.builderPathFull}/dist/steps/" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
${process.env.DEBUG ? '' : '#'}tree -L 4 "${this.buildPathFull}"
${process.env.DEBUG ? '' : '#'}ls -lh "/${buildVolumeFolder}"
`,
], `/${buildVolumeFolder}`, `/${this.projectPathFull}`, CloudRunner.readBuildEnvironmentVariables(), this.defaultSecrets);
});
}
static CompressionStep() {
return __awaiter(this, void 0, void 0, function* () {
core.info('Starting step 3/4 build compression');
// Cleanup
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine', [
`
printenv
apk update -q
apk add zip tree -q
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
cd "$libraryFolderFull"
zip -r "lib-$BUILDID.zip" "$libraryFolderFull"
mv "lib-$BUILDID.zip" "$cacheFolderFull/lib"
cd "$repoPathFull"
ls -lh "$repoPathFull"
zip -r "build-$BUILDID.zip" "$repoPathFull/${CloudRunner.buildParams.buildPath}"
mv "build-$BUILDID.zip" "/$cacheFolderFull/build-$BUILDID.zip"
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
`,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
], this.defaultSecrets);
core.info('compression step complete');
});
}
static setupBuildPlatform() {
switch (this.buildParams.remoteBuildCluster) {
case 'aws':
core.info('Building with AWS');
this.RemoteBuilderProviderPlatform = new aws_build_platform_1.default(this.buildParams);
break;
default:
case 'k8s':
core.info('Building with Kubernetes');
this.RemoteBuilderProviderPlatform = new kubernetes_build_platform_1.default(this.buildParams);
break;
}
}
static readRunNumber() {
const runNumber = process.env.GITHUB_RUN_NUMBER;
if (!runNumber || runNumber === '') {
throw new Error('no run number found, exiting');
}
return runNumber;
}
static setupBranchName() {
var _a;
const defaultBranchName = ((_a = process.env.GITHUB_REF) === null || _a === void 0 ? void 0 : _a.split('/').filter((x) => {
x = x[0].toUpperCase() + x.slice(1);
return x;
}).join('')) || '';
this.branchName =
process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName;
}
static setupDefaultSecrets() {
this.defaultSecrets = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: this.buildParams.githubToken,
},
{
ParameterKey: 'branch',
EnvironmentVariable: 'branch',
ParameterValue: this.branchName,
},
{
ParameterKey: 'buildPathFull',
EnvironmentVariable: 'buildPathFull',
ParameterValue: this.buildPathFull,
},
{
ParameterKey: 'projectPathFull',
EnvironmentVariable: 'projectPathFull',
ParameterValue: this.projectPathFull,
},
{
ParameterKey: 'libraryFolderFull',
EnvironmentVariable: 'libraryFolderFull',
ParameterValue: this.libraryFolderFull,
},
{
ParameterKey: 'builderPathFull',
EnvironmentVariable: 'builderPathFull',
ParameterValue: this.builderPathFull,
},
{
ParameterKey: 'repoPathFull',
EnvironmentVariable: 'repoPathFull',
ParameterValue: this.repoPathFull,
},
{
ParameterKey: 'steamPathFull',
EnvironmentVariable: 'steamPathFull',
ParameterValue: this.steamPathFull,
},
];
this.defaultSecrets.push(...image_environment_factory_1.default.getEnvironmentVariables(this.buildParams).map((x) => {
return {
ParameterKey: x.name,
EnvironmentVariable: x.name,
ParameterValue: x.value,
};
}));
}
static readBuildEnvironmentVariables() {
return [
{
name: 'ContainerMemory',
value: this.buildParams.remoteBuildMemory,
},
{
name: 'ContainerCpu',
value: this.buildParams.remoteBuildCpu,
},
{
name: 'GITHUB_WORKSPACE',
value: `/${buildVolumeFolder}/${this.buildGuid}/${repositoryFolder}/`,
},
{
name: 'PROJECT_PATH',
value: this.buildParams.projectPath,
},
{
name: 'BUILD_PATH',
value: this.buildParams.buildPath,
},
{
name: 'BUILD_FILE',
value: this.buildParams.buildFile,
},
{
name: 'BUILD_NAME',
value: this.buildParams.buildName,
},
{
name: 'BUILD_METHOD',
value: this.buildParams.buildMethod,
},
{
name: 'CUSTOM_PARAMETERS',
value: this.buildParams.customParameters,
},
{
name: 'BUILD_TARGET',
value: this.buildParams.platform,
},
{
name: 'ANDROID_VERSION_CODE',
value: this.buildParams.androidVersionCode.toString(),
},
{
name: 'ANDROID_KEYSTORE_NAME',
value: this.buildParams.androidKeystoreName,
},
{
name: 'ANDROID_KEYALIAS_NAME',
value: this.buildParams.androidKeyaliasName,
},
];
}
static readUploadArtifactEnvironmentVariables() {
return [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
{
name: 'AWS_DEFAULT_REGION',
value: process.env.AWS_DEFAULT_REGION || '',
},
];
}
static handleException(error) {
return __awaiter(this, void 0, void 0, function* () {
core.error(JSON.stringify(error, undefined, 4));
core.setFailed('Remote Builder failed');
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
});
}
}
CloudRunner.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false;
CloudRunner.defaultGitShaEnvironmentVariable = [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
];
exports.default = CloudRunner;
/***/ }), /***/ }),
/***/ 81730: /***/ 81730:
@ -2143,404 +2541,6 @@ class KubernetesUtilities {
exports.default = KubernetesUtilities; exports.default = KubernetesUtilities;
/***/ }),
/***/ 92560:
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
class RemoteBuilderConstants {
}
RemoteBuilderConstants.alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
exports.default = RemoteBuilderConstants;
/***/ }),
/***/ 96003:
/***/ (function(__unused_webpack_module, exports, __webpack_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 = __webpack_require__(39140);
const remote_builder_constants_1 = __importDefault(__webpack_require__(92560));
class RemoteBuilderNamespace {
static generateBuildName(runNumber, platform) {
const nanoid = nanoid_1.customAlphabet(remote_builder_constants_1.default.alphabet, 4);
return `${runNumber}-${platform.toLowerCase().replace('standalone', '')}-${nanoid()}`;
}
}
exports.default = RemoteBuilderNamespace;
/***/ }),
/***/ 49358:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
const aws_build_platform_1 = __importDefault(__webpack_require__(70187));
const core = __importStar(__webpack_require__(42186));
const remote_builder_namespace_1 = __importDefault(__webpack_require__(96003));
const kubernetes_build_platform_1 = __importDefault(__webpack_require__(81730));
const image_environment_factory_1 = __importDefault(__webpack_require__(25145));
const yaml_1 = __importDefault(__webpack_require__(13552));
const repositoryFolder = 'repo';
const buildVolumeFolder = 'data';
const cacheFolder = 'cache';
class RemoteBuilder {
static build(buildParameters, baseImage) {
return __awaiter(this, void 0, void 0, function* () {
const t = Date.now();
RemoteBuilder.buildGuid = remote_builder_namespace_1.default.generateBuildName(RemoteBuilder.readRunNumber(), buildParameters.platform);
RemoteBuilder.buildParams = buildParameters;
RemoteBuilder.setupBranchName();
RemoteBuilder.setupFolderVariables();
RemoteBuilder.setupDefaultSecrets();
try {
RemoteBuilder.setupBuildPlatform();
yield this.RemoteBuilderProviderPlatform.setupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
yield RemoteBuilder.SetupStep();
const t2 = Date.now();
core.info(`Setup time: ${Math.floor((t2 - t) / 1000)}s`);
yield RemoteBuilder.BuildStep(baseImage);
const t3 = Date.now();
core.info(`Build time: ${Math.floor((t3 - t2) / 1000)}s`);
yield RemoteBuilder.CompressionStep();
core.info(`Post build steps ${this.buildParams.postBuildSteps}`);
this.buildParams.postBuildSteps = yaml_1.default.parse(this.buildParams.postBuildSteps);
core.info(`Post build steps ${JSON.stringify(this.buildParams.postBuildSteps, undefined, 4)}`);
for (const step of this.buildParams.postBuildSteps) {
const stepSecrets = step.secrets.map((x) => {
const secret = {
ParameterKey: x.name,
EnvironmentVariable: x.name,
ParameterValue: x.value,
};
return secret;
});
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, step['image'], step['commands'], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
], [...this.defaultSecrets, ...stepSecrets]);
}
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
}
catch (error) {
yield RemoteBuilder.handleException(error);
throw error;
}
});
}
static setupFolderVariables() {
this.buildPathFull = `/${buildVolumeFolder}/${this.buildGuid}`;
this.builderPathFull = `${this.buildPathFull}/builder`;
this.steamPathFull = `${this.buildPathFull}/steam`;
this.repoPathFull = `${this.buildPathFull}/${repositoryFolder}`;
this.projectPathFull = `${this.repoPathFull}/${this.buildParams.projectPath}`;
this.libraryFolderFull = `${this.projectPathFull}/Library`;
this.cacheFolderFull = `/${buildVolumeFolder}/${cacheFolder}/${this.branchName}`;
}
static SetupStep() {
return __awaiter(this, void 0, void 0, function* () {
core.info('Starting step 1/4 clone and restore cache)');
const lfsDirectory = `${this.repoPathFull}/.git/lfs`;
const testLFSFile = `${this.projectPathFull}/Assets/LFS_Test_File.jpg`;
const unityBuilderRepoUrl = `https://${this.buildParams.githubToken}@github.com/game-ci/unity-builder.git`;
const targetBuildRepoUrl = `https://${this.buildParams.githubToken}@github.com/${process.env.GITHUB_REPOSITORY}.git`;
const purgeRemoteCache = process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
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 remoteBuilderBranch = process.env.remoteBuilderBranch ? `--branch "${process.env.remoteBuilderBranch}"` : '';
const cloneRemoteBuilder = `git clone -q ${remoteBuilderBranch} ${unityBuilderRepoUrl} ${this.builderPathFull}`;
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine/git', [
` printenv
apk update -q
apk add unzip zip git-lfs jq tree -q
mkdir -p ${this.buildPathFull}
mkdir -p ${this.builderPathFull}
mkdir -p ${this.repoPathFull}
${cloneRemoteBuilder}
echo ' '
echo 'Initializing source repository for cloning with caching of LFS files'
${initializeSourceRepoForCaching}
export LFS_ASSETS_HASH="$(cat ${this.repoPathFull}/.lfs-assets-guid)"
echo 'Source repository initialized'
echo ' '
${process.env.DEBUG ? '' : '#'}echo $LFS_ASSETS_HASH
${process.env.DEBUG ? '' : '#'}echo 'Large File before LFS caching and pull'
${process.env.DEBUG ? '' : '#'}ls -alh "${lfsDirectory}"
${process.env.DEBUG ? '' : '#'}echo ' '
echo 'Starting checks of cache for the Unity project Library and git LFS files'
${handleCaching}
${process.env.DEBUG ? '' : '#'}echo 'Caching complete'
${process.env.DEBUG ? '' : '#'}echo ' '
${process.env.DEBUG ? '' : '#'}echo 'Large File after LFS caching and pull'
${process.env.DEBUG ? '' : '#'}ls -alh "${lfsDirectory}"
${process.env.DEBUG ? '' : '#'}echo ' '
${process.env.DEBUG ? '' : '#'}tree -L 4 "${this.buildPathFull}"
${process.env.DEBUG ? '' : '#'}ls -lh "/${buildVolumeFolder}"
${process.env.DEBUG ? '' : '#'}echo ' '
`,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}/`, RemoteBuilder.defaultGitShaEnvironmentVariable, this.defaultSecrets);
});
}
static BuildStep(baseImage) {
return __awaiter(this, void 0, void 0, function* () {
core.info('Starting part 2/4 (build unity project)');
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, baseImage.toString(), [
`
printenv
export GITHUB_WORKSPACE="${this.repoPathFull}"
cp -r "${this.builderPathFull}/dist/default-build-script/" "/UnityBuilderAction"
cp -r "${this.builderPathFull}/dist/entrypoint.sh" "/entrypoint.sh"
cp -r "${this.builderPathFull}/dist/steps/" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
/entrypoint.sh
${process.env.DEBUG ? '' : '#'}tree -L 4 "${this.buildPathFull}"
${process.env.DEBUG ? '' : '#'}ls -lh "/${buildVolumeFolder}"
`,
], `/${buildVolumeFolder}`, `/${this.projectPathFull}`, RemoteBuilder.readBuildEnvironmentVariables(), this.defaultSecrets);
});
}
static CompressionStep() {
return __awaiter(this, void 0, void 0, function* () {
core.info('Starting step 3/4 build compression');
// Cleanup
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine', [
`
printenv
apk update -q
apk add zip tree -q
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
cd "$libraryFolderFull"
zip -r "lib-$BUILDID.zip" "$libraryFolderFull"
mv "lib-$BUILDID.zip" "$cacheFolderFull/lib"
cd "$repoPathFull"
ls -lh "$repoPathFull"
zip -r "build-$BUILDID.zip" "$repoPathFull/${RemoteBuilder.buildParams.buildPath}"
mv "build-$BUILDID.zip" "/$cacheFolderFull/build-$BUILDID.zip"
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
`,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
], this.defaultSecrets);
core.info('compression step complete');
});
}
static setupBuildPlatform() {
switch (this.buildParams.remoteBuildCluster) {
case 'aws':
core.info('Building with AWS');
this.RemoteBuilderProviderPlatform = new aws_build_platform_1.default(this.buildParams);
break;
default:
case 'k8s':
core.info('Building with Kubernetes');
this.RemoteBuilderProviderPlatform = new kubernetes_build_platform_1.default(this.buildParams);
break;
}
}
static readRunNumber() {
const runNumber = process.env.GITHUB_RUN_NUMBER;
if (!runNumber || runNumber === '') {
throw new Error('no run number found, exiting');
}
return runNumber;
}
static setupBranchName() {
var _a;
const defaultBranchName = ((_a = process.env.GITHUB_REF) === null || _a === void 0 ? void 0 : _a.split('/').filter((x) => {
x = x[0].toUpperCase() + x.slice(1);
return x;
}).join('')) || '';
this.branchName =
process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName;
}
static setupDefaultSecrets() {
this.defaultSecrets = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: this.buildParams.githubToken,
},
{
ParameterKey: 'branch',
EnvironmentVariable: 'branch',
ParameterValue: this.branchName,
},
{
ParameterKey: 'buildPathFull',
EnvironmentVariable: 'buildPathFull',
ParameterValue: this.buildPathFull,
},
{
ParameterKey: 'projectPathFull',
EnvironmentVariable: 'projectPathFull',
ParameterValue: this.projectPathFull,
},
{
ParameterKey: 'libraryFolderFull',
EnvironmentVariable: 'libraryFolderFull',
ParameterValue: this.libraryFolderFull,
},
{
ParameterKey: 'builderPathFull',
EnvironmentVariable: 'builderPathFull',
ParameterValue: this.builderPathFull,
},
{
ParameterKey: 'repoPathFull',
EnvironmentVariable: 'repoPathFull',
ParameterValue: this.repoPathFull,
},
{
ParameterKey: 'steamPathFull',
EnvironmentVariable: 'steamPathFull',
ParameterValue: this.steamPathFull,
},
];
this.defaultSecrets.push(...image_environment_factory_1.default.getEnvironmentVariables(this.buildParams).map((x) => {
return {
ParameterKey: x.name,
EnvironmentVariable: x.name,
ParameterValue: x.value,
};
}));
}
static readBuildEnvironmentVariables() {
return [
{
name: 'ContainerMemory',
value: this.buildParams.remoteBuildMemory,
},
{
name: 'ContainerCpu',
value: this.buildParams.remoteBuildCpu,
},
{
name: 'GITHUB_WORKSPACE',
value: `/${buildVolumeFolder}/${this.buildGuid}/${repositoryFolder}/`,
},
{
name: 'PROJECT_PATH',
value: this.buildParams.projectPath,
},
{
name: 'BUILD_PATH',
value: this.buildParams.buildPath,
},
{
name: 'BUILD_FILE',
value: this.buildParams.buildFile,
},
{
name: 'BUILD_NAME',
value: this.buildParams.buildName,
},
{
name: 'BUILD_METHOD',
value: this.buildParams.buildMethod,
},
{
name: 'CUSTOM_PARAMETERS',
value: this.buildParams.customParameters,
},
{
name: 'BUILD_TARGET',
value: this.buildParams.platform,
},
{
name: 'ANDROID_VERSION_CODE',
value: this.buildParams.androidVersionCode.toString(),
},
{
name: 'ANDROID_KEYSTORE_NAME',
value: this.buildParams.androidKeystoreName,
},
{
name: 'ANDROID_KEYALIAS_NAME',
value: this.buildParams.androidKeyaliasName,
},
];
}
static readUploadArtifactEnvironmentVariables() {
return [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
{
name: 'AWS_DEFAULT_REGION',
value: process.env.AWS_DEFAULT_REGION || '',
},
];
}
static handleException(error) {
return __awaiter(this, void 0, void 0, function* () {
core.error(JSON.stringify(error, undefined, 4));
core.setFailed('Remote Builder failed');
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
});
}
}
RemoteBuilder.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false;
RemoteBuilder.defaultGitShaEnvironmentVariable = [
{
name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '',
},
];
exports.default = RemoteBuilder;
/***/ }), /***/ }),
/***/ 62177: /***/ 62177:

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,7 @@ import Platform from './platform';
import Project from './project'; import Project from './project';
import Unity from './unity'; import Unity from './unity';
import Versioning from './versioning'; import Versioning from './versioning';
import RemoteBuilder from './remote-builder/remote-builder'; import CloudRunner from './remote-builder/cloud-runner';
export { export {
Action, Action,
@ -23,5 +23,5 @@ export {
Project, Project,
Unity, Unity,
Versioning, Versioning,
RemoteBuilder, CloudRunner as RemoteBuilder,
}; };

View File

@ -1,17 +1,17 @@
import * as SDK from 'aws-sdk'; import * as SDK from 'aws-sdk';
import { customAlphabet } from 'nanoid'; import { customAlphabet } from 'nanoid';
import RemoteBuilderSecret from './remote-builder-secret'; import RemoteBuilderSecret from './cloud-runner-secret';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable'; import RemoteBuilderEnvironmentVariable 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 RemoteBuilderTaskDef from './remote-builder-task-def'; import CloudRunnerTaskDef from './cloud-runner-task-def';
import RemoteBuilderConstants from './remote-builder-constants'; import RemoteBuilderConstants from './cloud-runner-constants';
import AWSBuildRunner from './aws-build-runner'; import AWSBuildRunner from './aws-build-runner';
import { RemoteBuilderProviderInterface } from './remote-builder-provider-interface'; import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface';
import BuildParameters from '../build-parameters'; import BuildParameters from '../build-parameters';
const crypto = require('crypto'); const crypto = require('crypto');
class AWSBuildEnvironment implements RemoteBuilderProviderInterface { class AWSBuildEnvironment implements CloudRunnerProviderInterface {
private baseStackName: string; private baseStackName: string;
constructor(buildParameters: BuildParameters) { constructor(buildParameters: BuildParameters) {
@ -116,7 +116,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
mountdir: string, mountdir: string,
workingdir: string, workingdir: string,
secrets: RemoteBuilderSecret[], secrets: RemoteBuilderSecret[],
): Promise<RemoteBuilderTaskDef> { ): Promise<CloudRunnerTaskDef> {
const logGuid = customAlphabet(RemoteBuilderConstants.alphabet, 9)(); const logGuid = customAlphabet(RemoteBuilderConstants.alphabet, 9)();
commands[1] += ` commands[1] += `
echo "${logGuid}" echo "${logGuid}"
@ -339,7 +339,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
return fs.readFileSync(`${__dirname}/cloud-formations/task-def-formation.yml`, 'utf8'); return fs.readFileSync(`${__dirname}/cloud-formations/task-def-formation.yml`, 'utf8');
} }
async cleanupResources(CF: SDK.CloudFormation, taskDef: RemoteBuilderTaskDef) { async cleanupResources(CF: SDK.CloudFormation, taskDef: CloudRunnerTaskDef) {
core.info('Cleanup starting'); core.info('Cleanup starting');
await CF.deleteStack({ await CF.deleteStack({
StackName: taskDef.taskDefStackName, StackName: taskDef.taskDefStackName,

View File

@ -1,12 +1,12 @@
import * as AWS from 'aws-sdk'; import * as AWS from 'aws-sdk';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable'; import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable';
import * as core from '@actions/core'; import * as core from '@actions/core';
import RemoteBuilderTaskDef from './remote-builder-task-def'; import CloudRunnerTaskDef from './cloud-runner-task-def';
import * as zlib from 'zlib'; import * as zlib from 'zlib';
class AWSBuildRunner { class AWSBuildRunner {
static async runTask( static async runTask(
taskDef: RemoteBuilderTaskDef, taskDef: CloudRunnerTaskDef,
ECS: AWS.ECS, ECS: AWS.ECS,
CF: AWS.CloudFormation, CF: AWS.CloudFormation,
environment: RemoteBuilderEnvironmentVariable[], environment: RemoteBuilderEnvironmentVariable[],
@ -92,7 +92,7 @@ class AWSBuildRunner {
static async streamLogsUntilTaskStops( static async streamLogsUntilTaskStops(
ECS: AWS.ECS, ECS: AWS.ECS,
CF: AWS.CloudFormation, CF: AWS.CloudFormation,
taskDef: RemoteBuilderTaskDef, taskDef: CloudRunnerTaskDef,
clusterName: string, clusterName: string,
taskArn: string, taskArn: string,
kinesisStreamName: string, kinesisStreamName: string,

View File

@ -0,0 +1,4 @@
class CloudRunnerConstants {
static alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
}
export default CloudRunnerConstants;

View File

@ -0,0 +1,5 @@
class CloudRunnerEnvironmentVariable {
public name!: string;
public value!: string;
}
export default CloudRunnerEnvironmentVariable;

View File

@ -1,10 +1,10 @@
import { customAlphabet } from 'nanoid'; import { customAlphabet } from 'nanoid';
import RemoteBuilderConstants from './remote-builder-constants'; import CloudRunnerConstants from './cloud-runner-constants';
class RemoteBuilderNamespace { class CloudRunnerNamespace {
static generateBuildName(runNumber: string | number, platform: string) { static generateBuildName(runNumber: string | number, platform: string) {
const nanoid = customAlphabet(RemoteBuilderConstants.alphabet, 4); const nanoid = customAlphabet(CloudRunnerConstants.alphabet, 4);
return `${runNumber}-${platform.toLowerCase().replace('standalone', '')}-${nanoid()}`; return `${runNumber}-${platform.toLowerCase().replace('standalone', '')}-${nanoid()}`;
} }
} }
export default RemoteBuilderNamespace; export default CloudRunnerNamespace;

View File

@ -1,8 +1,8 @@
import BuildParameters from '../build-parameters'; import BuildParameters from '../build-parameters';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable'; import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
import RemoteBuilderSecret from './remote-builder-secret'; import CloudRunnerSecret from './cloud-runner-secret';
export interface RemoteBuilderProviderInterface { export interface CloudRunnerProviderInterface {
cleanupSharedBuildResources( cleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildGuid: string, buildGuid: string,
@ -35,8 +35,8 @@ export interface RemoteBuilderProviderInterface {
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
workingdir: string, workingdir: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
environment: RemoteBuilderEnvironmentVariable[], environment: CloudRunnerEnvironmentVariable[],
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
secrets: RemoteBuilderSecret[], secrets: CloudRunnerSecret[],
): Promise<void>; ): Promise<void>;
} }

View File

@ -1,6 +1,6 @@
class RemoteBuilderSecret { class CloudRunnerSecret {
public ParameterKey!: string; public ParameterKey!: string;
public EnvironmentVariable!: string; public EnvironmentVariable!: string;
public ParameterValue!: string; public ParameterValue!: string;
} }
export default RemoteBuilderSecret; export default CloudRunnerSecret;

View File

@ -1,6 +1,6 @@
import * as AWS from 'aws-sdk'; import * as AWS from 'aws-sdk';
class RemoteBuilderTaskDef { class CloudRunnerTaskDef {
public taskDefStackName!: string; public taskDefStackName!: string;
public taskDefCloudFormation!: string; public taskDefCloudFormation!: string;
public taskDefStackNameTTL!: string; public taskDefStackNameTTL!: string;
@ -9,4 +9,4 @@ class RemoteBuilderTaskDef {
public baseResources: AWS.CloudFormation.StackResources | undefined; public baseResources: AWS.CloudFormation.StackResources | undefined;
public logid!: string; public logid!: string;
} }
export default RemoteBuilderTaskDef; export default CloudRunnerTaskDef;

View File

@ -1,19 +1,19 @@
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 './remote-builder-namespace'; import RemoteBuilderNamespace from './cloud-runner-namespace';
import RemoteBuilderSecret from './remote-builder-secret'; import RemoteBuilderSecret from './cloud-runner-secret';
import { RemoteBuilderProviderInterface } from './remote-builder-provider-interface'; import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface';
import Kubernetes from './kubernetes-build-platform'; import Kubernetes from './kubernetes-build-platform';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable'; import RemoteBuilderEnvironmentVariable 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';
const buildVolumeFolder = 'data'; const buildVolumeFolder = 'data';
const cacheFolder = 'cache'; const cacheFolder = 'cache';
class RemoteBuilder { class CloudRunner {
static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface; static RemoteBuilderProviderPlatform: CloudRunnerProviderInterface;
private static buildParams: BuildParameters; private static buildParams: BuildParameters;
private static defaultSecrets: RemoteBuilderSecret[]; private static defaultSecrets: RemoteBuilderSecret[];
private static buildGuid: string; private static buildGuid: string;
@ -35,29 +35,29 @@ class RemoteBuilder {
static async build(buildParameters: BuildParameters, baseImage) { static async build(buildParameters: BuildParameters, baseImage) {
const t = Date.now(); const t = Date.now();
RemoteBuilder.buildGuid = RemoteBuilderNamespace.generateBuildName( CloudRunner.buildGuid = RemoteBuilderNamespace.generateBuildName(
RemoteBuilder.readRunNumber(), CloudRunner.readRunNumber(),
buildParameters.platform, buildParameters.platform,
); );
RemoteBuilder.buildParams = buildParameters; CloudRunner.buildParams = buildParameters;
RemoteBuilder.setupBranchName(); CloudRunner.setupBranchName();
RemoteBuilder.setupFolderVariables(); CloudRunner.setupFolderVariables();
RemoteBuilder.setupDefaultSecrets(); CloudRunner.setupDefaultSecrets();
try { try {
RemoteBuilder.setupBuildPlatform(); CloudRunner.setupBuildPlatform();
await this.RemoteBuilderProviderPlatform.setupSharedBuildResources( await this.RemoteBuilderProviderPlatform.setupSharedBuildResources(
this.buildGuid, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,
this.defaultSecrets, this.defaultSecrets,
); );
await RemoteBuilder.SetupStep(); await 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`);
await RemoteBuilder.BuildStep(baseImage); await CloudRunner.BuildStep(baseImage);
const t3 = Date.now(); const t3 = Date.now();
core.info(`Build time: ${Math.floor((t3 - t2) / 1000)}s`); core.info(`Build time: ${Math.floor((t3 - t2) / 1000)}s`);
await RemoteBuilder.CompressionStep(); await CloudRunner.CompressionStep();
core.info(`Post build steps ${this.buildParams.postBuildSteps}`); core.info(`Post build steps ${this.buildParams.postBuildSteps}`);
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)}`);
@ -92,7 +92,7 @@ class RemoteBuilder {
this.defaultSecrets, this.defaultSecrets,
); );
} catch (error) { } catch (error) {
await RemoteBuilder.handleException(error); await CloudRunner.handleException(error);
throw error; throw error;
} }
} }
@ -156,7 +156,7 @@ class RemoteBuilder {
], ],
`/${buildVolumeFolder}`, `/${buildVolumeFolder}`,
`/${buildVolumeFolder}/`, `/${buildVolumeFolder}/`,
RemoteBuilder.defaultGitShaEnvironmentVariable, CloudRunner.defaultGitShaEnvironmentVariable,
this.defaultSecrets, this.defaultSecrets,
); );
} }
@ -182,7 +182,7 @@ class RemoteBuilder {
], ],
`/${buildVolumeFolder}`, `/${buildVolumeFolder}`,
`/${this.projectPathFull}`, `/${this.projectPathFull}`,
RemoteBuilder.readBuildEnvironmentVariables(), CloudRunner.readBuildEnvironmentVariables(),
this.defaultSecrets, this.defaultSecrets,
); );
} }
@ -205,7 +205,7 @@ class RemoteBuilder {
mv "lib-$BUILDID.zip" "$cacheFolderFull/lib" mv "lib-$BUILDID.zip" "$cacheFolderFull/lib"
cd "$repoPathFull" cd "$repoPathFull"
ls -lh "$repoPathFull" ls -lh "$repoPathFull"
zip -r "build-$BUILDID.zip" "$repoPathFull/${RemoteBuilder.buildParams.buildPath}" zip -r "build-$BUILDID.zip" "$repoPathFull/${CloudRunner.buildParams.buildPath}"
mv "build-$BUILDID.zip" "/$cacheFolderFull/build-$BUILDID.zip" mv "build-$BUILDID.zip" "/$cacheFolderFull/build-$BUILDID.zip"
${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull" ${process.env.DEBUG ? '' : '#'}tree -L 4 "$repoPathFull"
${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull" ${process.env.DEBUG ? '' : '#'}ls -lh "$repoPathFull"
@ -393,4 +393,4 @@ class RemoteBuilder {
); );
} }
} }
export default RemoteBuilder; export default CloudRunner;

View File

@ -1,10 +1,10 @@
import * as k8s from '@kubernetes/client-node'; 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 { RemoteBuilderProviderInterface } from './remote-builder-provider-interface'; import { CloudRunnerProviderInterface } from './cloud-runner-provider-interface';
import RemoteBuilderSecret from './remote-builder-secret'; import RemoteBuilderSecret from './cloud-runner-secret';
import KubernetesStorage from './kubernetes-storage'; import KubernetesStorage from './kubernetes-storage';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable'; import RemoteBuilderEnvironmentVariable 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';
@ -13,7 +13,7 @@ import KubernetesJobSpecFactory from './kubernetes-job-spec-factory';
import KubernetesCleanupCronJob from './kubernetes-cleanup-cronjob'; import KubernetesCleanupCronJob from './kubernetes-cleanup-cronjob';
import KubernetesServiceAccount from './kubernetes-service-account'; import KubernetesServiceAccount from './kubernetes-service-account';
class Kubernetes implements RemoteBuilderProviderInterface { class Kubernetes implements CloudRunnerProviderInterface {
private kubeConfig: k8s.KubeConfig; private kubeConfig: k8s.KubeConfig;
private kubeClient: k8s.CoreV1Api; private kubeClient: k8s.CoreV1Api;
private kubeClientBatch: k8s.BatchV1Api; private kubeClientBatch: k8s.BatchV1Api;

View File

@ -1,5 +1,5 @@
import BuildParameters from '../build-parameters'; import BuildParameters from '../build-parameters';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable'; import RemoteBuilderEnvironmentVariable from './cloud-runner-environment-variable';
class KubernetesJobSpecFactory { class KubernetesJobSpecFactory {
static getJobSpec( static getJobSpec(

View File

@ -1,5 +1,5 @@
import { CoreV1Api } from '@kubernetes/client-node'; import { CoreV1Api } from '@kubernetes/client-node';
import RemoteBuilderSecret from './remote-builder-secret'; import RemoteBuilderSecret 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');

View File

@ -1,4 +0,0 @@
class RemoteBuilderConstants {
static alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
}
export default RemoteBuilderConstants;

View File

@ -1,5 +0,0 @@
class RemoteBuilderEnvironmentVariable {
public name!: string;
public value!: string;
}
export default RemoteBuilderEnvironmentVariable;