Skip to content

Commit 5bfed18

Browse files
authored
feat(ng-dev): support EMEA caretaker in ng-dev handoff (#2667)
This will be useful as currently EMEA caretaker permissions were manually handled.
1 parent cc73dde commit 5bfed18

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

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

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,18 @@ export async function updateCaretakerTeamViaPrompt() {
2424

2525
/** The list of current members in the group. */
2626
const current = new Set(await getGroupMembers(caretakerGroup));
27-
/** The list of members able to be added to the group as defined by a separate roster group. */
28-
const roster = (await getGroupMembers(`${caretakerGroup}-roster`)).map((member) => ({
29-
value: member,
30-
checked: current.has(member),
31-
}));
27+
const [roster, emeaRoster] = await Promise.all([
28+
getGroupMembers(`${caretakerGroup}-roster`),
29+
getGroupMembers(`${caretakerGroup}-roster-emea`),
30+
]);
3231

3332
/** The list of users selected to be members of the caretaker group. */
34-
const selected = await Prompt.checkbox({
35-
choices: roster,
36-
message: 'Select 2 caretakers for the upcoming rotation:',
33+
const selectedPrimaryAndSecondary = await Prompt.checkbox<string>({
34+
choices: roster.map((member) => ({
35+
value: member,
36+
checked: current.has(member),
37+
})),
38+
message: 'Select 2 caretakers for the upcoming rotation (primary and secondary):',
3739
validate: (value) => {
3840
if (value.length !== 2) {
3941
return 'Please select exactly 2 caretakers for the upcoming rotation.';
@@ -42,6 +44,19 @@ export async function updateCaretakerTeamViaPrompt() {
4244
},
4345
});
4446

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+
});
59+
4560
/** Whether the user positively confirmed the selected made. */
4661
const confirmation = await Prompt.confirm({
4762
default: true,
@@ -53,13 +68,16 @@ export async function updateCaretakerTeamViaPrompt() {
5368
return;
5469
}
5570

56-
if (JSON.stringify(selected) === JSON.stringify(current)) {
71+
const selectedSorted = [...selectedPrimaryAndSecondary, selectedEmea].sort();
72+
const currentSorted = Array.from(current).sort();
73+
74+
if (JSON.stringify(selectedSorted) === JSON.stringify(currentSorted)) {
5775
Log.info(green(' ✔ Caretaker group already up to date.'));
5876
return;
5977
}
6078

6179
try {
62-
await setCaretakerGroup(caretakerGroup, selected);
80+
await setCaretakerGroup(caretakerGroup, selectedSorted);
6381
} catch {
6482
Log.error(' ✘ Failed to update caretaker group.');
6583
return;

0 commit comments

Comments
 (0)