blob: 667255b169247e6c28ae1722ba5af5df7f8f4105 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const { Octokit } = require("@octokit/rest");
const { REPO_OWNER, REPO } = require("./constants");
export interface Label {
name: string;
}
export function getGitHubClient() {
let auth = process.env["GITHUB_TOKEN"];
if (!auth) {
throw new Error(
"No github token provided - process.env['GITHUB_TOKEN'] must be set."
);
}
return new Octokit({ auth });
}
export async function addPrComment(pullNumber: number, body: string) {
await getGitHubClient().rest.issues.createComment({
owner: REPO_OWNER,
repo: REPO,
issue_number: pullNumber,
body,
});
}
export async function nextActionReviewers(
pullNumber: number,
existingLabels: Label[]
) {
let newLabels = removeNextActionLabel(existingLabels);
newLabels.push("Next Action: Reviewers");
await getGitHubClient().rest.issues.setLabels({
owner: REPO_OWNER,
repo: REPO,
issue_number: pullNumber,
labels: newLabels,
});
}
export async function nextActionAuthor(
pullNumber: number,
existingLabels: Label[]
) {
let newLabels = removeNextActionLabel(existingLabels);
newLabels.push("Next Action: Author");
await getGitHubClient().rest.issues.setLabels({
owner: REPO_OWNER,
repo: REPO,
issue_number: pullNumber,
labels: newLabels,
});
}
export async function checkIfCommitter(username: string): Promise<boolean> {
const permissionLevel = (
await getGitHubClient().rest.repos.getCollaboratorPermissionLevel({
owner: REPO_OWNER,
repo: REPO,
username,
})
).data;
return (
permissionLevel.permission === "write" ||
permissionLevel.permission === "admin"
);
}
export function getPullAuthorFromPayload(payload: any) {
return payload.issue?.user?.login || payload.pull_request?.user?.login;
}
export function getPullNumberFromPayload(payload: any) {
return payload.issue?.number || payload.pull_request?.number;
}
function removeNextActionLabel(existingLabels: Label[]): string[] {
return existingLabels
.filter(
(label) =>
label.name != "Next Action: Reviewers" &&
label.name != "Next Action: Author"
)
.map((label) => label.name);
}