feat: keep labels in a set and make them lowercase
This commit is contained in:
+40
-30
@@ -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
@@ -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
@@ -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)
|
||||||
|
|||||||
@@ -137,3 +137,5 @@ export function writeOutput(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type Unpacked<T> = T extends (infer U)[] ? U : T
|
||||||
|
|||||||
Reference in New Issue
Block a user