unity-builder/src/model/cloud-runner/cloud-runner.ts

92 lines
4.1 KiB
TypeScript
Raw Normal View History

2022-02-01 02:31:20 +00:00
import AWSBuildPlatform from './aws';
2022-04-06 22:45:42 +00:00
import { BuildParameters, Input } from '..';
2022-02-01 02:31:20 +00:00
import Kubernetes from './k8s';
import CloudRunnerLogger from './services/cloud-runner-logger';
import { CloudRunnerStepState } from './cloud-runner-step-state';
2022-02-01 02:31:20 +00:00
import { WorkflowCompositionRoot } from './workflows/workflow-composition-root';
import { CloudRunnerError } from './error/cloud-runner-error';
import { TaskParameterSerializer } from './services/task-parameter-serializer';
import * as core from '@actions/core';
import CloudRunnerSecret from './services/cloud-runner-secret';
import { CloudRunnerProviderInterface } from './services/cloud-runner-provider-interface';
2022-04-04 19:21:37 +00:00
import CloudRunnerEnvironmentVariable from './services/cloud-runner-environment-variable';
2022-04-05 02:58:57 +00:00
import TestCloudRunner from './test';
import LocalCloudRunner from './local';
import LocalDockerCloudRunner from './local-docker';
2022-02-01 02:31:20 +00:00
class CloudRunner {
public static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;
static buildParameters: BuildParameters;
public static defaultSecrets: CloudRunnerSecret[];
2022-04-04 19:21:37 +00:00
public static cloudRunnerEnvironmentVariables: CloudRunnerEnvironmentVariable[];
2022-02-01 02:31:20 +00:00
private static setup(buildParameters: BuildParameters) {
CloudRunnerLogger.setup();
CloudRunner.buildParameters = buildParameters;
2022-02-01 02:31:20 +00:00
CloudRunner.setupBuildPlatform();
2022-04-04 19:21:37 +00:00
CloudRunner.defaultSecrets = TaskParameterSerializer.readDefaultSecrets();
CloudRunner.cloudRunnerEnvironmentVariables = TaskParameterSerializer.readBuildEnvironmentVariables();
if (!buildParameters.cliMode) {
2022-04-06 23:06:06 +00:00
const buildParameterPropertyNames = Object.getOwnPropertyNames(buildParameters);
2022-04-04 19:21:37 +00:00
for (const element of CloudRunner.cloudRunnerEnvironmentVariables) {
2022-04-06 22:45:42 +00:00
core.setOutput(Input.ToEnvVarFormat(element.name), element.value);
}
2022-04-06 23:06:06 +00:00
for (const element of buildParameterPropertyNames) {
2022-04-06 22:45:42 +00:00
core.setOutput(Input.ToEnvVarFormat(element), buildParameters[element]);
2022-04-06 22:29:44 +00:00
}
2022-02-01 02:31:20 +00:00
}
}
private static setupBuildPlatform() {
2022-04-05 02:58:57 +00:00
CloudRunnerLogger.log(`Cloud Runner platform selected ${CloudRunner.buildParameters.cloudRunnerCluster}`);
switch (CloudRunner.buildParameters.cloudRunnerCluster) {
2022-02-01 02:31:20 +00:00
case 'k8s':
CloudRunner.CloudRunnerProviderPlatform = new Kubernetes(CloudRunner.buildParameters);
2022-02-01 02:31:20 +00:00
break;
case 'aws':
CloudRunner.CloudRunnerProviderPlatform = new AWSBuildPlatform(CloudRunner.buildParameters);
2022-02-01 02:31:20 +00:00
break;
2022-04-05 02:58:57 +00:00
case 'test':
CloudRunner.CloudRunnerProviderPlatform = new TestCloudRunner();
break;
case 'local-system':
2022-04-05 02:58:57 +00:00
CloudRunner.CloudRunnerProviderPlatform = new LocalCloudRunner();
break;
case 'local-docker':
CloudRunner.CloudRunnerProviderPlatform = new LocalDockerCloudRunner();
break;
2022-02-01 02:31:20 +00:00
}
}
static async run(buildParameters: BuildParameters, baseImage: string) {
CloudRunner.setup(buildParameters);
try {
if (!CloudRunner.buildParameters.cliMode) core.startGroup('Setup shared cloud runner resources');
await CloudRunner.CloudRunnerProviderPlatform.setupSharedResources(
CloudRunner.buildParameters.buildGuid,
CloudRunner.buildParameters,
CloudRunner.buildParameters.branch,
CloudRunner.defaultSecrets,
2022-02-01 02:31:20 +00:00
);
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
2022-02-01 02:31:20 +00:00
const output = await new WorkflowCompositionRoot().run(
2022-04-04 19:21:37 +00:00
new CloudRunnerStepState(baseImage, CloudRunner.cloudRunnerEnvironmentVariables, CloudRunner.defaultSecrets),
2022-02-01 02:31:20 +00:00
);
if (!CloudRunner.buildParameters.cliMode) core.startGroup('Cleanup shared cloud runner resources');
await CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(
CloudRunner.buildParameters.buildGuid,
CloudRunner.buildParameters,
CloudRunner.buildParameters.branch,
CloudRunner.defaultSecrets,
2022-02-01 02:31:20 +00:00
);
CloudRunnerLogger.log(`Cleanup complete`);
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
2022-02-01 02:31:20 +00:00
return output;
} catch (error) {
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
2022-02-01 02:31:20 +00:00
await CloudRunnerError.handleException(error);
throw error;
}
}
}
export default CloudRunner;