@@ -40,27 +40,53 @@ jobs:
4040 const org = 'supabase'
4141 const { actor } = context
4242
43- async function isTeamMember(team_slug) {
44- console.log('isTeamMember', team_slug)
45- console.log('actor', actor)
46- console.log('Context', JSON.stringify(context, null, 2))
43+ async function isOrgAdmin() {
44+ try {
45+ const res = await github.rest.orgs.getMembershipForUser({ org, username: actor })
46+ return res?.status === 200 && res.data?.role === 'admin' && res.data?.state === 'active'
47+ } catch (e) {
48+ console.log('Org membership check failed', e)
49+ return false
50+ }
51+ }
52+
53+ async function resolveTeamSlug(preferredSlugs) {
54+ try {
55+ const teams = await github.paginate(github.rest.teams.list, { org })
56+ const lower = (s) => (s || '').toLowerCase()
57+ const candidates = preferredSlugs.map(lower)
58+ const team = teams.find((t) => {
59+ const slug = lower(t.slug)
60+ const name = lower(t.name)
61+ return candidates.includes(slug) || candidates.includes(name)
62+ })
63+ return team?.slug
64+ } catch (e) {
65+ console.log('Failed to list teams', e)
66+ return undefined
67+ }
68+ }
69+
70+ async function isTeamMemberByResolvedSlug(preferredSlugs) {
71+ const resolved = await resolveTeamSlug(preferredSlugs)
72+ if (!resolved) return false
4773 try {
4874 const res = await github.rest.teams.getMembershipForUserInOrg({
4975 org,
50- team_slug,
76+ team_slug: resolved ,
5177 username: actor,
5278 })
53- console.log('Here is res', JSON.stringify(res, null, 2))
54- return res && res.status === 200
55- } catch (_) {
56- console.log('Here is error', JSON.stringify(_, null, 2))
79+ return res?.status === 200
80+ } catch (err) {
81+ console.log(`Membership check failed for slug ${resolved}`, err)
5782 return false
5883 }
5984 }
6085
61- const isAdmin = await isTeamMember('admin')
62-
63- const isMember = isAdmin
86+ const isAdminOrg = await isOrgAdmin()
87+ const isAdminTeam = await isTeamMemberByResolvedSlug(['admin','admins','owners'])
88+ const isClientLibs = await isTeamMemberByResolvedSlug(['client-libs','clientlibs','client-libraries'])
89+ const isMember = Boolean(isAdminOrg || isAdminTeam || isClientLibs)
6490 core.setOutput('is_team_member', isMember ? 'true' : 'false')
6591
6692 - name : Fail if not authorized
0 commit comments