@@ -24,69 +24,42 @@ jobs:
2424 id-token : write
2525
2626 steps :
27- - name : Generate GitHub App token (with org members:read)
28- id : app-token
29- uses : actions/create-github-app-token@v2
30- with :
31- app-id : ${{ secrets.APP_ID }}
32- private-key : ${{ secrets.PRIVATE_KEY }}
27+ # If your GitHub App is configured with org Members:read, you can
28+ # generate an app token instead. For now, rely on a PAT with read:org.
29+ # - name: Generate GitHub App token (with org members:read)
30+ # id: app-token
31+ # uses: actions/create-github-app-token@v2
32+ # with:
33+ # app-id: ${{ secrets.APP_ID }}
34+ # private-key: ${{ secrets.PRIVATE_KEY }}
35+ # owner: supabase
3336
3437 - name : Check if actor is member of admin or client-libs team
3538 id : team-check
3639 uses : actions/github-script@v7
3740 with :
38- github-token : ${{ steps.app-token.outputs.token }}
41+ github-token : ${{ secrets.RELEASE_GITHUB_TOKEN }}
3942 script : |
4043 const org = 'supabase'
4144 const { actor } = context
4245
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
46+ async function isTeamMember(team_slug) {
7347 try {
7448 const res = await github.rest.teams.getMembershipForUserInOrg({
7549 org,
76- team_slug: resolved ,
50+ team_slug,
7751 username: actor,
7852 })
7953 return res?.status === 200
8054 } catch (err) {
81- console.log(`Membership check failed for slug ${resolved}`, err)
55+ // 404 means not a member or team not visible to token
8256 return false
8357 }
8458 }
8559
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)
60+ const isAdmin = await isTeamMember('admin')
61+ const isClientLibs = await isTeamMember('client-libs')
62+ const isMember = Boolean(isAdmin || isClientLibs)
9063 core.setOutput('is_team_member', isMember ? 'true' : 'false')
9164
9265 - name : Fail if not authorized
0 commit comments