43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { BuildParameters } from '../..';
 | |
| import YAML from 'yaml';
 | |
| import CloudRunnerSecret from './cloud-runner-secret';
 | |
| import CloudRunner from '../cloud-runner';
 | |
| 
 | |
| export class CloudRunnerCustomHooks {
 | |
|   // TODO also accept hooks as yaml files in the repo
 | |
|   public static ApplyHooksToCommands(commands: string, buildParameters: BuildParameters): string {
 | |
|     const hooks = CloudRunnerCustomHooks.getHooks(buildParameters.customJobHooks).filter((x) => x.step.includes(`all`));
 | |
| 
 | |
|     return `echo "---"
 | |
|       echo "start cloud runner init"
 | |
|       ${CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} printenv
 | |
|       echo "start of cloud runner job"
 | |
|       ${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
 | |
|       ${commands}
 | |
|       ${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
 | |
|       echo "end of cloud runner job"
 | |
|       echo "---${buildParameters.logId}"`;
 | |
|   }
 | |
| 
 | |
|   public static getHooks(customJobHooks): Hook[] {
 | |
|     const experimentHooks = customJobHooks;
 | |
|     let output = new Array<Hook>();
 | |
|     if (experimentHooks && experimentHooks !== '') {
 | |
|       try {
 | |
|         output = YAML.parse(experimentHooks);
 | |
|       } catch (error) {
 | |
|         throw error;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return output.filter((x) => x.step !== undefined && x.hook !== undefined && x.hook.length > 0);
 | |
|   }
 | |
| }
 | |
| export class Hook {
 | |
|   public commands;
 | |
|   public secrets: CloudRunnerSecret[] = new Array<CloudRunnerSecret>();
 | |
|   public name;
 | |
|   public hook!: string[];
 | |
|   public step!: string[];
 | |
| }
 |