| 
									
										
										
										
											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'; | 
					
						
							| 
									
										
										
										
											2021-10-06 01:08:24 +00:00
										 |  |  | import { CustomStep } from './workflows/custom-step'; | 
					
						
							|  |  |  | import { EphemeralGitHubRunnerStep } from './workflows/ephemeral-github-runner-step'; | 
					
						
							| 
									
										
										
										
											2021-10-04 23:23:49 +00:00
										 |  |  | 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; |