File tree Expand file tree Collapse file tree 4 files changed +63
-6
lines changed
.github/local-actions/branch-manager Expand file tree Collapse file tree 4 files changed +63
-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 { assertValidGithubConfig , 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,17 @@ function builder(argv: Argv) {
2119
2220/** Handles the command. */
2321async function handler ( ) {
22+ const {
23+ github : { mergeMode} ,
24+ } = await getConfig ( [ assertValidGithubConfig ] ) ;
25+ if ( mergeMode && ! ( await verifyMergeMode ( mergeMode ) ) ) {
26+ return ;
27+ }
2428 await updateCaretakerTeamViaPrompt ( ) ;
2529}
2630
2731/** yargs command module for assisting in handing off caretaker. */
28- export const HandoffModule : CommandModule < { } , CaretakerHandoffOptions > = {
32+ export const HandoffModule : CommandModule < { } , { } > = {
2933 handler,
3034 builder,
3135 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 { getCurrentMergeMode , setRepoMergeMode } from '../../utils/git/repository-merge-mode' ;
13+
14+ export async function verifyMergeMode ( expectedMode : RepositoryMergeModes ) : Promise < boolean > {
15+ const currentMergeMode = await getCurrentMergeMode ( ) ;
16+ if ( currentMergeMode === expectedMode ) {
17+ return true ;
18+ }
19+
20+ Log . info (
21+ `The repository is currently set to ${ bold ( currentMergeMode ) } and needs to be reset before handoff` ,
22+ ) ;
23+ if (
24+ await Prompt . confirm ( {
25+ message : `Would you like to reset this to ${ expectedMode } ` ,
26+ default : true ,
27+ } )
28+ ) {
29+ try {
30+ await setRepoMergeMode ( expectedMode ) ;
31+ Log . info ( `${ green ( '✔' ) } Successfuly set merge-mode to ${ expectedMode } ` ) ;
32+ return true ;
33+ } catch ( err ) {
34+ Log . info ( `${ red ( '✘' ) } Failed to update merge-mode` ) ;
35+ Log . info ( err ) ;
36+ return false ;
37+ }
38+ }
39+ // User chose not to reset merge-mode
40+ Log . info ( 'Aborting...' ) ;
41+ return false ;
42+ }
Original file line number Diff line number Diff line change @@ -23,6 +23,9 @@ export type NgDevConfig<T = {}> = T & {
2323 __isNgDevConfigObject : boolean ;
2424} ;
2525
26+ /** The available merge modes for repositories to utilize for normal usage. */
27+ export type RepositoryMergeModes = 'team-only' | 'caretaker-only' ;
28+
2629/**
2730 * Describes the Github configuration for dev-infra. This configuration is
2831 * used for API requests, determining the upstream remote, etc.
@@ -40,6 +43,11 @@ export interface GithubConfig {
4043 private ?: boolean ;
4144 /** Whether to default to use NgDevService for authentication. */
4245 useNgDevAuthService ?: boolean ;
46+ /**
47+ * The merge mode to use for the repository, either allowing only the caretaker to perform
48+ * merges, or allowing all team members to do so.
49+ */
50+ mergeMode : RepositoryMergeModes ;
4351}
4452
4553/** Configuration describing how files are synced into Google. */
@@ -180,6 +188,9 @@ export function assertValidGithubConfig<T extends NgDevConfig>(
180188 if ( config . github . owner === undefined ) {
181189 errors . push ( `"github.owner" is not defined` ) ;
182190 }
191+ if ( config . github . mergeMode === undefined ) {
192+ errors . push ( `"github.mergeMode" is not defined` ) ;
193+ }
183194 }
184195 if ( errors . length ) {
185196 throw new ConfigValidationError ( 'Invalid `github` configuration' , errors ) ;
You can’t perform that action at this time.
0 commit comments