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) { constructor(buildParameters) {
this.stackName = buildParameters.awsStackName; 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) { runBuildTask(buildId, image, commands, mountdir, workingdir, environment, secrets) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const ECS = new SDK.ECS(); const ECS = new SDK.ECS();
@ -1278,6 +1300,28 @@ class Kubernetes {
this.namespace = 'default'; this.namespace = 'default';
this.buildParameters = buildParameters; 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) { runBuildTask(buildId, image, commands, mountdir, workingdir, environment, secrets) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { try {
@ -1545,7 +1589,6 @@ class Kubernetes {
core.info('cleaning up'); core.info('cleaning up');
try { try {
yield this.kubeClientBatch.deleteNamespacedJob(this.jobName, this.namespace); yield this.kubeClientBatch.deleteNamespacedJob(this.jobName, this.namespace);
yield this.kubeClient.deleteNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
yield this.kubeClient.deleteNamespacedSecret(this.secretName, this.namespace); yield this.kubeClient.deleteNamespacedSecret(this.secretName, this.namespace);
} }
catch (error) { catch (error) {
@ -1735,6 +1778,25 @@ class RemoteBuilder {
static build(buildParameters, baseImage) { static build(buildParameters, baseImage) {
var _a; var _a;
return __awaiter(this, void 0, void 0, function* () { 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 { try {
switch (buildParameters.remoteBuildCluster) { switch (buildParameters.remoteBuildCluster) {
case 'aws': case 'aws':
@ -1747,25 +1809,7 @@ class RemoteBuilder {
this.RemoteBuilderProviderPlatform = new kubernetes_build_platform_1.default(buildParameters); this.RemoteBuilderProviderPlatform = new kubernetes_build_platform_1.default(buildParameters);
break; break;
} }
const runNumber = process.env.GITHUB_RUN_NUMBER; yield this.RemoteBuilderProviderPlatform.SetupSharedBuildResources(buildUid, buildParameters, branchName, defaultSecretsArray);
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 RemoteBuilder.SetupStep(buildUid, buildParameters, branchName, defaultSecretsArray); yield RemoteBuilder.SetupStep(buildUid, buildParameters, branchName, defaultSecretsArray);
yield RemoteBuilder.BuildStep(buildUid, buildParameters, baseImage, defaultSecretsArray); yield RemoteBuilder.BuildStep(buildUid, buildParameters, baseImage, defaultSecretsArray);
yield RemoteBuilder.CompressionStep(buildUid, buildParameters, branchName, defaultSecretsArray); yield RemoteBuilder.CompressionStep(buildUid, buildParameters, branchName, defaultSecretsArray);
@ -1773,10 +1817,12 @@ class RemoteBuilder {
if (this.SteamDeploy) { if (this.SteamDeploy) {
yield RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray); yield RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray);
} }
yield this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(buildUid, buildParameters, branchName, defaultSecretsArray);
} }
catch (error) { catch (error) {
core.setFailed(error); core.setFailed(error);
core.error(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) { constructor(buildParameters: BuildParameters) {
this.stackName = buildParameters.awsStackName; 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( async runBuildTask(
buildId: string, buildId: string,

View File

@ -37,6 +37,29 @@ class Kubernetes implements RemoteBuilderProviderInterface {
this.namespace = 'default'; this.namespace = 'default';
this.buildParameters = buildParameters; 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( async runBuildTask(
buildId: string, buildId: string,
image: string, image: string,
@ -332,7 +355,6 @@ class Kubernetes implements RemoteBuilderProviderInterface {
core.info('cleaning up'); core.info('cleaning up');
try { try {
await this.kubeClientBatch.deleteNamespacedJob(this.jobName, this.namespace); await this.kubeClientBatch.deleteNamespacedJob(this.jobName, this.namespace);
await this.kubeClient.deleteNamespacedPersistentVolumeClaim(this.pvcName, this.namespace);
await this.kubeClient.deleteNamespacedSecret(this.secretName, this.namespace); await this.kubeClient.deleteNamespacedSecret(this.secretName, this.namespace);
} catch (error) { } catch (error) {
core.info('Failed to cleanup, 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 RemoteBuilderEnvironmentVariable from './remote-builder-environment-variable';
import RemoteBuilderSecret from './remote-builder-secret'; import RemoteBuilderSecret from './remote-builder-secret';
export interface RemoteBuilderProviderInterface { 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( runBuildTask(
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
buildId: string, buildId: string,

View File

@ -13,6 +13,29 @@ class RemoteBuilder {
static SteamDeploy: boolean = false; static SteamDeploy: boolean = false;
static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface; static RemoteBuilderProviderPlatform: RemoteBuilderProviderInterface;
static async build(buildParameters: BuildParameters, baseImage) { 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 { try {
switch (buildParameters.remoteBuildCluster) { switch (buildParameters.remoteBuildCluster) {
case 'aws': case 'aws':
@ -25,29 +48,12 @@ class RemoteBuilder {
this.RemoteBuilderProviderPlatform = new Kubernetes(buildParameters); this.RemoteBuilderProviderPlatform = new Kubernetes(buildParameters);
break; break;
} }
const runNumber = process.env.GITHUB_RUN_NUMBER; await this.RemoteBuilderProviderPlatform.SetupSharedBuildResources(
if (!runNumber || runNumber === '') { buildUid,
throw new Error('no run number found, exiting'); buildParameters,
} branchName,
this.SteamDeploy = process.env.STEAM_DEPLOY !== undefined || false; defaultSecretsArray,
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 RemoteBuilder.SetupStep(buildUid, buildParameters, branchName, defaultSecretsArray); await RemoteBuilder.SetupStep(buildUid, buildParameters, branchName, defaultSecretsArray);
await RemoteBuilder.BuildStep(buildUid, buildParameters, baseImage, defaultSecretsArray); await RemoteBuilder.BuildStep(buildUid, buildParameters, baseImage, defaultSecretsArray);
await RemoteBuilder.CompressionStep(buildUid, buildParameters, branchName, defaultSecretsArray); await RemoteBuilder.CompressionStep(buildUid, buildParameters, branchName, defaultSecretsArray);
@ -55,9 +61,21 @@ class RemoteBuilder {
if (this.SteamDeploy) { if (this.SteamDeploy) {
await RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray); await RemoteBuilder.DeployToSteam(buildUid, buildParameters, defaultSecretsArray);
} }
await this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(
buildUid,
buildParameters,
branchName,
defaultSecretsArray,
);
} catch (error) { } catch (error) {
core.setFailed(error); core.setFailed(error);
core.error(error); core.error(error);
await this.RemoteBuilderProviderPlatform.CleanupSharedBuildResources(
buildUid,
buildParameters,
branchName,
defaultSecretsArray,
);
} }
} }