Skip to content

Commit 2657795

Browse files
committed
feat(ng-dev): add support for ensuring merge-mode is set to release before publishing a new release
1 parent 216dcab commit 2657795

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

ng-dev/release/publish/index.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import {GithubConfig} from '../../utils/config.js';
1010
import {AuthenticatedGitClient} from '../../utils/git/authenticated-git-client.js';
11+
import {getCurrentMergeMode} from '../../utils/git/repository-merge-mode.js';
1112
import {ReleaseConfig} from '../config/index.js';
1213
import {ActiveReleaseTrains} from '../versioning/active-release-trains.js';
1314
import {NpmCommand} from '../versioning/npm-command.js';
@@ -53,7 +54,8 @@ export class ReleaseTool {
5354
!(await this._verifyNoUncommittedChanges()) ||
5455
!(await this._verifyRunningFromNextBranch(nextBranchName)) ||
5556
!(await this._verifyNoShallowRepository()) ||
56-
!(await verifyNgDevToolIsUpToDate(this._projectRoot))
57+
!(await verifyNgDevToolIsUpToDate(this._projectRoot)) ||
58+
!(await this._verifyInReleaseMergeMode())
5759
) {
5860
return CompletionState.FATAL_ERROR;
5961
}
@@ -144,6 +146,26 @@ export class ReleaseTool {
144146
return true;
145147
}
146148

149+
/**
150+
* Verifies that there are no uncommitted changes in the project.
151+
* @returns a boolean indicating success or failure.
152+
*/
153+
private async _verifyInReleaseMergeMode(): Promise<boolean> {
154+
if (this._github.requireReleaseModeForRelease !== true) {
155+
Log.debug('Skipping check for release mode before merge as the repository does not have');
156+
Log.debug('requireReleaseModeForRelease set to true in the GithubConfig.');
157+
return true;
158+
}
159+
const mode = await getCurrentMergeMode();
160+
if (mode !== 'release') {
161+
Log.error(` ✘ The repository merge-mode is set to ${mode} but must be set to release`);
162+
Log.error(' prior to publishing releases. You can set merge-mode for release using:');
163+
Log.error(' ng-dev caretaker merge-mode release');
164+
return false;
165+
}
166+
return true;
167+
}
168+
147169
/**
148170
* Verifies that the local repository is not configured as shallow.
149171
* @returns a boolean indicating success or failure.

ng-dev/utils/config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ export interface GithubConfig {
4848
* merges, or allowing all team members to do so.
4949
*/
5050
mergeMode: RepositoryMergeModes;
51+
/**
52+
* Whether the repository requires being set to release for its merge-mode before release.
53+
*
54+
* This is put in place during the rollout period of merge-modes for releasing and will be
55+
* removed in the future when all repositories are required to use release mode during release.
56+
*/
57+
requireReleaseModeForRelease?: true;
5158
}
5259

5360
/** Configuration describing how files are synced into Google. */

0 commit comments

Comments
 (0)