feat: keep labels in a set and make them lowercase

This commit is contained in:
invakid404
2021-06-23 10:31:36 +03:00
parent dead522cc2
commit dead9527b4
4 changed files with 47 additions and 35 deletions
+40 -30
View File
@@ -2,6 +2,7 @@ import {Octokit, RestEndpointMethodTypes} from '@octokit/rest'
import moment from 'moment' import moment from 'moment'
import * as core from '@actions/core' import * as core from '@actions/core'
import {Unpacked} from './utils'
export interface PullRequestInfo { export interface PullRequestInfo {
number: number number: number
@@ -12,13 +13,18 @@ export interface PullRequestInfo {
mergeCommitSha: string mergeCommitSha: string
author: string author: string
repoName: string repoName: string
labels: string[] labels: Set<string>
milestone: string milestone: string
body: string body: string
assignees: string[] assignees: string[]
requestedReviewers: string[] requestedReviewers: string[]
} }
type PullData = RestEndpointMethodTypes['pulls']['get']['response']['data']
type PullsListData =
RestEndpointMethodTypes['pulls']['list']['response']['data']
export class PullRequests { export class PullRequests {
constructor(private octokit: Octokit) {} constructor(private octokit: Octokit) {}
@@ -43,10 +49,11 @@ export class PullRequests {
mergeCommitSha: pr.data.merge_commit_sha || '', mergeCommitSha: pr.data.merge_commit_sha || '',
author: pr.data.user?.login || '', author: pr.data.user?.login || '',
repoName: pr.data.base.repo.full_name, repoName: pr.data.base.repo.full_name,
labels: labels: new Set(
pr.data.labels?.map(function (label) { pr.data.labels?.map(function (label) {
return label.name || '' return label.name?.toLowerCase() || ''
}) || [], }) || []
),
milestone: pr.data.milestone?.title || '', milestone: pr.data.milestone?.title || '',
body: pr.data.body || '', body: pr.data.body || '',
assignees: assignees:
@@ -84,35 +91,10 @@ export class PullRequests {
}) })
for await (const response of this.octokit.paginate.iterator(options)) { for await (const response of this.octokit.paginate.iterator(options)) {
type PullsListData =
RestEndpointMethodTypes['pulls']['list']['response']['data']
const prs: PullsListData = response.data as PullsListData const prs: PullsListData = response.data as PullsListData
for (const pr of prs.filter(p => !!p.merged_at)) { for (const pr of prs.filter(p => !!p.merged_at)) {
mergedPRs.push({ mergedPRs.push(mapPullRequest(pr))
number: pr.number,
title: pr.title,
htmlURL: pr.html_url,
baseBranch: pr.base.ref,
mergedAt: moment(pr.merged_at),
mergeCommitSha: pr.merge_commit_sha || '',
author: pr.user?.login || '',
repoName: pr.base.repo.full_name,
labels:
pr.labels?.map(function (label) {
return label.name || ''
}) || [],
milestone: pr.milestone?.title || '',
body: pr.body || '',
assignees:
pr.assignees?.map(function (asignee) {
return asignee?.login || ''
}) || [],
requestedReviewers:
pr.requested_reviewers?.map(function (reviewer) {
return reviewer?.login || ''
}) || []
})
} }
const firstPR = prs[0] const firstPR = prs[0]
@@ -159,3 +141,31 @@ export function sortPullRequests(
} }
return pullRequests return pullRequests
} }
const mapPullRequest = (
pr: PullData | Unpacked<PullsListData>
): PullRequestInfo => ({
number: pr.number,
title: pr.title,
htmlURL: pr.html_url,
baseBranch: pr.base.ref,
mergedAt: moment(pr.merged_at),
mergeCommitSha: pr.merge_commit_sha || '',
author: pr.user?.login || '',
repoName: pr.base.repo.full_name,
labels: new Set(
pr.labels?.map(function (label) {
return label.name?.toLowerCase() || ''
}) || []
),
milestone: pr.milestone?.title || '',
body: pr.body || '',
assignees:
pr.assignees?.map(function (asignee) {
return asignee?.login || ''
}) || [],
requestedReviewers:
pr.requested_reviewers?.map(function (reviewer) {
return reviewer?.login || ''
}) || []
})
+1 -1
View File
@@ -176,7 +176,7 @@ export class ReleaseNotes {
mergeCommitSha: '', mergeCommitSha: '',
author: commit.author || '', author: commit.author || '',
repoName: '', repoName: '',
labels: [], labels: new Set(),
milestone: '', milestone: '',
body: commit.message || '', body: commit.message || '',
assignees: [], assignees: [],
+4 -4
View File
@@ -39,7 +39,7 @@ export function buildChangelog(
label = pr.body.replace(extractor.pattern, extractor.target) label = pr.body.replace(extractor.pattern, extractor.target)
} }
if (label !== '') { if (label !== '') {
pr.labels.push(label) pr.labels.add(label.toLowerCase())
} }
} }
} }
@@ -189,8 +189,8 @@ export function fillAdditionalPlaceholders(
return transformed return transformed
} }
function haveCommonElements(arr1: string[], arr2: string[]): Boolean { function haveCommonElements(arr1: string[], arr2: Set<string>): Boolean {
return arr1.some(item => arr2.includes(item)) return arr1.some(item => arr2.has(item))
} }
function fillTemplate(pr: PullRequestInfo, template: string): string { function fillTemplate(pr: PullRequestInfo, template: string): string {
@@ -205,7 +205,7 @@ function fillTemplate(pr: PullRequestInfo, template: string): string {
transformed = transformed.replace(/\${{AUTHOR}}/g, pr.author) transformed = transformed.replace(/\${{AUTHOR}}/g, pr.author)
transformed = transformed.replace( transformed = transformed.replace(
/\${{LABELS}}/g, /\${{LABELS}}/g,
pr.labels?.join(', ') || '' [...pr.labels]?.join(', ') || ''
) )
transformed = transformed.replace(/\${{MILESTONE}}/g, pr.milestone || '') transformed = transformed.replace(/\${{MILESTONE}}/g, pr.milestone || '')
transformed = transformed.replace(/\${{BODY}}/g, pr.body) transformed = transformed.replace(/\${{BODY}}/g, pr.body)
+2
View File
@@ -137,3 +137,5 @@ export function writeOutput(
} }
} }
} }
export type Unpacked<T> = T extends (infer U)[] ? U : T