From 697fc83e5fc8964c2b08c468aad6e876eb94c5a3 Mon Sep 17 00:00:00 2001 From: Romain Cascino Date: Fri, 27 Feb 2026 10:44:05 +0000 Subject: [PATCH] Extract scan.ts in own module --- src/index.ts | 100 +-------------------------------------------------- src/scan.ts | 96 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 99 deletions(-) create mode 100644 src/scan.ts diff --git a/src/index.ts b/src/index.ts index cb7c71e..89f8e2f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ import { LinearClient, LinearClientOptions } from "@linear/sdk"; import { commitExists, getCommitContextsBetweenShas, getCurrentGitInfo, getRepoInfo } from "./git"; -import { extractLinearIssueIdentifiersForCommit, extractPullRequestNumbersForCommit } from "./extractors"; +import { scanCommits } from "./scan"; import { Release, AccessKeyLatestReleaseResponse, @@ -8,11 +8,8 @@ import { AccessKeySyncReleaseResponse, AccessKeyCompleteReleaseResponse, AccessKeyUpdateByPipelineResponse, - CommitContext, DebugSink, IssueReference, - IssueSource, - PullRequestSource, RepoInfo, } from "./types"; import { getCLIWarnings, parseCLIArgs } from "./args"; @@ -122,101 +119,6 @@ async function apiRequest(query: string, variables?: Record) return withRetry(() => linearClient.client.rawRequest(query, variables)) as Promise; } -function scanCommits( - commits: CommitContext[], - includePaths: string[] | null, -): { - issueReferences: IssueReference[]; - prNumbers: number[]; - debugSink: DebugSink; -} { - const seen = new Map(); - const prNumbersSet = new Set(); - const debugSink: DebugSink = { - inspectedShas: [], - issues: {}, - pullRequests: [], - includePaths, - }; - - for (const commit of commits) { - debugSink.inspectedShas.push(commit.sha); - - const fromBranch = extractLinearIssueIdentifiersForCommit({ - sha: commit.sha, - branchName: commit.branchName, - message: null, - }); - - for (const key of fromBranch) { - if (!debugSink.issues[key]) { - debugSink.issues[key] = []; - } - - const source: IssueSource = { - sha: commit.sha, - source: "branch_name", - value: commit.branchName ?? "", - }; - debugSink.issues[key].push(source); - - if (seen.has(key)) { - continue; - } - - seen.set(key, { identifier: key, commitSha: commit.sha }); - log(`Detected issue key ${key} from branch name "${commit.branchName ?? ""}"`); - } - - const fromMessage = extractLinearIssueIdentifiersForCommit({ - sha: commit.sha, - branchName: null, - message: commit.message, - }); - - for (const key of fromMessage) { - if (!debugSink.issues[key]) { - debugSink.issues[key] = []; - } - - const source: IssueSource = { - sha: commit.sha, - source: "commit_message", - value: commit.message ?? "", - }; - debugSink.issues[key].push(source); - - if (seen.has(key)) { - continue; - } - - seen.set(key, { identifier: key, commitSha: commit.sha }); - log(`Detected issue key ${key} from commit message "${commit.message ?? ""}"`); - } - - // Extract PR numbers from commit message - const prNumbers = extractPullRequestNumbersForCommit(commit); - for (const prNumber of prNumbers) { - if (!prNumbersSet.has(prNumber)) { - prNumbersSet.add(prNumber); - const prSource: PullRequestSource = { - sha: commit.sha, - number: prNumber, - value: commit.message ?? "", - }; - debugSink.pullRequests.push(prSource); - log(`Found pull request number ${prNumber} in commit ${commit.sha}`); - } - } - } - - return { - issueReferences: Array.from(seen.values()), - prNumbers: Array.from(prNumbersSet), - debugSink, - }; -} - async function syncCommand(): Promise<{ release: { id: string; name: string; version?: string; url?: string }; } | null> { diff --git a/src/scan.ts b/src/scan.ts new file mode 100644 index 0000000..91f7307 --- /dev/null +++ b/src/scan.ts @@ -0,0 +1,96 @@ +import { extractLinearIssueIdentifiersForCommit, extractPullRequestNumbersForCommit } from "./extractors"; +import { log } from "./log"; +import { CommitContext, DebugSink, IssueReference, IssueSource, PullRequestSource } from "./types"; + +export function scanCommits( + commits: CommitContext[], + includePaths: string[] | null, +): { + issueReferences: IssueReference[]; + prNumbers: number[]; + debugSink: DebugSink; +} { + const seen = new Map(); + const prNumbersSet = new Set(); + const debugSink: DebugSink = { + inspectedShas: [], + issues: {}, + pullRequests: [], + includePaths, + }; + + for (const commit of commits) { + debugSink.inspectedShas.push(commit.sha); + + const fromBranch = extractLinearIssueIdentifiersForCommit({ + sha: commit.sha, + branchName: commit.branchName, + message: null, + }); + + for (const key of fromBranch) { + if (!debugSink.issues[key]) { + debugSink.issues[key] = []; + } + + const source: IssueSource = { + sha: commit.sha, + source: "branch_name", + value: commit.branchName ?? "", + }; + debugSink.issues[key].push(source); + + if (seen.has(key)) { + continue; + } + + seen.set(key, { identifier: key, commitSha: commit.sha }); + log(`Detected issue key ${key} from branch name "${commit.branchName ?? ""}"`); + } + + const fromMessage = extractLinearIssueIdentifiersForCommit({ + sha: commit.sha, + branchName: null, + message: commit.message, + }); + + for (const key of fromMessage) { + if (!debugSink.issues[key]) { + debugSink.issues[key] = []; + } + + const source: IssueSource = { + sha: commit.sha, + source: "commit_message", + value: commit.message ?? "", + }; + debugSink.issues[key].push(source); + + if (seen.has(key)) { + continue; + } + + seen.set(key, { identifier: key, commitSha: commit.sha }); + log(`Detected issue key ${key} from commit message "${commit.message ?? ""}"`); + } + + for (const prNumber of extractPullRequestNumbersForCommit(commit)) { + if (!prNumbersSet.has(prNumber)) { + prNumbersSet.add(prNumber); + const prSource: PullRequestSource = { + sha: commit.sha, + number: prNumber, + value: commit.message ?? "", + }; + debugSink.pullRequests.push(prSource); + log(`Found pull request number ${prNumber} in commit ${commit.sha}`); + } + } + } + + return { + issueReferences: Array.from(seen.values()), + prNumbers: Array.from(prNumbersSet), + debugSink, + }; +}