2021-09-22 20:05:21 +00:00
|
|
|
import AWSBuildPlatform from './aws/aws-build-platform';
|
2021-08-01 23:43:20 +00:00
|
|
|
import * as core from '@actions/core';
|
|
|
|
|
import { BuildParameters } from '..';
|
2021-10-04 23:23:49 +00:00
|
|
|
import CloudRunnerNamespace from './services/cloud-runner-namespace';
|
|
|
|
|
import { CloudRunnerState } from './state/cloud-runner-state';
|
2021-09-22 20:05:21 +00:00
|
|
|
import Kubernetes from './k8s/kubernetes-build-platform';
|
2021-10-04 23:23:49 +00:00
|
|
|
import CloudRunnerLogger from './services/cloud-runner-logger';
|
|
|
|
|
import { BuildStep } from './steps/build-step';
|
|
|
|
|
import { CompressionStep } from './steps/compression-step';
|
|
|
|
|
import { DownloadRepositoryStep } from './steps/download-repository-step';
|
|
|
|
|
import { CustomStep } from './steps/custom-step';
|
|
|
|
|
import { EphemeralGitHubRunnerStep } from './steps/ephemeral-github-runner-step';
|
|
|
|
|
import { CloudRunnerStepState } from './state/cloud-runner-step-state';
|
2021-08-01 23:43:20 +00:00
|
|
|
|
2021-08-17 20:09:42 +00:00
|
|
|
class CloudRunner {
|
2021-08-21 23:26:03 +00:00
|
|
|
private static setup(buildParameters: BuildParameters) {
|
2021-09-21 18:27:04 +00:00
|
|
|
CloudRunnerLogger.setup();
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerState.buildGuid = CloudRunnerNamespace.generateBuildName(
|
|
|
|
|
CloudRunnerState.readRunNumber(),
|
2021-08-01 23:43:20 +00:00
|
|
|
buildParameters.platform,
|
|
|
|
|
);
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerState.buildParams = buildParameters;
|
|
|
|
|
CloudRunnerState.setupBranchName();
|
|
|
|
|
CloudRunnerState.setupFolderVariables();
|
|
|
|
|
CloudRunnerState.setupDefaultSecrets();
|
2021-08-21 23:26:03 +00:00
|
|
|
CloudRunner.setupBuildPlatform();
|
2021-08-01 23:43:20 +00:00
|
|
|
}
|
|
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
public static setupBuildPlatform() {
|
|
|
|
|
switch (CloudRunnerState.buildParams.cloudRunnerCluster) {
|
2021-08-01 23:43:20 +00:00
|
|
|
case 'aws':
|
2021-09-21 18:27:04 +00:00
|
|
|
CloudRunnerLogger.log('Building with AWS');
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerState.CloudRunnerProviderPlatform = new AWSBuildPlatform(CloudRunnerState.buildParams);
|
2021-08-01 23:43:20 +00:00
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
case 'k8s':
|
2021-09-21 18:27:04 +00:00
|
|
|
CloudRunnerLogger.log('Building with Kubernetes');
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerState.CloudRunnerProviderPlatform = new Kubernetes(CloudRunnerState.buildParams);
|
2021-08-01 23:43:20 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
static async run(buildParameters: BuildParameters, baseImage) {
|
|
|
|
|
CloudRunner.setup(buildParameters);
|
|
|
|
|
try {
|
|
|
|
|
await CloudRunnerState.CloudRunnerProviderPlatform.setupSharedBuildResources(
|
|
|
|
|
CloudRunnerState.buildGuid,
|
|
|
|
|
CloudRunnerState.buildParams,
|
|
|
|
|
CloudRunnerState.branchName,
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
);
|
2021-10-04 23:09:04 +00:00
|
|
|
await CloudRunner.runJob(baseImage.toString());
|
2021-10-04 22:13:26 +00:00
|
|
|
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources(
|
|
|
|
|
CloudRunnerState.buildGuid,
|
|
|
|
|
CloudRunnerState.buildParams,
|
|
|
|
|
CloudRunnerState.branchName,
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
await CloudRunner.handleException(error);
|
|
|
|
|
throw error;
|
2021-08-01 23:43:20 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
private static async runJob(baseImage: any) {
|
|
|
|
|
core.info(`Custom build steps: ${CloudRunnerState.buildParams.customBuildSteps}`);
|
|
|
|
|
if (CloudRunnerState.buildParams.customBuildSteps === '') {
|
2021-08-21 23:26:03 +00:00
|
|
|
await CloudRunner.standardBuildAutomation(baseImage);
|
2021-10-04 22:13:26 +00:00
|
|
|
} else if (CloudRunnerState.buildParams.customBuildSteps === 'ephemeral') {
|
|
|
|
|
await new EphemeralGitHubRunnerStep().run(
|
|
|
|
|
new CloudRunnerStepState(
|
|
|
|
|
baseImage,
|
|
|
|
|
CloudRunnerState.readBuildEnvironmentVariables(),
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
} else if (CloudRunnerState.buildParams.customBuildSteps === 'download') {
|
|
|
|
|
await new DownloadRepositoryStep().run(
|
|
|
|
|
new CloudRunnerStepState(
|
|
|
|
|
'alpine/git',
|
|
|
|
|
CloudRunnerState.readBuildEnvironmentVariables(),
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
),
|
|
|
|
|
);
|
2021-08-21 23:26:03 +00:00
|
|
|
} else {
|
2021-10-04 22:13:26 +00:00
|
|
|
await CustomStep.runCustomJob(CloudRunnerState.buildParams.customBuildSteps);
|
2021-08-21 23:26:03 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static async standardBuildAutomation(baseImage: any) {
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
|
|
|
|
|
|
|
|
|
|
await new DownloadRepositoryStep().run(
|
|
|
|
|
new CloudRunnerStepState(
|
|
|
|
|
'alpine/git',
|
|
|
|
|
CloudRunnerState.readBuildEnvironmentVariables(),
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
),
|
2021-09-22 19:42:45 +00:00
|
|
|
);
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerLogger.logWithTime('Download repository step time');
|
2021-09-29 23:00:44 +00:00
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
await CustomStep.runCustomJob(CloudRunnerState.buildParams.preBuildSteps);
|
|
|
|
|
CloudRunnerLogger.logWithTime('Pre build step(s) time');
|
2021-08-21 23:26:03 +00:00
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
new BuildStep().run(
|
|
|
|
|
new CloudRunnerStepState(
|
|
|
|
|
baseImage,
|
|
|
|
|
CloudRunnerState.readBuildEnvironmentVariables(),
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
),
|
2021-08-21 23:26:03 +00:00
|
|
|
);
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerLogger.logWithTime('Build time');
|
2021-08-21 23:26:03 +00:00
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
await new CompressionStep().run(
|
|
|
|
|
new CloudRunnerStepState(
|
|
|
|
|
'alpine',
|
|
|
|
|
CloudRunnerState.readBuildEnvironmentVariables(),
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
|
|
|
|
),
|
2021-08-21 23:26:03 +00:00
|
|
|
);
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerLogger.logWithTime('Compression time');
|
2021-08-21 23:26:03 +00:00
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
await CustomStep.runCustomJob(CloudRunnerState.buildParams.postBuildSteps);
|
|
|
|
|
CloudRunnerLogger.logWithTime('Post build step(s) time');
|
2021-08-21 23:26:03 +00:00
|
|
|
|
2021-10-04 22:13:26 +00:00
|
|
|
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
|
2021-08-21 23:26:03 +00:00
|
|
|
}
|
|
|
|
|
|
2021-08-01 23:43:20 +00:00
|
|
|
private static async handleException(error: unknown) {
|
2021-09-21 18:27:04 +00:00
|
|
|
CloudRunnerLogger.error(JSON.stringify(error, undefined, 4));
|
2021-08-01 23:43:20 +00:00
|
|
|
core.setFailed('Remote Builder failed');
|
2021-10-04 22:13:26 +00:00
|
|
|
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedBuildResources(
|
|
|
|
|
CloudRunnerState.buildGuid,
|
|
|
|
|
CloudRunnerState.buildParams,
|
|
|
|
|
CloudRunnerState.branchName,
|
|
|
|
|
CloudRunnerState.defaultSecrets,
|
2021-08-01 23:43:20 +00:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-08-17 20:09:42 +00:00
|
|
|
export default CloudRunner;
|