Refactor id and uid to Guid for consistency

pull/289/head
Frostebite 2021-08-15 21:59:58 +00:00 committed by GitHub
parent 4dcbc8c6fd
commit 21cb4562cc
8 changed files with 101 additions and 101 deletions

96
dist/index.js vendored
View File

@ -900,7 +900,7 @@ class AWSBuildEnvironment {
} }
cleanupSharedBuildResources( cleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid, buildGuid,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters, buildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -909,7 +909,7 @@ class AWSBuildEnvironment {
defaultSecretsArray) { } defaultSecretsArray) { }
setupSharedBuildResources( setupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid, buildGuid,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters, buildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -957,14 +957,14 @@ class AWSBuildEnvironment {
template = [template.slice(0, index), insertion, template.slice(index)].join(''); template = [template.slice(0, index), insertion, template.slice(index)].join('');
return template; return template;
} }
setupCloudFormations(CF, buildUid, 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 logid = nanoid_1.customAlphabet(remote_builder_constants_1.default.alphabet, 9)(); const logGuid = nanoid_1.customAlphabet(remote_builder_constants_1.default.alphabet, 9)();
commands[1] += ` commands[1] += `
echo "${logid}" echo "${logGuid}"
`; `;
yield this.setupBaseStack(CF); yield this.setupBaseStack(CF);
const taskDefStackName = `${this.baseStackName}-${buildUid}`; const taskDefStackName = `${this.baseStackName}-${buildGuid}`;
let taskDefCloudFormation = this.readTaskCloudFormationTemplate(); let taskDefCloudFormation = this.readTaskCloudFormationTemplate();
const cleanupTaskDefStackName = `${taskDefStackName}-cleanup`; const cleanupTaskDefStackName = `${taskDefStackName}-cleanup`;
const cleanupCloudFormation = fs.readFileSync(`${__dirname}/cloud-formations/cloudformation-stack-ttl.yml`, 'utf8'); const cleanupCloudFormation = fs.readFileSync(`${__dirname}/cloud-formations/cloudformation-stack-ttl.yml`, 'utf8');
@ -1015,7 +1015,7 @@ class AWSBuildEnvironment {
}, },
{ {
ParameterKey: 'BUILDID', ParameterKey: 'BUILDID',
ParameterValue: buildUid, ParameterValue: buildGuid,
}, },
...mappedSecrets, ...mappedSecrets,
], ],
@ -1040,7 +1040,7 @@ class AWSBuildEnvironment {
}, },
{ {
ParameterKey: 'BUILDID', ParameterKey: 'BUILDID',
ParameterValue: buildUid, ParameterValue: buildGuid,
}, },
], ],
}).promise(); }).promise();
@ -1063,7 +1063,7 @@ class AWSBuildEnvironment {
ttlCloudFormation: cleanupCloudFormation, ttlCloudFormation: cleanupCloudFormation,
taskDefResources, taskDefResources,
baseResources, baseResources,
logid, logid: logGuid,
}; };
}); });
} }
@ -1211,7 +1211,7 @@ const AWS = __importStar(__webpack_require__(71786));
const core = __importStar(__webpack_require__(42186)); const core = __importStar(__webpack_require__(42186));
const zlib = __importStar(__webpack_require__(78761)); const zlib = __importStar(__webpack_require__(78761));
class AWSBuildRunner { class AWSBuildRunner {
static runTask(taskDef, ECS, CF, environment, buildUid, commands) { static runTask(taskDef, ECS, CF, environment, buildGuid, commands) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const cluster = ((_b = (_a = taskDef.baseResources) === null || _a === void 0 ? void 0 : _a.find((x) => x.LogicalResourceId === 'ECSCluster')) === null || _b === void 0 ? void 0 : _b.PhysicalResourceId) || ''; const cluster = ((_b = (_a = taskDef.baseResources) === null || _a === void 0 ? void 0 : _a.find((x) => x.LogicalResourceId === 'ECSCluster')) === null || _b === void 0 ? void 0 : _b.PhysicalResourceId) || '';
@ -1228,7 +1228,7 @@ class AWSBuildRunner {
containerOverrides: [ containerOverrides: [
{ {
name: taskDef.taskDefStackName, name: taskDef.taskDefStackName,
environment: [...environment, { name: 'BUILDID', value: buildUid }], environment: [...environment, { name: 'BUILDID', value: buildGuid }],
command: ['-c', ...commands], command: ['-c', ...commands],
}, },
], ],
@ -1404,7 +1404,7 @@ const kubernetes_cleanup_cronjob_1 = __importDefault(__webpack_require__(82974))
const kubernetes_service_account_1 = __importDefault(__webpack_require__(671)); const kubernetes_service_account_1 = __importDefault(__webpack_require__(671));
class Kubernetes { class Kubernetes {
constructor(buildParameters) { constructor(buildParameters) {
this.buildId = ''; this.buildGuid = '';
this.pvcName = ''; this.pvcName = '';
this.secretName = ''; this.secretName = '';
this.jobName = ''; this.jobName = '';
@ -1421,16 +1421,16 @@ class Kubernetes {
this.namespace = 'default'; this.namespace = 'default';
this.buildParameters = buildParameters; this.buildParameters = buildParameters;
} }
setupSharedBuildResources(buildUid, buildParameters, setupSharedBuildResources(buildGuid, buildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
branchName, branchName,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
defaultSecretsArray) { defaultSecretsArray) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
this.pvcName = `unity-builder-pvc-${buildUid}`; this.pvcName = `unity-builder-pvc-${buildGuid}`;
this.cleanupCronJobName = `unity-builder-cronjob-${buildUid}`; this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
this.serviceAccountName = `service-account-${buildUid}`; this.serviceAccountName = `service-account-${buildGuid}`;
yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace); yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace);
yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient); yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient);
yield kubernetes_cleanup_cronjob_1.default.createCleanupCronJob(this.kubeClientBatchBeta, this.cleanupCronJobName, this.serviceAccountName, this.namespace); yield kubernetes_cleanup_cronjob_1.default.createCleanupCronJob(this.kubeClientBatchBeta, this.cleanupCronJobName, this.serviceAccountName, this.namespace);
@ -1440,15 +1440,15 @@ class Kubernetes {
} }
}); });
} }
runBuildTask(buildId, image, commands, mountdir, workingdir, environment, secrets) { runBuildTask(buildGuid, image, commands, mountdir, workingdir, environment, secrets) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
// setup // setup
this.buildId = buildId; this.buildGuid = buildGuid;
this.secretName = `build-credentials-${buildId}`; this.secretName = `build-credentials-${buildGuid}`;
this.jobName = `unity-builder-job-${buildId}`; this.jobName = `unity-builder-job-${buildGuid}`;
yield kubernetes_secret_1.default.createSecret(secrets, this.secretName, this.namespace, this.kubeClient); yield kubernetes_secret_1.default.createSecret(secrets, this.secretName, this.namespace, this.kubeClient);
const jobSpec = kubernetes_job_spec_factory_1.default.getJobSpec(commands, image, mountdir, workingdir, environment, this.buildId, this.buildParameters, this.secretName, this.pvcName, this.jobName, k8s); const jobSpec = kubernetes_job_spec_factory_1.default.getJobSpec(commands, image, mountdir, workingdir, environment, this.buildGuid, this.buildParameters, this.secretName, this.pvcName, this.jobName, k8s);
//run //run
core.info('Creating build job'); core.info('Creating build job');
yield this.kubeClientBatch.createNamespacedJob(this.namespace, jobSpec); yield this.kubeClientBatch.createNamespacedJob(this.namespace, jobSpec);
@ -1501,7 +1501,7 @@ class Kubernetes {
} }
cleanupSharedBuildResources( cleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid, buildGuid,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters, buildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -1622,11 +1622,11 @@ exports.default = KubernetesCleanupCronJob;
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
class KubernetesJobSpecFactory { class KubernetesJobSpecFactory {
static getJobSpec(command, image, mountdir, workingDirectory, environment, buildId, buildParameters, secretName, pvcName, jobName, k8s) { static getJobSpec(command, image, mountdir, workingDirectory, environment, buildGuid, buildParameters, secretName, pvcName, jobName, k8s) {
environment.push(...[ environment.push(...[
{ {
name: 'GITHUB_SHA', name: 'GITHUB_SHA',
value: buildId, value: buildGuid,
}, },
{ {
name: 'GITHUB_WORKSPACE', name: 'GITHUB_WORKSPACE',
@ -1684,7 +1684,7 @@ class KubernetesJobSpecFactory {
name: jobName, name: jobName,
labels: { labels: {
app: 'unity-builder', app: 'unity-builder',
buildId, buildGuid,
}, },
}; };
job.spec = { job.spec = {
@ -2217,14 +2217,14 @@ class RemoteBuilder {
static build(buildParameters, baseImage) { static build(buildParameters, baseImage) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const t = Date.now(); const t = Date.now();
RemoteBuilder.buildId = remote_builder_namespace_1.default.generateBuildName(RemoteBuilder.readRunNumber(), buildParameters.platform); RemoteBuilder.buildGuid = remote_builder_namespace_1.default.generateBuildName(RemoteBuilder.readRunNumber(), buildParameters.platform);
RemoteBuilder.buildParams = buildParameters; RemoteBuilder.buildParams = buildParameters;
RemoteBuilder.setupBranchName(); RemoteBuilder.setupBranchName();
RemoteBuilder.setupFolderVariables(); RemoteBuilder.setupFolderVariables();
RemoteBuilder.setupDefaultSecrets(); RemoteBuilder.setupDefaultSecrets();
try { try {
RemoteBuilder.setupBuildPlatform(); RemoteBuilder.setupBuildPlatform();
yield this.RemoteBuilderProviderPlatform.setupSharedBuildResources(this.buildId, this.buildParams, this.branchName, this.defaultSecrets); yield this.RemoteBuilderProviderPlatform.setupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
yield RemoteBuilder.SetupStep(); yield RemoteBuilder.SetupStep();
const t2 = Date.now(); const t2 = Date.now();
core.info(`Setup time: ${Math.floor((t2 - t) / 1000)}`); core.info(`Setup time: ${Math.floor((t2 - t) / 1000)}`);
@ -2235,7 +2235,7 @@ class RemoteBuilder {
this.buildParams.postBuildSteps = yaml_1.default.parse(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)}`); 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) {
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildId, step['image'], step['commands'], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [ yield this.RemoteBuilderProviderPlatform.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 || '',
@ -2246,7 +2246,7 @@ class RemoteBuilder {
yield RemoteBuilder.UploadArtifacts(); yield RemoteBuilder.UploadArtifacts();
if (this.SteamDeploy) if (this.SteamDeploy)
yield RemoteBuilder.DeployToSteam(); yield RemoteBuilder.DeployToSteam();
yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildId, this.buildParams, this.branchName, this.defaultSecrets); yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
} }
catch (error) { catch (error) {
yield RemoteBuilder.handleException(error); yield RemoteBuilder.handleException(error);
@ -2255,7 +2255,7 @@ class RemoteBuilder {
}); });
} }
static setupFolderVariables() { static setupFolderVariables() {
this.buildPathFull = `/${buildVolumeFolder}/${this.buildId}`; this.buildPathFull = `/${buildVolumeFolder}/${this.buildGuid}`;
this.builderPathFull = `${this.buildPathFull}/builder`; this.builderPathFull = `${this.buildPathFull}/builder`;
this.steamPathFull = `${this.buildPathFull}/steam`; this.steamPathFull = `${this.buildPathFull}/steam`;
this.repoPathFull = `${this.buildPathFull}/${repositoryFolder}`; this.repoPathFull = `${this.buildPathFull}/${repositoryFolder}`;
@ -2274,7 +2274,7 @@ class RemoteBuilder {
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}"`;
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildId, 'alpine/git', [ yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine/git', [
` printenv ` printenv
# #
apk update -q apk update -q
@ -2322,7 +2322,7 @@ class RemoteBuilder {
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.buildId, baseImage.toString(), [ yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, baseImage.toString(), [
` `
printenv printenv
export GITHUB_WORKSPACE="${this.projectPathFull}" export GITHUB_WORKSPACE="${this.projectPathFull}"
@ -2341,18 +2341,18 @@ class RemoteBuilder {
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.buildId, 'alpine', [ yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'alpine', [
` `
printenv printenv
apk update -q apk update -q
apk add zip -q apk add zip -q
cd "${this.libraryFolderFull}" cd "${this.libraryFolderFull}"
zip -r "lib-${this.buildId}.zip" "${this.libraryFolderFull}" zip -r "lib-${this.buildGuid}.zip" "${this.libraryFolderFull}"
mv "lib-${this.buildId}.zip" "${this.cacheFolderFull}/lib" mv "lib-${this.buildGuid}.zip" "${this.cacheFolderFull}/lib"
cd "${this.projectPathFull}" cd "${this.projectPathFull}"
ls -lh "${this.projectPathFull}" ls -lh "${this.projectPathFull}"
zip -r "build-${this.buildId}.zip" "${this.projectPathFull}/${RemoteBuilder.buildParams.buildPath}" zip -r "build-${this.buildGuid}.zip" "${this.projectPathFull}/${RemoteBuilder.buildParams.buildPath}"
mv "build-${this.buildId}.zip" "/${buildVolumeFolder}/${this.buildId}/build-${this.buildId}.zip" mv "build-${this.buildGuid}.zip" "/${buildVolumeFolder}/${this.buildGuid}/build-${this.buildGuid}.zip"
`, `,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [ ], `/${buildVolumeFolder}`, `/${buildVolumeFolder}`, [
{ {
@ -2366,12 +2366,12 @@ class RemoteBuilder {
static UploadArtifacts() { static UploadArtifacts() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info('Starting step 4/4 upload build to s3'); core.info('Starting step 4/4 upload build to s3');
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildId, 'amazon/aws-cli', [ yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'amazon/aws-cli', [
` `
aws s3 cp ${this.buildId}/build-${this.buildId}.zip "s3://${this.buildParams.awsBaseStackName}-storage/" aws s3 cp ${this.buildGuid}/build-${this.buildGuid}.zip "s3://${this.buildParams.awsBaseStackName}-storage/"
# no need to upload Library cache for now # no need to upload Library cache for now
# aws s3 cp "/${buildVolumeFolder}/${cacheFolder}/$branch/lib-${this.buildId}.zip" "s3://${this.buildParams.awsBaseStackName}-storage/" # aws s3 cp "/${buildVolumeFolder}/${cacheFolder}/$branch/lib-${this.buildGuid}.zip" "s3://${this.buildParams.awsBaseStackName}-storage/"
${this.SteamDeploy ? '#' : ''} rm -r ${this.buildId} ${this.SteamDeploy ? '#' : ''} rm -r ${this.buildGuid}
`, `,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}/`, RemoteBuilder.readUploadArtifactEnvironmentVariables(), RemoteBuilder.readUploadArtifactsSecrets()); ], `/${buildVolumeFolder}`, `/${buildVolumeFolder}/`, RemoteBuilder.readUploadArtifactEnvironmentVariables(), RemoteBuilder.readUploadArtifactsSecrets());
}); });
@ -2379,18 +2379,18 @@ class RemoteBuilder {
static DeployToSteam() { static DeployToSteam() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
core.info('Starting steam deployment'); core.info('Starting steam deployment');
yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildId, 'cm2network/steamcmd:root', [ yield this.RemoteBuilderProviderPlatform.runBuildTask(this.buildGuid, 'cm2network/steamcmd:root', [
` `
ls ls
ls / ls /
cp -r /${buildVolumeFolder}/${this.buildId}/steam/action/entrypoint.sh /entrypoint.sh; cp -r /${buildVolumeFolder}/${this.buildGuid}/steam/action/entrypoint.sh /entrypoint.sh;
cp -r /${buildVolumeFolder}/${this.buildId}/steam/action/steps/ /steps; cp -r /${buildVolumeFolder}/${this.buildGuid}/steam/action/steps/ /steps;
chmod -R +x /entrypoint.sh; chmod -R +x /entrypoint.sh;
chmod -R +x /steps; chmod -R +x /steps;
/entrypoint.sh; /entrypoint.sh;
rm -r /${buildVolumeFolder}/${this.buildId} rm -r /${buildVolumeFolder}/${this.buildGuid}
`, `,
], `/${buildVolumeFolder}`, `/${buildVolumeFolder}/${this.buildId}/steam/action/`, [ ], `/${buildVolumeFolder}`, `/${buildVolumeFolder}/${this.buildGuid}/steam/action/`, [
{ {
name: 'GITHUB_SHA', name: 'GITHUB_SHA',
value: process.env.GITHUB_SHA || '', value: process.env.GITHUB_SHA || '',
@ -2540,7 +2540,7 @@ class RemoteBuilder {
}, },
{ {
name: 'GITHUB_WORKSPACE', name: 'GITHUB_WORKSPACE',
value: `/${buildVolumeFolder}/${this.buildId}/${repositoryFolder}/`, value: `/${buildVolumeFolder}/${this.buildGuid}/${repositoryFolder}/`,
}, },
{ {
name: 'PROJECT_PATH', name: 'PROJECT_PATH',
@ -2600,7 +2600,7 @@ class RemoteBuilder {
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.buildId, this.buildParams, this.branchName, this.defaultSecrets); yield this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(this.buildGuid, this.buildParams, this.branchName, this.defaultSecrets);
}); });
} }
} }

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -19,7 +19,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
} }
cleanupSharedBuildResources( cleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid: string, buildGuid: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters, buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -29,7 +29,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
) {} ) {}
setupSharedBuildResources( setupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid: string, buildGuid: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters, buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -101,7 +101,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
async setupCloudFormations( async setupCloudFormations(
CF: SDK.CloudFormation, CF: SDK.CloudFormation,
buildUid: string, buildGuid: string,
image: string, image: string,
entrypoint: string[], entrypoint: string[],
commands: string[], commands: string[],
@ -109,12 +109,12 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
workingdir: string, workingdir: string,
secrets: RemoteBuilderSecret[], secrets: RemoteBuilderSecret[],
): Promise<RemoteBuilderTaskDef> { ): Promise<RemoteBuilderTaskDef> {
const logid = customAlphabet(RemoteBuilderConstants.alphabet, 9)(); const logGuid = customAlphabet(RemoteBuilderConstants.alphabet, 9)();
commands[1] += ` commands[1] += `
echo "${logid}" echo "${logGuid}"
`; `;
await this.setupBaseStack(CF); await this.setupBaseStack(CF);
const taskDefStackName = `${this.baseStackName}-${buildUid}`; const taskDefStackName = `${this.baseStackName}-${buildGuid}`;
let taskDefCloudFormation = this.readTaskCloudFormationTemplate(); let taskDefCloudFormation = this.readTaskCloudFormationTemplate();
const cleanupTaskDefStackName = `${taskDefStackName}-cleanup`; const cleanupTaskDefStackName = `${taskDefStackName}-cleanup`;
const cleanupCloudFormation = fs.readFileSync(`${__dirname}/cloud-formations/cloudformation-stack-ttl.yml`, 'utf8'); const cleanupCloudFormation = fs.readFileSync(`${__dirname}/cloud-formations/cloudformation-stack-ttl.yml`, 'utf8');
@ -179,7 +179,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
}, },
{ {
ParameterKey: 'BUILDID', ParameterKey: 'BUILDID',
ParameterValue: buildUid, ParameterValue: buildGuid,
}, },
...mappedSecrets, ...mappedSecrets,
], ],
@ -204,7 +204,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
}, },
{ {
ParameterKey: 'BUILDID', ParameterKey: 'BUILDID',
ParameterValue: buildUid, ParameterValue: buildGuid,
}, },
], ],
}).promise(); }).promise();
@ -234,7 +234,7 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
ttlCloudFormation: cleanupCloudFormation, ttlCloudFormation: cleanupCloudFormation,
taskDefResources, taskDefResources,
baseResources, baseResources,
logid, logid: logGuid,
}; };
} }

View File

@ -10,7 +10,7 @@ class AWSBuildRunner {
ECS: AWS.ECS, ECS: AWS.ECS,
CF: AWS.CloudFormation, CF: AWS.CloudFormation,
environment: RemoteBuilderEnvironmentVariable[], environment: RemoteBuilderEnvironmentVariable[],
buildUid: string, buildGuid: string,
commands: string[], commands: string[],
) { ) {
const cluster = taskDef.baseResources?.find((x) => x.LogicalResourceId === 'ECSCluster')?.PhysicalResourceId || ''; const cluster = taskDef.baseResources?.find((x) => x.LogicalResourceId === 'ECSCluster')?.PhysicalResourceId || '';
@ -33,7 +33,7 @@ class AWSBuildRunner {
containerOverrides: [ containerOverrides: [
{ {
name: taskDef.taskDefStackName, name: taskDef.taskDefStackName,
environment: [...environment, { name: 'BUILDID', value: buildUid }], environment: [...environment, { name: 'BUILDID', value: buildGuid }],
command: ['-c', ...commands], command: ['-c', ...commands],
}, },
], ],

View File

@ -17,7 +17,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
private kubeConfig: k8s.KubeConfig; private kubeConfig: k8s.KubeConfig;
private kubeClient: k8s.CoreV1Api; private kubeClient: k8s.CoreV1Api;
private kubeClientBatch: k8s.BatchV1Api; private kubeClientBatch: k8s.BatchV1Api;
private buildId: string = ''; private buildGuid: string = '';
private buildParameters: BuildParameters; private buildParameters: BuildParameters;
private pvcName: string = ''; private pvcName: string = '';
private secretName: string = ''; private secretName: string = '';
@ -41,7 +41,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
this.buildParameters = buildParameters; this.buildParameters = buildParameters;
} }
public async setupSharedBuildResources( public async setupSharedBuildResources(
buildUid: string, buildGuid: string,
buildParameters: BuildParameters, buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
branchName: string, branchName: string,
@ -49,9 +49,9 @@ class Kubernetes implements RemoteBuilderProviderInterface {
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[], defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
) { ) {
try { try {
this.pvcName = `unity-builder-pvc-${buildUid}`; this.pvcName = `unity-builder-pvc-${buildGuid}`;
this.cleanupCronJobName = `unity-builder-cronjob-${buildUid}`; this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
this.serviceAccountName = `service-account-${buildUid}`; this.serviceAccountName = `service-account-${buildGuid}`;
await KubernetesStorage.createPersistentVolumeClaim( await KubernetesStorage.createPersistentVolumeClaim(
buildParameters, buildParameters,
this.pvcName, this.pvcName,
@ -72,7 +72,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
} }
async runBuildTask( async runBuildTask(
buildId: string, buildGuid: string,
image: string, image: string,
commands: string[], commands: string[],
mountdir: string, mountdir: string,
@ -82,9 +82,9 @@ class Kubernetes implements RemoteBuilderProviderInterface {
): Promise<void> { ): Promise<void> {
try { try {
// setup // setup
this.buildId = buildId; this.buildGuid = buildGuid;
this.secretName = `build-credentials-${buildId}`; this.secretName = `build-credentials-${buildGuid}`;
this.jobName = `unity-builder-job-${buildId}`; this.jobName = `unity-builder-job-${buildGuid}`;
await KubernetesSecret.createSecret(secrets, this.secretName, this.namespace, this.kubeClient); await KubernetesSecret.createSecret(secrets, this.secretName, this.namespace, this.kubeClient);
const jobSpec = KubernetesJobSpecFactory.getJobSpec( const jobSpec = KubernetesJobSpecFactory.getJobSpec(
commands, commands,
@ -92,7 +92,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
mountdir, mountdir,
workingdir, workingdir,
environment, environment,
this.buildId, this.buildGuid,
this.buildParameters, this.buildParameters,
this.secretName, this.secretName,
this.pvcName, this.pvcName,
@ -161,7 +161,7 @@ class Kubernetes implements RemoteBuilderProviderInterface {
async cleanupSharedBuildResources( async cleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid: string, buildGuid: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters, buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars

View File

@ -8,7 +8,7 @@ class KubernetesJobSpecFactory {
mountdir: string, mountdir: string,
workingDirectory: string, workingDirectory: string,
environment: RemoteBuilderEnvironmentVariable[], environment: RemoteBuilderEnvironmentVariable[],
buildId: string, buildGuid: string,
buildParameters: BuildParameters, buildParameters: BuildParameters,
secretName, secretName,
pvcName, pvcName,
@ -19,7 +19,7 @@ class KubernetesJobSpecFactory {
...[ ...[
{ {
name: 'GITHUB_SHA', name: 'GITHUB_SHA',
value: buildId, value: buildGuid,
}, },
{ {
name: 'GITHUB_WORKSPACE', name: 'GITHUB_WORKSPACE',
@ -78,7 +78,7 @@ class KubernetesJobSpecFactory {
name: jobName, name: jobName,
labels: { labels: {
app: 'unity-builder', app: 'unity-builder',
buildId, buildGuid,
}, },
}; };
job.spec = { job.spec = {

View File

@ -5,7 +5,7 @@ import RemoteBuilderSecret from './remote-builder-secret';
export interface RemoteBuilderProviderInterface { export interface RemoteBuilderProviderInterface {
cleanupSharedBuildResources( cleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid: string, buildGuid: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters, buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -15,7 +15,7 @@ export interface RemoteBuilderProviderInterface {
); );
setupSharedBuildResources( setupSharedBuildResources(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildUid: string, buildGuid: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters, buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
@ -25,7 +25,7 @@ export interface RemoteBuilderProviderInterface {
); );
runBuildTask( runBuildTask(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildId: string, buildGuid: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
image: string, image: string,
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars

View File

@ -16,7 +16,7 @@ class RemoteBuilder {
static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface; static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface;
private static buildParams: BuildParameters; private static buildParams: BuildParameters;
private static defaultSecrets: RemoteBuilderSecret[]; private static defaultSecrets: RemoteBuilderSecret[];
private static buildId: string; private static buildGuid: string;
private static branchName: string; private static branchName: string;
private static buildPathFull: string; private static buildPathFull: string;
private static builderPathFull: string; private static builderPathFull: string;
@ -35,7 +35,7 @@ class RemoteBuilder {
static async build(buildParameters: BuildParameters, baseImage) { static async build(buildParameters: BuildParameters, baseImage) {
const t = Date.now(); const t = Date.now();
RemoteBuilder.buildId = RemoteBuilderNamespace.generateBuildName( RemoteBuilder.buildGuid = RemoteBuilderNamespace.generateBuildName(
RemoteBuilder.readRunNumber(), RemoteBuilder.readRunNumber(),
buildParameters.platform, buildParameters.platform,
); );
@ -46,7 +46,7 @@ class RemoteBuilder {
try { try {
RemoteBuilder.setupBuildPlatform(); RemoteBuilder.setupBuildPlatform();
await this.RemoteBuilderProviderPlatform.setupSharedBuildResources( await this.RemoteBuilderProviderPlatform.setupSharedBuildResources(
this.buildId, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,
this.defaultSecrets, this.defaultSecrets,
@ -62,7 +62,7 @@ class RemoteBuilder {
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) {
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.RemoteBuilderProviderPlatform.runBuildTask(
this.buildId, this.buildGuid,
step['image'], step['image'],
step['commands'], step['commands'],
`/${buildVolumeFolder}`, `/${buildVolumeFolder}`,
@ -80,7 +80,7 @@ class RemoteBuilder {
await RemoteBuilder.UploadArtifacts(); await RemoteBuilder.UploadArtifacts();
if (this.SteamDeploy) await RemoteBuilder.DeployToSteam(); if (this.SteamDeploy) await RemoteBuilder.DeployToSteam();
await this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources( await this.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(
this.buildId, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,
this.defaultSecrets, this.defaultSecrets,
@ -92,7 +92,7 @@ class RemoteBuilder {
} }
private static setupFolderVariables() { private static setupFolderVariables() {
this.buildPathFull = `/${buildVolumeFolder}/${this.buildId}`; this.buildPathFull = `/${buildVolumeFolder}/${this.buildGuid}`;
this.builderPathFull = `${this.buildPathFull}/builder`; this.builderPathFull = `${this.buildPathFull}/builder`;
this.steamPathFull = `${this.buildPathFull}/steam`; this.steamPathFull = `${this.buildPathFull}/steam`;
this.repoPathFull = `${this.buildPathFull}/${repositoryFolder}`; this.repoPathFull = `${this.buildPathFull}/${repositoryFolder}`;
@ -115,7 +115,7 @@ class RemoteBuilder {
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}"`;
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.RemoteBuilderProviderPlatform.runBuildTask(
this.buildId, this.buildGuid,
'alpine/git', 'alpine/git',
[ [
` printenv ` printenv
@ -170,7 +170,7 @@ class RemoteBuilder {
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.RemoteBuilderProviderPlatform.runBuildTask(
this.buildId, this.buildGuid,
baseImage.toString(), baseImage.toString(),
[ [
` `
@ -196,7 +196,7 @@ class RemoteBuilder {
core.info('Starting step 3/4 build compression'); core.info('Starting step 3/4 build compression');
// Cleanup // Cleanup
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.RemoteBuilderProviderPlatform.runBuildTask(
this.buildId, this.buildGuid,
'alpine', 'alpine',
[ [
` `
@ -204,12 +204,12 @@ class RemoteBuilder {
apk update -q apk update -q
apk add zip -q apk add zip -q
cd "${this.libraryFolderFull}" cd "${this.libraryFolderFull}"
zip -r "lib-${this.buildId}.zip" "${this.libraryFolderFull}" zip -r "lib-${this.buildGuid}.zip" "${this.libraryFolderFull}"
mv "lib-${this.buildId}.zip" "${this.cacheFolderFull}/lib" mv "lib-${this.buildGuid}.zip" "${this.cacheFolderFull}/lib"
cd "${this.projectPathFull}" cd "${this.projectPathFull}"
ls -lh "${this.projectPathFull}" ls -lh "${this.projectPathFull}"
zip -r "build-${this.buildId}.zip" "${this.projectPathFull}/${RemoteBuilder.buildParams.buildPath}" zip -r "build-${this.buildGuid}.zip" "${this.projectPathFull}/${RemoteBuilder.buildParams.buildPath}"
mv "build-${this.buildId}.zip" "/${buildVolumeFolder}/${this.buildId}/build-${this.buildId}.zip" mv "build-${this.buildGuid}.zip" "/${buildVolumeFolder}/${this.buildGuid}/build-${this.buildGuid}.zip"
`, `,
], ],
`/${buildVolumeFolder}`, `/${buildVolumeFolder}`,
@ -228,16 +228,16 @@ class RemoteBuilder {
private static async UploadArtifacts() { private static async UploadArtifacts() {
core.info('Starting step 4/4 upload build to s3'); core.info('Starting step 4/4 upload build to s3');
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.RemoteBuilderProviderPlatform.runBuildTask(
this.buildId, this.buildGuid,
'amazon/aws-cli', 'amazon/aws-cli',
[ [
` `
aws s3 cp ${this.buildId}/build-${this.buildId}.zip "s3://${this.buildParams.awsBaseStackName}-storage/" aws s3 cp ${this.buildGuid}/build-${this.buildGuid}.zip "s3://${this.buildParams.awsBaseStackName}-storage/"
# no need to upload Library cache for now # no need to upload Library cache for now
# aws s3 cp "/${buildVolumeFolder}/${cacheFolder}/$branch/lib-${this.buildId}.zip" "s3://${ # aws s3 cp "/${buildVolumeFolder}/${cacheFolder}/$branch/lib-${this.buildGuid}.zip" "s3://${
this.buildParams.awsBaseStackName this.buildParams.awsBaseStackName
}-storage/" }-storage/"
${this.SteamDeploy ? '#' : ''} rm -r ${this.buildId} ${this.SteamDeploy ? '#' : ''} rm -r ${this.buildGuid}
`, `,
], ],
`/${buildVolumeFolder}`, `/${buildVolumeFolder}`,
@ -250,22 +250,22 @@ class RemoteBuilder {
private static async DeployToSteam() { private static async DeployToSteam() {
core.info('Starting steam deployment'); core.info('Starting steam deployment');
await this.RemoteBuilderProviderPlatform.runBuildTask( await this.RemoteBuilderProviderPlatform.runBuildTask(
this.buildId, this.buildGuid,
'cm2network/steamcmd:root', 'cm2network/steamcmd:root',
[ [
` `
ls ls
ls / ls /
cp -r /${buildVolumeFolder}/${this.buildId}/steam/action/entrypoint.sh /entrypoint.sh; cp -r /${buildVolumeFolder}/${this.buildGuid}/steam/action/entrypoint.sh /entrypoint.sh;
cp -r /${buildVolumeFolder}/${this.buildId}/steam/action/steps/ /steps; cp -r /${buildVolumeFolder}/${this.buildGuid}/steam/action/steps/ /steps;
chmod -R +x /entrypoint.sh; chmod -R +x /entrypoint.sh;
chmod -R +x /steps; chmod -R +x /steps;
/entrypoint.sh; /entrypoint.sh;
rm -r /${buildVolumeFolder}/${this.buildId} rm -r /${buildVolumeFolder}/${this.buildGuid}
`, `,
], ],
`/${buildVolumeFolder}`, `/${buildVolumeFolder}`,
`/${buildVolumeFolder}/${this.buildId}/steam/action/`, `/${buildVolumeFolder}/${this.buildGuid}/steam/action/`,
[ [
{ {
name: 'GITHUB_SHA', name: 'GITHUB_SHA',
@ -428,7 +428,7 @@ class RemoteBuilder {
}, },
{ {
name: 'GITHUB_WORKSPACE', name: 'GITHUB_WORKSPACE',
value: `/${buildVolumeFolder}/${this.buildId}/${repositoryFolder}/`, value: `/${buildVolumeFolder}/${this.buildGuid}/${repositoryFolder}/`,
}, },
{ {
name: 'PROJECT_PATH', name: 'PROJECT_PATH',
@ -490,7 +490,7 @@ class RemoteBuilder {
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.RemoteBuilderProviderPlatform.cleanupSharedBuildResources(
this.buildId, this.buildGuid,
this.buildParams, this.buildParams,
this.branchName, this.branchName,
this.defaultSecrets, this.defaultSecrets,