]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
.github/workflows/releng-audit: refactor auth check to function
authorPatrick Donnelly <pdonnell@ibm.com>
Fri, 15 May 2026 15:17:01 +0000 (11:17 -0400)
committerPatrick Donnelly <pdonnell@ibm.com>
Sat, 16 May 2026 15:58:15 +0000 (11:58 -0400)
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
Assisted-by: Gemini
.github/workflows/releng-audit.yaml

index 08741378c15fc25c7ac64aa88e2e6412d8b25a54..8612128ef059413e186f26b555e43acf6dd7f088 100644 (file)
@@ -31,6 +31,31 @@ jobs:
             const actor = context.actor;
             const isBot = actor === 'github-actions[bot]' || actor === 'github-actions';
             
+            async function checkAuthorization(username) {
+              let authorized = false;
+              try {
+                const { data: permData } = await github.rest.repos.getCollaboratorPermissionLevel({
+                  owner: context.repo.owner, repo: context.repo.repo, username: username
+                });
+                authorized = (permData.permission === 'admin' || permData.permission === 'maintain')
+              } catch (e) { 
+                core.info(`[Router] Failed to fetch repo permissions: ${e.message}`); 
+              }
+
+              if (!authorized && context.repo.owner === 'ceph' && process.env.ORG_TOKEN) {
+                try {
+                  const orgOctokit = github.getOctokit(process.env.ORG_TOKEN);
+                  const { data: teamData } = await orgOctokit.rest.teams.getMembershipForUserInOrg({
+                    org: 'ceph', team_slug: 'ceph-release-manager', username: username
+                  });
+                  authorized = (teamData.state === 'active');
+                } catch (e) { 
+                  core.info(`[Router] Failed to fetch org team membership: ${e.message}`); 
+                }
+              }
+              return authorized;
+            }
+
             core.info(`[Router] Evaluating event: ${eventName}, action: ${payload.action || 'N/A'}`);
 
             // ==========================================
@@ -54,27 +79,7 @@ jobs:
               
               if (commentBody.startsWith('/audit override')) {
                 core.info(`[Router] Validating if user @${actor} is authorized to apply override.`);
-                let isAuthorized = false;
-                try {
-                  const { data: permData } = await github.rest.repos.getCollaboratorPermissionLevel({
-                    owner: context.repo.owner, repo: context.repo.repo, username: actor
-                  });
-                  if (permData.permission === 'admin' || permData.permission === 'maintain') isAuthorized = true;
-                } catch (e) { 
-                  core.info(`[Router] Failed to fetch repo permissions: ${e.message}`); 
-                }
-
-                if (!isAuthorized && context.repo.owner === 'ceph' && process.env.ORG_TOKEN) {
-                  try {
-                    const orgOctokit = github.getOctokit(process.env.ORG_TOKEN);
-                    const { data: teamData } = await orgOctokit.rest.teams.getMembershipForUserInOrg({
-                      org: 'ceph', team_slug: 'ceph-release-manager', username: actor
-                    });
-                    isAuthorized = (teamData.state === 'active');
-                  } catch (e) { 
-                    core.info(`[Router] Failed to fetch org team membership: ${e.message}`); 
-                  }
-                }
+                const isAuthorized = await checkAuthorization(actor);
                 
                 if (isAuthorized) {
                   core.info(`[Router] User @${actor} is authorized. Applying override and stripping fail label.`);
@@ -198,23 +203,7 @@ jobs:
               if (labelName === 'releng-audit-override') {
                 if (!isBot) {
                   core.info(`[Router] Validating if user @${actor} is authorized to apply override.`);
-                  let isAuthorized = false;
-                  try {
-                    const { data: permData } = await github.rest.repos.getCollaboratorPermissionLevel({ owner: context.repo.owner, repo: context.repo.repo, username: actor });
-                    if (permData.permission === 'admin' || permData.permission === 'maintain') isAuthorized = true;
-                  } catch (e) {
-                    core.info(`[Router] Failed to fetch repo permissions: ${e.message}`);
-                  }
-
-                  if (!isAuthorized && context.repo.owner === 'ceph' && process.env.ORG_TOKEN) {
-                    try {
-                      const orgOctokit = github.getOctokit(process.env.ORG_TOKEN);
-                      const { data: teamData } = await orgOctokit.rest.teams.getMembershipForUserInOrg({ org: 'ceph', team_slug: 'ceph-release-manager', username: actor });
-                      isAuthorized = (teamData.state === 'active');
-                    } catch (e) {
-                      core.info(`[Router] Failed to fetch org team membership: ${e.message}`);
-                    }
-                  }
+                  const isAuthorized = await checkAuthorization(actor);
 
                   if (!isAuthorized) {
                     core.info(`[Router] User @${actor} NOT authorized. Removing override label.`);