54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @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 * as semver from 'semver'; | ||
|  | 
 | ||
|  | import {green, info, yellow} from '../../../utils/console'; | ||
|  | import {ActiveReleaseTrains} from '../../versioning/active-release-trains'; | ||
|  | import {ReleaseAction} from '../actions'; | ||
|  | import {getCommitMessageForNextBranchMajorSwitch} from '../commit-message'; | ||
|  | import {packageJsonPath} from '../constants'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Release action that configures the active next release-train to be for a major | ||
|  |  * version. This means that major changes can land in the next branch. | ||
|  |  */ | ||
|  | export class ConfigureNextAsMajorAction extends ReleaseAction { | ||
|  |   private _newVersion = semver.parse(`${this.active.next.version.major + 1}.0.0-next.0`)!; | ||
|  | 
 | ||
|  |   async getDescription() { | ||
|  |     const {branchName} = this.active.next; | ||
|  |     const newVersion = this._newVersion; | ||
|  |     return `Configure the "${branchName}" branch to be released as major (v${newVersion}).`; | ||
|  |   } | ||
|  | 
 | ||
|  |   async perform() { | ||
|  |     const {branchName} = this.active.next; | ||
|  |     const newVersion = this._newVersion; | ||
|  | 
 | ||
|  |     await this.verifyPassingGithubStatus(branchName); | ||
|  |     await this.checkoutUpstreamBranch(branchName); | ||
|  |     await this.updateProjectVersion(newVersion); | ||
|  |     await this.createCommit( | ||
|  |         getCommitMessageForNextBranchMajorSwitch(newVersion), [packageJsonPath]); | ||
|  |     const pullRequest = await this.pushChangesToForkAndCreatePullRequest( | ||
|  |         branchName, `switch-next-to-major-${newVersion}`, | ||
|  |         `Configure next branch to receive major changes for v${newVersion}`); | ||
|  | 
 | ||
|  |     info(green('  ✓   Next branch update pull request has been created.')); | ||
|  |     info(yellow(`      Please ask team members to review: ${pullRequest.url}.`)); | ||
|  |   } | ||
|  | 
 | ||
|  |   static async isActive(active: ActiveReleaseTrains) { | ||
|  |     // The `next` branch can always be switched to a major version, unless it already
 | ||
|  |     // is targeting a new major. A major can contain minor changes, so we can always
 | ||
|  |     // change the target from a minor to a major.
 | ||
|  |     return !active.next.isMajor; | ||
|  |   } | ||
|  | } |