db620d33df
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
/**
|
|
* Resolve the issue author and check their team membership.
|
|
*
|
|
* @param {object} opts
|
|
* @param {object} opts.github - Octokit REST client from actions/github-script
|
|
* @param {object} opts.context - GitHub Actions context
|
|
* @param {object} opts.core - GitHub Actions core toolkit
|
|
* @param {string} opts.teamSlug - Team slug to check membership against
|
|
* @param {string|number} opts.issueNumber - Issue number to resolve author for
|
|
* @returns {Promise<{author: string|null, isTeamMember: boolean}>}
|
|
*/
|
|
async function checkTeamMembership({ github, context, core, teamSlug, issueNumber }) {
|
|
let author = context.payload.issue?.user?.login;
|
|
if (!author) {
|
|
const { data: issue } = await github.rest.issues.get({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
issue_number: Number(issueNumber),
|
|
});
|
|
author = issue.user?.login;
|
|
}
|
|
|
|
if (!author) {
|
|
core.setFailed('Could not determine issue author (user may be deleted).');
|
|
return { author: null, isTeamMember: false };
|
|
}
|
|
|
|
try {
|
|
await github.rest.teams.getByName({
|
|
org: context.repo.owner,
|
|
team_slug: teamSlug,
|
|
});
|
|
} catch (error) {
|
|
core.setFailed(`Team lookup failed for ${teamSlug}: ${error.message}`);
|
|
throw error;
|
|
}
|
|
|
|
let isTeamMember = false;
|
|
try {
|
|
const teamMembership = await github.rest.teams.getMembershipForUserInOrg({
|
|
org: context.repo.owner,
|
|
team_slug: teamSlug,
|
|
username: author,
|
|
});
|
|
isTeamMember = teamMembership.data.state === 'active';
|
|
} catch (error) {
|
|
if (error.status === 404) {
|
|
core.info(`Author ${author} is not a member of team ${teamSlug}.`);
|
|
isTeamMember = false;
|
|
} else {
|
|
core.setFailed(`Team membership lookup failed for ${author}: ${error.message}`);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
return { author, isTeamMember };
|
|
}
|
|
|
|
module.exports = checkTeamMembership;
|