Skip to content

Commit b9a36f2

Browse files
committed
feat(ng-dev): add support for verifying merge-mode reset before caretaker handoff
1 parent 4391c78 commit b9a36f2

File tree

2 files changed

+47
-5
lines changed

2 files changed

+47
-5
lines changed

ng-dev/caretaker/handoff/cli.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
*/
88

99
import {Argv, CommandModule} from 'yargs';
10-
1110
import {addGithubTokenOption} from '../../utils/git/github-yargs.js';
12-
1311
import {updateCaretakerTeamViaPrompt} from './update-github-team.js';
14-
15-
export interface CaretakerHandoffOptions {}
12+
import {assertValidGithubConfig, getConfig} from '../../utils/config.js';
13+
import {verifyMergeMode} from './verify-merge-mode.js';
1614

1715
/** Builds the command. */
1816
function builder(argv: Argv) {
@@ -21,11 +19,15 @@ function builder(argv: Argv) {
2119

2220
/** Handles the command. */
2321
async function handler() {
22+
const {mergeMode} = (await getConfig([assertValidGithubConfig])).github;
23+
if (!(await verifyMergeMode(mergeMode))) {
24+
return;
25+
}
2426
await updateCaretakerTeamViaPrompt();
2527
}
2628

2729
/** yargs command module for assisting in handing off caretaker. */
28-
export const HandoffModule: CommandModule<{}, CaretakerHandoffOptions> = {
30+
export const HandoffModule: CommandModule<{}, {}> = {
2931
handler,
3032
builder,
3133
command: 'handoff',
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.io/license
7+
*/
8+
9+
import {RepositoryMergeModes} from '../../utils/config';
10+
import {bold, green, Log, red} from '../../utils/logging';
11+
import {Prompt} from '../../utils/prompt';
12+
import {getCurrentMergeMode, setRepoMergeMode} from '../../utils/git/repository-merge-mode';
13+
14+
export async function verifyMergeMode(expectedMode: RepositoryMergeModes): Promise<boolean> {
15+
const mode = await getCurrentMergeMode();
16+
if (mode === expectedMode) {
17+
return true;
18+
}
19+
20+
Log.info(`The repository merge-mode is currently ${bold(mode)} and must be reset before handoff`);
21+
if (
22+
await Prompt.confirm({
23+
message: `Would you like to reset this to ${expectedMode}`,
24+
default: true,
25+
})
26+
) {
27+
try {
28+
await setRepoMergeMode(expectedMode);
29+
Log.info(`${green('✔')} Successfuly set merge-mode to ${expectedMode}`);
30+
return true;
31+
} catch (err) {
32+
Log.info(`${red('✘')} Failed to update merge-mode`);
33+
Log.info(err);
34+
return false;
35+
}
36+
}
37+
// User chose not to reset merge-mode
38+
Log.info('Aborting...');
39+
return false;
40+
}

0 commit comments

Comments
 (0)