From dead9527b45450e5b8a938605c3641f699631781 Mon Sep 17 00:00:00 2001 From: invakid404 Date: Wed, 23 Jun 2021 10:31:36 +0300 Subject: [PATCH] feat: keep labels in a set and make them lowercase --- src/pullRequests.ts | 70 ++++++++++++++++++++++++++------------------- src/releaseNotes.ts | 2 +- src/transform.ts | 8 +++--- src/utils.ts | 2 ++ 4 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src/pullRequests.ts b/src/pullRequests.ts index 5b8c731..d523c91 100755 --- a/src/pullRequests.ts +++ b/src/pullRequests.ts @@ -2,6 +2,7 @@ import {Octokit, RestEndpointMethodTypes} from '@octokit/rest' import moment from 'moment' import * as core from '@actions/core' +import {Unpacked} from './utils' export interface PullRequestInfo { number: number @@ -12,13 +13,18 @@ export interface PullRequestInfo { mergeCommitSha: string author: string repoName: string - labels: string[] + labels: Set milestone: string body: string assignees: string[] requestedReviewers: string[] } +type PullData = RestEndpointMethodTypes['pulls']['get']['response']['data'] + +type PullsListData = + RestEndpointMethodTypes['pulls']['list']['response']['data'] + export class PullRequests { constructor(private octokit: Octokit) {} @@ -43,10 +49,11 @@ export class PullRequests { mergeCommitSha: pr.data.merge_commit_sha || '', author: pr.data.user?.login || '', repoName: pr.data.base.repo.full_name, - labels: + labels: new Set( pr.data.labels?.map(function (label) { - return label.name || '' - }) || [], + return label.name?.toLowerCase() || '' + }) || [] + ), milestone: pr.data.milestone?.title || '', body: pr.data.body || '', assignees: @@ -84,35 +91,10 @@ export class PullRequests { }) for await (const response of this.octokit.paginate.iterator(options)) { - type PullsListData = - RestEndpointMethodTypes['pulls']['list']['response']['data'] const prs: PullsListData = response.data as PullsListData for (const pr of prs.filter(p => !!p.merged_at)) { - mergedPRs.push({ - 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 || '' - }) || [] - }) + mergedPRs.push(mapPullRequest(pr)) } const firstPR = prs[0] @@ -159,3 +141,31 @@ export function sortPullRequests( } return pullRequests } + +const mapPullRequest = ( + pr: PullData | Unpacked +): 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 || '' + }) || [] +}) diff --git a/src/releaseNotes.ts b/src/releaseNotes.ts index aca1cdc..5d2e480 100755 --- a/src/releaseNotes.ts +++ b/src/releaseNotes.ts @@ -176,7 +176,7 @@ export class ReleaseNotes { mergeCommitSha: '', author: commit.author || '', repoName: '', - labels: [], + labels: new Set(), milestone: '', body: commit.message || '', assignees: [], diff --git a/src/transform.ts b/src/transform.ts index 75c0150..336ad40 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -39,7 +39,7 @@ export function buildChangelog( label = pr.body.replace(extractor.pattern, extractor.target) } if (label !== '') { - pr.labels.push(label) + pr.labels.add(label.toLowerCase()) } } } @@ -189,8 +189,8 @@ export function fillAdditionalPlaceholders( return transformed } -function haveCommonElements(arr1: string[], arr2: string[]): Boolean { - return arr1.some(item => arr2.includes(item)) +function haveCommonElements(arr1: string[], arr2: Set): Boolean { + return arr1.some(item => arr2.has(item)) } 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( /\${{LABELS}}/g, - pr.labels?.join(', ') || '' + [...pr.labels]?.join(', ') || '' ) transformed = transformed.replace(/\${{MILESTONE}}/g, pr.milestone || '') transformed = transformed.replace(/\${{BODY}}/g, pr.body) diff --git a/src/utils.ts b/src/utils.ts index 4096554..745b524 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -137,3 +137,5 @@ export function writeOutput( } } } + +export type Unpacked = T extends (infer U)[] ? U : T