Unverified Commit 58a1fe47 authored by Wolfgang Walther's avatar Wolfgang Walther
Browse files

ci/github-script/bot: move getTeamMembers cache into main file

This allows re-using this elsewhere with a shared cache.
parent 2d660290
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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
+4 −26
Original line number Diff line number Diff line
@@ -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,