Skip to content

Commit f67eae0

Browse files
committed
fix(ng-dev): handle case where emea caretaker group does not exist (#3053)
Handle usages of the caretaker handoff in which the emea caretaker group does not exist PR Close #3053
1 parent 64e2aae commit f67eae0

File tree

1 file changed

+45
-31
lines changed

1 file changed

+45
-31
lines changed

ng-dev/caretaker/handoff/update-github-team.ts

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ export async function updateCaretakerTeamViaPrompt() {
2828
getGroupMembers(`${caretakerGroup}-roster`),
2929
getGroupMembers(`${caretakerGroup}-roster-emea`),
3030
]);
31+
if (emeaRoster === null) {
32+
Log.debug(` Unable to retrieve members of the group: ${caretakerGroup}-roster-emea`);
33+
}
34+
if (roster === null) {
35+
Log.error(` ✘ Unable to retrieve members of the group: ${caretakerGroup}-roster`);
36+
return;
37+
}
3138

3239
/** The list of users selected to be members of the caretaker group. */
3340
const selectedPrimaryAndSecondary = await Prompt.checkbox<string>({
@@ -44,31 +51,34 @@ export async function updateCaretakerTeamViaPrompt() {
4451
},
4552
});
4653

47-
const emeaOptions = emeaRoster
48-
// Do not show members that are already selected as primary/secondary.
49-
.filter((m) => !selectedPrimaryAndSecondary.includes(m))
50-
.map((member) => ({
51-
value: member,
52-
name: `${member} (EMEA)`,
53-
checked: current.has(member),
54-
}));
55-
const selectedEmea = await Prompt.select<string>({
56-
choices: emeaOptions,
57-
message: 'Select EMEA caretaker',
58-
});
54+
let selectedEmea = '';
55+
if (emeaRoster !== null) {
56+
const emeaOptions = emeaRoster
57+
// Do not show members that are already selected as primary/secondary.
58+
.filter((m) => !selectedPrimaryAndSecondary.includes(m))
59+
.map((member) => ({
60+
value: member,
61+
name: `${member} (EMEA)`,
62+
checked: current.has(member),
63+
}));
64+
selectedEmea = await Prompt.select<string>({
65+
choices: emeaOptions,
66+
message: 'Select EMEA caretaker',
67+
});
5968

60-
/** Whether the user positively confirmed the selected made. */
61-
const confirmation = await Prompt.confirm({
62-
default: true,
63-
message: 'Are you sure?',
64-
});
69+
/** Whether the user positively confirmed the selected made. */
70+
const confirmation = await Prompt.confirm({
71+
default: true,
72+
message: 'Are you sure?',
73+
});
6574

66-
if (confirmation === false) {
67-
Log.warn(' ⚠ Skipping caretaker group update.');
68-
return;
75+
if (confirmation === false) {
76+
Log.warn(' ⚠ Skipping caretaker group update.');
77+
return;
78+
}
6979
}
7080

71-
const selectedSorted = [...selectedPrimaryAndSecondary, selectedEmea].sort();
81+
const selectedSorted = [...selectedPrimaryAndSecondary, selectedEmea].filter((_) => !!_).sort();
7282
const currentSorted = Array.from(current).sort();
7383

7484
if (JSON.stringify(selectedSorted) === JSON.stringify(currentSorted)) {
@@ -89,15 +99,19 @@ export async function updateCaretakerTeamViaPrompt() {
8999
async function getGroupMembers(group: string) {
90100
/** The authenticated GitClient instance. */
91101
const git = await AuthenticatedGitClient.get();
92-
93-
return (
94-
await git.github.teams.listMembersInOrg({
95-
org: git.remoteConfig.owner,
96-
team_slug: group,
97-
})
98-
).data
99-
.filter((_) => !!_)
100-
.map((member) => member!.login);
102+
try {
103+
return (
104+
await git.github.teams.listMembersInOrg({
105+
org: git.remoteConfig.owner,
106+
team_slug: group,
107+
})
108+
).data
109+
.filter((_) => !!_)
110+
.map((member) => member!.login);
111+
} catch (e) {
112+
Log.debug(e);
113+
return null;
114+
}
101115
}
102116

103117
async function setCaretakerGroup(group: string, members: string[]) {
@@ -106,7 +120,7 @@ async function setCaretakerGroup(group: string, members: string[]) {
106120
/** The full name of the group <org>/<group name>. */
107121
const fullSlug = `${git.remoteConfig.owner}/${group}`;
108122
/** The list of current members of the group. */
109-
const current = await getGroupMembers(group);
123+
const current = (await getGroupMembers(group)) || [];
110124
/** The list of users to be removed from the group. */
111125
const removed = current.filter((login) => !members.includes(login));
112126
/** Add a user to the group. */

0 commit comments

Comments
 (0)