From 58a1fe4761b55e98d6652e04fa628d81d3e75a1d Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Tue, 4 Nov 2025 12:14:13 +0100 Subject: [PATCH] ci/github-script/bot: move getTeamMembers cache into main file This allows re-using this elsewhere with a shared cache. --- ci/github-script/bot.js | 24 ++++++++++++++++++++++++ ci/github-script/merge.js | 30 ++++-------------------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/ci/github-script/bot.js b/ci/github-script/bot.js index fb5e79e54239..2c3bd45f69e5 100644 --- a/ci/github-script/bot.js +++ b/ci/github-script/bot.js @@ -96,6 +96,29 @@ module.exports = async ({ github, context, core, dry }) => { return maintainerMaps[branch] } + // Caching the list of team members saves API requests when running the bot on the schedule and + // processing many PRs at once. + const members = {} + function getTeamMembers(team_slug) { + if (context.eventName === 'pull_request') { + // We have no chance of getting a token in the pull_request context with the right + // permissions to access the members endpoint below. Thus, we're pretending to have + // no members. This is OK; because this is only for the Test workflow, not for + // real use. + return [] + } + + if (!members[team_slug]) { + members[team_slug] = github.paginate(github.rest.teams.listMembersInOrg, { + org: context.repo.owner, + team_slug, + per_page: 100, + }) + } + + return members[team_slug] + } + async function handlePullRequest({ item, stats, events }) { const log = (k, v) => core.info(`PR #${item.number} - ${k}: ${v}`) @@ -121,6 +144,7 @@ module.exports = async ({ github, context, core, dry }) => { pull_request, events, maintainers, + getTeamMembers, }) // When the same change has already been merged to the target branch, a PR will still be diff --git a/ci/github-script/merge.js b/ci/github-script/merge.js index 02854dbd5ea3..8a6789a30544 100644 --- a/ci/github-script/merge.js +++ b/ci/github-script/merge.js @@ -109,10 +109,6 @@ async function handleMergeComment({ github, body, node_id, reaction }) { ) } -// Caching the list of team members saves API requests when running the bot on the schedule and -// processing many PRs at once. -const members = {} - async function handleMerge({ github, context, @@ -122,31 +118,13 @@ async function handleMerge({ pull_request, events, maintainers, + getTeamMembers, }) { const pull_number = pull_request.number - function getTeamMembers(team_slug) { - if (context.eventName === 'pull_request') { - // We have no chance of getting a token in the pull_request context with the right - // permissions to access the members endpoint below. Thus, we're pretending to have - // no members. This is OK; because this is only for the Test workflow, not for - // real use. - return new Set() - } - - if (!members[team_slug]) { - members[team_slug] = github - .paginate(github.rest.teams.listMembersInOrg, { - org: context.repo.owner, - team_slug, - per_page: 100, - }) - .then((members) => new Set(members.map(({ id }) => id))) - } - - return members[team_slug] - } - const committers = await getTeamMembers('nixpkgs-committers') + const committers = new Set( + (await getTeamMembers('nixpkgs-committers')).map(({ id }) => id), + ) const files = await github.paginate(github.rest.pulls.listFiles, { ...context.repo,