Implemented multi-step shared resources in interface

pull/273/head
Frostebite 2021-06-19 23:15:44 +01:00
parent f10277a368
commit 5a7ed829ac
6 changed files with 176 additions and 45 deletions

86
dist/index.js vendored
View File

@ -858,6 +858,28 @@ class AWSBuildEnvironment {
constructor(buildParameters) {
this.stackName = buildParameters.awsStackName;
}
CleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid,
// eslint-disable-next-line no-unused-vars
buildParameters,
// eslint-disable-next-line no-unused-vars
branchName,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray) {
throw new Error('Method not implemented.');
}
SetupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid,
// eslint-disable-next-line no-unused-vars
buildParameters,
// eslint-disable-next-line no-unused-vars
branchName,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray) {
throw new Error('Method not implemented.');
}
runBuildTask(buildId, image, commands, mountdir, workingdir, environment, secrets) {
return __awaiter(this, void 0, void 0, function* () {
const ECS = new SDK.ECS();
@ -1278,6 +1300,28 @@ class Kubernetes {
this.namespace = 'default';
this.buildParameters = buildParameters;
}
CleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid,
// eslint-disable-next-line no-unused-vars
buildParameters,
// eslint-disable-next-line no-unused-vars
branchName,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray) {
return __awaiter(this, void 0, void 0, function* () {
yield this.kubeClient.deleteNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
});
}
SetupSharedBuildResources(buildUid, buildParameters,
// eslint-disable-next-line no-unused-vars
branchName,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray) {
return __awaiter(this, void 0, void 0, function* () {
yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace);
});
}
runBuildTask(buildId, image, commands, mountdir, workingdir, environment, secrets) {
return __awaiter(this, void 0, void 0, function* () {
try {
@ -1545,7 +1589,6 @@ class Kubernetes {
core.info('cleaning up');
try {
yield this.kubeClientBatch.deleteNamespacedJob(this.jobName, this.namespace);
yield this.kubeClient.deleteNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
yield this.kubeClient.deleteNamespacedSecret(this.secretName, this.namespace);
}
catch (error) {
@ -1735,6 +1778,25 @@ class RemoteBuilder {
static build(buildParameters, baseImage) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const runNumber = process.env.GITHUB_RUN_NUMBER;
if (!runNumber || runNumber === '') {
throw new Error('no run number found, exiting');
}
const buildUid = remote_builder_namespace_1.default.generateBuildName(runNumber, buildParameters.platform);
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('')) || '';
const branchName = process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName;
this.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false;
const token = buildParameters.githubToken;
const defaultSecretsArray = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: token,
},
];
try {
switch (buildParameters.remoteBuildCluster) {
case 'aws':
@ -1747,25 +1809,7 @@ class RemoteBuilder {
this.RemoteBuilderProviderPlatform = new kubernetes_build_platform_1.default(buildParameters);
break;
}
const runNumber = process.env.GITHUB_RUN_NUMBER;
if (!runNumber || runNumber === '') {
throw new Error('no run number found, exiting');
}
this.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false;
const buildUid = remote_builder_namespace_1.default.generateBuildName(runNumber, buildParameters.platform);
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('')) || '';
const branchName = process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName;
const token = buildParameters.githubToken;
const defaultSecretsArray = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: token,
},
];
yield this.RemoteBuilderProviderPlatform.SetupSharedBuildResources(buildUid, buildParameters, branchName, defaultSecretsArray);
yield RemoteBuilder.SetupStep(buildUid, buildParameters, branchName, defaultSecretsArray);
yield RemoteBuilder.BuildStep(buildUid, buildParameters, baseImage, defaultSecretsArray);
yield RemoteBuilder.CompressionStep(buildUid, buildParameters, branchName, defaultSecretsArray);
@ -1773,10 +1817,12 @@ class RemoteBuilder {
if (this.SteamDeploy) {
yield RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray);
}
yield this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(buildUid, buildParameters, branchName, defaultSecretsArray);
}
catch (error) {
core.setFailed(error);
core.error(error);
yield this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(buildUid, buildParameters, branchName, defaultSecretsArray);
}
});
}

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -16,6 +16,30 @@ class AWSBuildEnvironment implements RemoteBuilderProviderInterface {
constructor(buildParameters: BuildParameters) {
this.stackName = buildParameters.awsStackName;
}
CleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid: string,
// eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars
branchName: string,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
) {
throw new Error('Method not implemented.');
}
SetupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid: string,
// eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars
branchName: string,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
) {
throw new Error('Method not implemented.');
}
async runBuildTask(
buildId: string,

View File

@ -37,6 +37,29 @@ class Kubernetes implements RemoteBuilderProviderInterface {
this.namespace = 'default';
this.buildParameters = buildParameters;
}
async CleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid: string,
// eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars
branchName: string,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
) {
await this.kubeClient.deleteNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
}
public async SetupSharedBuildResources(
buildUid: string,
buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars
branchName: string,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
) {
await KubernetesStorage.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace);
}
async runBuildTask(
buildId: string,
image: string,
@ -332,7 +355,6 @@ class Kubernetes implements RemoteBuilderProviderInterface {
core.info('cleaning up');
try {
await this.kubeClientBatch.deleteNamespacedJob(this.jobName, this.namespace);
await this.kubeClient.deleteNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
await this.kubeClient.deleteNamespacedSecret(this.secretName, this.namespace);
} catch (error) {
core.info('Failed to cleanup, error:');

View File

@ -1,7 +1,28 @@
import BuildParameters from '../build-parameters';
import RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable';
import RemoteBuilderSecret from './remote-builder-secret';
export interface RemoteBuilderProviderInterface {
CleanupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid: string,
// eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars
branchName: string,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
);
SetupSharedBuildResources(
// eslint-disable-next-line no-unused-vars
buildUid: string,
// eslint-disable-next-line no-unused-vars
buildParameters: BuildParameters,
// eslint-disable-next-line no-unused-vars
branchName: string,
// eslint-disable-next-line no-unused-vars
defaultSecretsArray: { ParameterKey: string; EnvironmentVariable: string; ParameterValue: string }[],
);
runBuildTask(
// eslint-disable-next-line no-unused-vars
buildId: string,

View File

@ -13,6 +13,29 @@ class RemoteBuilder {
static SteamDeploy: boolean = false;
static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface;
static async build(buildParameters: BuildParameters, baseImage) {
const runNumber = process.env.GITHUB_RUN_NUMBER;
if (!runNumber || runNumber === '') {
throw new Error('no run number found, exiting');
}
const buildUid = RemoteBuilderNamespace.generateBuildName(runNumber, buildParameters.platform);
const defaultBranchName =
process.env.GITHUB_REF?.split('/')
.filter((x) => {
x = x[0].toUpperCase() + x.slice(1);
return x;
})
.join('') || '';
const branchName =
process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName;
this.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false;
const token: string = buildParameters.githubToken;
const defaultSecretsArray = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: token,
},
];
try {
switch (buildParameters.remoteBuildCluster) {
case 'aws':
@ -25,29 +48,12 @@ class RemoteBuilder {
this.RemoteBuilderProviderPlatform = new Kubernetes(buildParameters);
break;
}
const runNumber = process.env.GITHUB_RUN_NUMBER;
if (!runNumber || runNumber === '') {
throw new Error('no run number found, exiting');
}
this.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false;
const buildUid = RemoteBuilderNamespace.generateBuildName(runNumber, buildParameters.platform);
const defaultBranchName =
process.env.GITHUB_REF?.split('/')
.filter((x) => {
x = x[0].toUpperCase() + x.slice(1);
return x;
})
.join('') || '';
const branchName =
process.env.REMOTE_BUILDER_CACHE !== undefined ? process.env.REMOTE_BUILDER_CACHE : defaultBranchName;
const token: string = buildParameters.githubToken;
const defaultSecretsArray = [
{
ParameterKey: 'GithubToken',
EnvironmentVariable: 'GITHUB_TOKEN',
ParameterValue: token,
},
];
await this.RemoteBuilderProviderPlatform.SetupSharedBuildResources(
buildUid,
buildParameters,
branchName,
defaultSecretsArray,
);
await RemoteBuilder.SetupStep(buildUid, buildParameters, branchName, defaultSecretsArray);
await RemoteBuilder.BuildStep(buildUid, buildParameters, baseImage, defaultSecretsArray);
await RemoteBuilder.CompressionStep(buildUid, buildParameters, branchName, defaultSecretsArray);
@ -55,9 +61,21 @@ class RemoteBuilder {
if (this.SteamDeploy) {
await RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray);
}
await this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(
buildUid,
buildParameters,
branchName,
defaultSecretsArray,
);
} catch (error) {
core.setFailed(error);
core.error(error);
await this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(
buildUid,
buildParameters,
branchName,
defaultSecretsArray,
);
}
}