diff --git a/src/commits.ts b/src/commits.ts index 274f681..45f7341 100755 --- a/src/commits.ts +++ b/src/commits.ts @@ -8,7 +8,6 @@ export interface CommitInfo { message: string author: string date: moment.Moment - prNumber: number | undefined } export class Commits { diff --git a/src/pullRequests.ts b/src/pullRequests.ts index 6310228..f7e7ff5 100755 --- a/src/pullRequests.ts +++ b/src/pullRequests.ts @@ -9,6 +9,7 @@ export interface PullRequestInfo { title: string htmlURL: string mergedAt: moment.Moment + mergeCommitSha: string author: string repoName: string labels: string[] @@ -38,6 +39,7 @@ export class PullRequests { title: pr.data.title, htmlURL: pr.data.html_url, mergedAt: moment(pr.data.merged_at), + mergeCommitSha: pr.data.merge_commit_sha, author: pr.data.user.login, repoName: pr.data.base.repo.full_name, labels: pr.data.labels.map(function (label) { @@ -88,6 +90,7 @@ export class PullRequests { title: pr.title, htmlURL: pr.html_url, 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) { @@ -121,11 +124,13 @@ export class PullRequests { return sortPullRequests(mergedPRs, true) } + /** + * Filters out all commits which match the exclude pattern + */ filterCommits( commits: CommitInfo[], excludeMergeBranches: string[] ): CommitInfo[] { - const prRegex = /Merge pull request #(\d+)/ const filteredCommits = [] for (const commit of commits) { @@ -141,12 +146,6 @@ export class PullRequests { continue } } - - const match = commit.summary.match(prRegex) - if (!match) { - continue - } - commit.prNumber = Number.parseInt(match[1], 10) filteredCommits.push(commit) } diff --git a/src/releaseNotes.ts b/src/releaseNotes.ts index 3f8e3d7..b00113d 100755 --- a/src/releaseNotes.ts +++ b/src/releaseNotes.ts @@ -107,42 +107,17 @@ export class ReleaseNotes { ) core.info( - `ℹ️ Retrieved ${prCommits.length} PR merge commits for ${owner}/${repo}` + `ℹ️ Retrieved ${prCommits.length} release commits for ${owner}/${repo}` ) - const filteredPullRequests = [] - const pullRequestsByNumber: {[key: number]: PullRequestInfo} = {} + // create array of commits for this release + const releaseCommitHashes = prCommits.map(commmit => { + return commmit.sha + }) - for (const pr of pullRequests) { - pullRequestsByNumber[pr.number] = pr - } - - for (const commit of prCommits) { - if (!commit.prNumber) { - continue - } - - const prRef = `${owner}/${repo}#${commit.prNumber}` - - if (pullRequestsByNumber[commit.prNumber]) { - filteredPullRequests.push(pullRequestsByNumber[commit.prNumber]) - } else if (fromDate.toISOString() === toDate.toISOString()) { - const pullRequest = await pullRequestsApi.getSingle( - owner, - repo, - commit.prNumber - ) - - if (pullRequest) { - filteredPullRequests.push(pullRequest) - } else { - core.warning(`⚠️ ${prRef} not found! Commit text: ${commit.summary}`) - } - } else { - core.info(`ℹ️ ${prRef} not in date range, excluding from changelog`) - } - } - - return filteredPullRequests + // return only the pull requests associated with this release + return pullRequests.filter(pr => { + return releaseCommitHashes.includes(pr.mergeCommitSha) + }) } }