| 
									
										
										
										
											2020-09-09 15:01:18 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google LLC All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {Arguments, Argv, CommandModule} from 'yargs'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {getConfig, getRepoBaseDir} from '../../utils/config'; | 
					
						
							|  |  |  | import {error, green, info, red, yellow} from '../../utils/console'; | 
					
						
							|  |  |  | import {addGithubTokenOption} from '../../utils/git/github-yargs'; | 
					
						
							| 
									
										
										
										
											2020-10-01 16:06:56 -07:00
										 |  |  | import {getReleaseConfig} from '../config/index'; | 
					
						
							| 
									
										
										
										
											2020-09-09 15:01:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | import {CompletionState, ReleaseTool} from './index'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Command line options for publishing a release. */ | 
					
						
							|  |  |  | export interface ReleasePublishOptions { | 
					
						
							|  |  |  |   githubToken: string; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Yargs command builder for configuring the `ng-dev release publish` command. */ | 
					
						
							|  |  |  | function builder(argv: Argv): Argv<ReleasePublishOptions> { | 
					
						
							|  |  |  |   return addGithubTokenOption(argv); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Yargs command handler for staging a release. */ | 
					
						
							|  |  |  | async function handler(args: Arguments<ReleasePublishOptions>) { | 
					
						
							|  |  |  |   const config = getConfig(); | 
					
						
							|  |  |  |   const releaseConfig = getReleaseConfig(config); | 
					
						
							|  |  |  |   const projectDir = getRepoBaseDir(); | 
					
						
							|  |  |  |   const task = new ReleaseTool(releaseConfig, config.github, args.githubToken, projectDir); | 
					
						
							|  |  |  |   const result = await task.run(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   switch (result) { | 
					
						
							|  |  |  |     case CompletionState.FATAL_ERROR: | 
					
						
							|  |  |  |       error(red(`Release action has been aborted due to fatal errors. See above.`)); | 
					
						
							|  |  |  |       process.exitCode = 1; | 
					
						
							|  |  |  |       break; | 
					
						
							|  |  |  |     case CompletionState.MANUALLY_ABORTED: | 
					
						
							|  |  |  |       info(yellow(`Release action has been manually aborted.`)); | 
					
						
							|  |  |  |       break; | 
					
						
							|  |  |  |     case CompletionState.SUCCESS: | 
					
						
							|  |  |  |       info(green(`Release action has completed successfully.`)); | 
					
						
							|  |  |  |       break; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** CLI command module for publishing a release. */ | 
					
						
							|  |  |  | export const ReleasePublishCommandModule: CommandModule<{}, ReleasePublishOptions> = { | 
					
						
							|  |  |  |   builder, | 
					
						
							|  |  |  |   handler, | 
					
						
							|  |  |  |   command: 'publish', | 
					
						
							|  |  |  |   describe: 'Publish new releases and configure version branches.', | 
					
						
							|  |  |  | }; |