File tree Expand file tree Collapse file tree 4 files changed +62
-6
lines changed
.github/local-actions/branch-manager Expand file tree Collapse file tree 4 files changed +62
-6
lines changed Load Diff Large diffs are not rendered by default.
Original file line number Diff line number Diff line change 77 */
88
99import { Argv , CommandModule } from 'yargs' ;
10-
1110import { addGithubTokenOption } from '../../utils/git/github-yargs.js' ;
12-
1311import { updateCaretakerTeamViaPrompt } from './update-github-team.js' ;
14-
15- export interface CaretakerHandoffOptions { }
12+ import { assertValidCaretakerConfig , getConfig } from '../../utils/config.js' ;
13+ import { verifyMergeMode } from './verify-merge-mode.js' ;
1614
1715/** Builds the command. */
1816function builder ( argv : Argv ) {
@@ -21,11 +19,18 @@ function builder(argv: Argv) {
2119
2220/** Handles the command. */
2321async function handler ( ) {
22+ // TODO(josephperrott): require merge mode to be defined in all caretaker configs.
23+ const {
24+ caretaker : { repositoryMergeMode} ,
25+ } = await getConfig ( [ assertValidCaretakerConfig ] ) ;
26+ if ( repositoryMergeMode && ! ( await verifyMergeMode ( repositoryMergeMode ) ) ) {
27+ return ;
28+ }
2429 await updateCaretakerTeamViaPrompt ( ) ;
2530}
2631
2732/** yargs command module for assisting in handing off caretaker. */
28- export const HandoffModule : CommandModule < { } , CaretakerHandoffOptions > = {
33+ export const HandoffModule : CommandModule < { } , { } > = {
2934 handler,
3035 builder,
3136 command : 'handoff' ,
Original file line number Diff line number Diff line change 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 { getRepoConfigValue } from '../config/get' ;
13+ import { setRepoConfigValue } from '../config/set' ;
14+
15+ export async function verifyMergeMode ( expectedMode : RepositoryMergeModes ) : Promise < boolean > {
16+ const currentMergeMode = await getRepoConfigValue ( 'merge-mode' ) ;
17+ if ( currentMergeMode === expectedMode ) {
18+ return true ;
19+ }
20+
21+ Log . info (
22+ `The repository is currently set to ${ bold ( currentMergeMode ) } and needs to be reset before handoff` ,
23+ ) ;
24+ if (
25+ await Prompt . confirm ( {
26+ message : `Would you like to reset this to ${ expectedMode } ` ,
27+ default : true ,
28+ } )
29+ ) {
30+ try {
31+ await setRepoConfigValue ( 'merge-mode' , expectedMode ) ;
32+ Log . info ( `${ green ( '✔' ) } Successfuly set merge-mode to ${ expectedMode } ` ) ;
33+ return true ;
34+ } catch ( err ) {
35+ Log . info ( `${ red ( '✘' ) } Failed to update merge-mode` ) ;
36+ Log . info ( err ) ;
37+ return false ;
38+ }
39+ }
40+ // User chose not to reset merge-mode
41+ Log . info ( 'Aborting...' ) ;
42+ return false ;
43+ }
Original file line number Diff line number Diff line change @@ -61,6 +61,9 @@ export interface GoogleSyncConfig {
6161 separateFilePatterns : string [ ] ;
6262}
6363
64+ /** The available merge modes for repositories to utilize for normal usage. */
65+ export type RepositoryMergeModes = 'team-only' | 'caretaker-only' ;
66+
6467export interface CaretakerConfig {
6568 /** Github queries showing a snapshot of pulls/issues caretakers need to monitor. */
6669 githubQueries ?: { name : string ; query : string } [ ] ;
@@ -74,6 +77,11 @@ export interface CaretakerConfig {
7477 * The configuration file is expected to be valid JSONC and match {@see GoogleSyncConfig}.
7578 */
7679 g3SyncConfigPath ?: string ;
80+ /**
81+ * The merge mode to use for the repository, either allowing only the caretaker to perform
82+ * merges, or allowing all team members to do so.
83+ */
84+ repositoryMergeMode ?: RepositoryMergeModes ;
7785}
7886
7987/** The filename expected for creating the ng-dev config. */
You can’t perform that action at this time.
0 commit comments