renovate/lib/modules/platform/github/common.ts

60 lines
1.3 KiB
TypeScript

import is from '@sindresorhus/is';
import { GithubHttp } from '../../../util/http/github';
import { getPrBodyStruct } from '../pr-body';
import type { GhPr, GhRestPr } from './types';
export const githubApi = new GithubHttp();
/**
* @see https://docs.github.com/en/rest/reference/pulls#list-pull-requests
*/
export function coerceRestPr(pr: GhRestPr): GhPr {
const bodyStruct = pr.bodyStruct ?? getPrBodyStruct(pr.body);
const result: GhPr = {
number: pr.number,
sourceBranch: pr.head?.ref,
title: pr.title,
state:
pr.state === 'closed' && is.string(pr.merged_at) ? 'merged' : pr.state,
bodyStruct,
updated_at: pr.updated_at,
node_id: pr.node_id,
};
if (pr.head?.sha) {
result.sha = pr.head.sha;
}
if (pr.head?.repo?.full_name) {
result.sourceRepo = pr.head.repo.full_name;
}
if (pr.labels) {
result.labels = pr.labels.map(({ name }) => name);
}
if (!!pr.assignee || is.nonEmptyArray(pr.assignees)) {
result.hasAssignees = true;
}
if (pr.requested_reviewers) {
result.reviewers = pr.requested_reviewers
.map(({ login }) => login)
.filter(is.nonEmptyString);
}
if (pr.created_at) {
result.createdAt = pr.created_at;
}
if (pr.closed_at) {
result.closedAt = pr.closed_at;
}
if (pr.base?.ref) {
result.targetBranch = pr.base.ref;
}
return result;
}