diff --git a/dist/index.js b/dist/index.js index 11bbe369b..876b35c0a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -75,7 +75,8 @@ function run() { labelsToRemove.push(label); } } - if (labels.length > 0) { + const hasWriteAccess = yield checkWriteAccess(client, github.context.repo.owner, github.context.repo.repo, github.context.actor); + if (labels.length > 0 && hasWriteAccess) { yield addLabels(client, prNumber, labels); } if (syncLabels && labelsToRemove.length) { @@ -220,6 +221,31 @@ function checkMatch(changedFiles, matchConfig) { } return true; } +function checkWriteAccess(client, owner, repo, username) { + return __awaiter(this, void 0, void 0, function* () { + const level = (yield client.rest.repos.getCollaboratorPermissionLevel({ + owner, + repo, + username + })).data.permission; + if (level === "admin" || level === "write") { + return true; + } + try { + const res = (yield client.rest.orgs.checkMembershipForUser({ + org: owner, + username + })); + if (res.status == 204) { + return true; + } + } + catch (_a) { + return false; + } + return false; + }); +} function addLabels(client, prNumber, labels) { return __awaiter(this, void 0, void 0, function* () { yield client.rest.issues.addLabels({ diff --git a/src/labeler.ts b/src/labeler.ts index e81fdae84..6fbf7e86a 100644 --- a/src/labeler.ts +++ b/src/labeler.ts @@ -49,7 +49,7 @@ export async function run() { } } - const hasWriteAccess = await checkWritePermission( + const hasWriteAccess = await checkWriteAccess( client, github.context.repo.owner, github.context.repo.repo, @@ -235,7 +235,7 @@ function checkMatch(changedFiles: string[], matchConfig: MatchConfig): boolean { return true } -async function checkWritePermission( +async function checkWriteAccess( client: ClientType, owner: string, repo: string, @@ -246,8 +246,24 @@ async function checkWritePermission( repo, username })).data.permission + + if (level === "admin" || level === "write") { + return true; + } - return level === "write" || level === "admin" + try { + const res = (await client.rest.orgs.checkMembershipForUser({ + org: owner, + username + })) + + if (res.status as number == 204) { + return true + } + } catch { + return false + } + return false } async function addLabels(