2022-02-01 02:31:20 +00:00
|
|
|
import AWSBuildPlatform from './aws';
|
|
|
|
|
import { BuildParameters } from '..';
|
|
|
|
|
import Kubernetes from './k8s';
|
|
|
|
|
import CloudRunnerLogger from './services/cloud-runner-logger';
|
2022-04-03 00:31:08 +00:00
|
|
|
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';
|
2022-04-03 00:31:08 +00:00
|
|
|
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 {
|
2022-04-03 00:31:08 +00:00
|
|
|
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();
|
2022-04-03 00:31:08 +00:00
|
|
|
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();
|
2022-04-02 23:12:35 +00:00
|
|
|
if (!buildParameters.cliMode) {
|
2022-04-04 19:21:37 +00:00
|
|
|
for (const element of CloudRunner.cloudRunnerEnvironmentVariables) {
|
2022-04-02 23:12:35 +00:00
|
|
|
core.setOutput(element.name, element.value);
|
|
|
|
|
}
|
2022-04-06 22:29:44 +00:00
|
|
|
for (const element in buildParameters) {
|
|
|
|
|
core.setOutput(element, buildParameters[element]);
|
|
|
|
|
}
|
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}`);
|
2022-04-03 00:31:08 +00:00
|
|
|
switch (CloudRunner.buildParameters.cloudRunnerCluster) {
|
2022-02-01 02:31:20 +00:00
|
|
|
case 'k8s':
|
2022-04-03 00:31:08 +00:00
|
|
|
CloudRunner.CloudRunnerProviderPlatform = new Kubernetes(CloudRunner.buildParameters);
|
2022-02-01 02:31:20 +00:00
|
|
|
break;
|
|
|
|
|
case 'aws':
|
2022-04-03 00:31:08 +00:00
|
|
|
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;
|
2022-04-06 19:48:23 +00:00
|
|
|
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 {
|
2022-04-06 22:01:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('Setup shared cloud runner resources');
|
2022-04-03 00:31:08 +00:00
|
|
|
await CloudRunner.CloudRunnerProviderPlatform.setupSharedResources(
|
|
|
|
|
CloudRunner.buildParameters.buildGuid,
|
|
|
|
|
CloudRunner.buildParameters,
|
|
|
|
|
CloudRunner.buildParameters.branch,
|
|
|
|
|
CloudRunner.defaultSecrets,
|
2022-02-01 02:31:20 +00:00
|
|
|
);
|
2022-04-03 00:31:08 +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
|
|
|
);
|
2022-04-06 22:01:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('Cleanup shared cloud runner resources');
|
2022-04-03 00:31:08 +00:00
|
|
|
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`);
|
2022-04-03 00:31:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
2022-02-01 02:31:20 +00:00
|
|
|
return output;
|
|
|
|
|
} catch (error) {
|
2022-04-03 00:31:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
2022-02-01 02:31:20 +00:00
|
|
|
await CloudRunnerError.handleException(error);
|
|
|
|
|
throw error;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
export default CloudRunner;
|