From a198f2db54fe58f4528ffd22e8c454e9618161f1 Mon Sep 17 00:00:00 2001 From: zhong666 Date: Thu, 6 Apr 2023 00:48:14 +0800 Subject: [PATCH 1/5] feat: getLastGitTag with pattern --- src/commands/default.ts | 16 ++++------------ src/config.ts | 5 ++++- src/git.ts | 11 +++++++++-- src/template.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 src/template.ts diff --git a/src/commands/default.ts b/src/commands/default.ts index 0645e3e..f9e6c2c 100644 --- a/src/commands/default.ts +++ b/src/commands/default.ts @@ -11,6 +11,7 @@ import { generateMarkDown, BumpVersionOptions, } from ".."; +import { getCommitMessage, getTagBody, getTagMessage } from "../template"; import { githubRelease } from "./github"; export default async function defaultMain(args: Argv) { @@ -90,21 +91,12 @@ export default async function defaultMain(args: Argv) { (f) => f && typeof f === "string" ) as string[]; await execa("git", ["add", ...filesToAdd], { cwd }); - const msg = config.templates.commitMessage.replaceAll( - "{{newVersion}}", - config.newVersion - ); + const msg = getCommitMessage(config) await execa("git", ["commit", "-m", msg], { cwd }); } if (args.tag !== false) { - const msg = config.templates.tagMessage.replaceAll( - "{{newVersion}}", - config.newVersion - ); - const body = config.templates.tagBody.replaceAll( - "{{newVersion}}", - config.newVersion - ); + const msg = getTagMessage(config) + const body = getTagBody(config) await execa("git", ["tag", "-am", msg, body], { cwd }); } if (args.push === true) { diff --git a/src/config.ts b/src/config.ts index 210ad07..cb3f71b 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,6 +4,7 @@ import { getLastGitTag, getCurrentGitRef } from "./git"; import { resolveRepoConfig, RepoProvider } from "./repo"; import type { SemverBumpType } from "./semver"; import type { RepoConfig } from "./repo"; +import { getTagMessagePattern } from "./template"; export interface ChangelogConfig { cwd: string; @@ -74,7 +75,9 @@ export async function loadChangelogConfig( }); if (!config.from) { - config.from = await getLastGitTag(); + config.from = await getLastGitTag( + getTagMessagePattern(config), + ); } if (!config.to) { diff --git a/src/git.ts b/src/git.ts index 7d58114..b17fba9 100644 --- a/src/git.ts +++ b/src/git.ts @@ -26,8 +26,15 @@ export interface GitCommit extends RawGitCommit { isBreaking: boolean; } -export async function getLastGitTag() { - const r = await execCommand("git", ["describe", "--tags", "--abbrev=0"]) +export async function getLastGitTag( + pattern?: string +) { + const args = ["describe", "--tags", "--abbrev=0"]; + if (pattern) { + args.push("--match", pattern); + } + + const r = await execCommand("git", args) .then((r) => r.split("\n")) .catch(() => []); return r[r.length - 1]; diff --git a/src/template.ts b/src/template.ts new file mode 100644 index 0000000..4736659 --- /dev/null +++ b/src/template.ts @@ -0,0 +1,41 @@ +import { ChangelogConfig } from "./config"; + +function format(template: string, vars: Record) { + const result = template + for (const [key, value] of Object.entries(vars)) { + result.replaceAll(key, value) + } + return result +} + +export function getCommitMessage( + config: ChangelogConfig, +) { + return format(config.templates.commitMessage, { + "{{newVersion}}": config.newVersion, + }); +} + +export function getTagMessage( + config: ChangelogConfig, +) { + return format(config.templates.tagMessage, { + "{{newVersion}}": config.newVersion, + }); +} + +export function getTagBody( + config: ChangelogConfig, +) { + return format(config.templates.tagBody, { + "{{newVersion}}": config.newVersion, + }); +} + +export function getTagMessagePattern( + config: ChangelogConfig, +) { + return format(config.templates.tagBody, { + "{{newVersion}}": "*", + }); +} From bf3d296b7429e69b58f8871c2c587fff8c6b9e4a Mon Sep 17 00:00:00 2001 From: zhong666 Date: Thu, 6 Apr 2023 00:59:06 +0800 Subject: [PATCH 2/5] style: eslint format --- src/commands/default.ts | 6 +++--- src/config.ts | 4 +--- src/git.ts | 4 +--- src/template.ts | 22 +++++++--------------- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/commands/default.ts b/src/commands/default.ts index f9e6c2c..5720c8a 100644 --- a/src/commands/default.ts +++ b/src/commands/default.ts @@ -91,12 +91,12 @@ export default async function defaultMain(args: Argv) { (f) => f && typeof f === "string" ) as string[]; await execa("git", ["add", ...filesToAdd], { cwd }); - const msg = getCommitMessage(config) + const msg = getCommitMessage(config); await execa("git", ["commit", "-m", msg], { cwd }); } if (args.tag !== false) { - const msg = getTagMessage(config) - const body = getTagBody(config) + const msg = getTagMessage(config); + const body = getTagBody(config); await execa("git", ["tag", "-am", msg, body], { cwd }); } if (args.push === true) { diff --git a/src/config.ts b/src/config.ts index cb3f71b..66215cf 100644 --- a/src/config.ts +++ b/src/config.ts @@ -75,9 +75,7 @@ export async function loadChangelogConfig( }); if (!config.from) { - config.from = await getLastGitTag( - getTagMessagePattern(config), - ); + config.from = await getLastGitTag(getTagMessagePattern(config)); } if (!config.to) { diff --git a/src/git.ts b/src/git.ts index b17fba9..49f87ef 100644 --- a/src/git.ts +++ b/src/git.ts @@ -26,9 +26,7 @@ export interface GitCommit extends RawGitCommit { isBreaking: boolean; } -export async function getLastGitTag( - pattern?: string -) { +export async function getLastGitTag(pattern?: string) { const args = ["describe", "--tags", "--abbrev=0"]; if (pattern) { args.push("--match", pattern); diff --git a/src/template.ts b/src/template.ts index 4736659..d567d2c 100644 --- a/src/template.ts +++ b/src/template.ts @@ -1,40 +1,32 @@ import { ChangelogConfig } from "./config"; function format(template: string, vars: Record) { - const result = template + const result = template; for (const [key, value] of Object.entries(vars)) { - result.replaceAll(key, value) + result.replaceAll(key, value); } - return result + return result; } -export function getCommitMessage( - config: ChangelogConfig, -) { +export function getCommitMessage(config: ChangelogConfig) { return format(config.templates.commitMessage, { "{{newVersion}}": config.newVersion, }); } -export function getTagMessage( - config: ChangelogConfig, -) { +export function getTagMessage(config: ChangelogConfig) { return format(config.templates.tagMessage, { "{{newVersion}}": config.newVersion, }); } -export function getTagBody( - config: ChangelogConfig, -) { +export function getTagBody(config: ChangelogConfig) { return format(config.templates.tagBody, { "{{newVersion}}": config.newVersion, }); } -export function getTagMessagePattern( - config: ChangelogConfig, -) { +export function getTagMessagePattern(config: ChangelogConfig) { return format(config.templates.tagBody, { "{{newVersion}}": "*", }); From 0481699b815e86fec43edbf0e7d321683d0aff48 Mon Sep 17 00:00:00 2001 From: zhong666 Date: Tue, 11 Apr 2023 18:32:27 +0800 Subject: [PATCH 3/5] fix: template format not as expected --- src/template.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/template.ts b/src/template.ts index d567d2c..df52ad1 100644 --- a/src/template.ts +++ b/src/template.ts @@ -1,9 +1,9 @@ import { ChangelogConfig } from "./config"; function format(template: string, vars: Record) { - const result = template; + let result = template; for (const [key, value] of Object.entries(vars)) { - result.replaceAll(key, value); + result = result.replaceAll(key, value); } return result; } @@ -27,7 +27,7 @@ export function getTagBody(config: ChangelogConfig) { } export function getTagMessagePattern(config: ChangelogConfig) { - return format(config.templates.tagBody, { + return format(config.templates.tagMessage, { "{{newVersion}}": "*", }); } From f7f9db22626197e286d921f731e3fe868bae68a5 Mon Sep 17 00:00:00 2001 From: zhong666 Date: Tue, 11 Apr 2023 18:32:36 +0800 Subject: [PATCH 4/5] test: template --- test/template.test.ts | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 test/template.test.ts diff --git a/test/template.test.ts b/test/template.test.ts new file mode 100644 index 0000000..baaf9f7 --- /dev/null +++ b/test/template.test.ts @@ -0,0 +1,46 @@ +import { describe, test, expect } from "vitest"; +import { getCommitMessage, getTagMessage, getTagBody, getTagMessagePattern } from '../src/template'; +import { ChangelogConfig } from "../src"; + +describe('template', () => { + test('getCommitMessage should work', () => { + const result = getCommitMessage({ + templates: { + commitMessage: 'v{{newVersion}}' + }, + newVersion: '1.0.0' + } as ChangelogConfig) + + expect(result).toBe('v1.0.0') + }) + test('getTagMessage should work', () => { + const result = getTagMessage({ + templates: { + tagMessage: 'v{{newVersion}}' + }, + newVersion: '1.0.0' + } as ChangelogConfig) + + expect(result).toBe('v1.0.0') + }) + test('getTagBody should work', () => { + const result = getTagBody({ + templates: { + tagBody: 'Release new version: v{{newVersion}}' + }, + newVersion: '1.0.0' + } as ChangelogConfig) + + expect(result).toBe('Release new version: v1.0.0') + }) + test('getTagMessagePattern should work', () => { + const result = getTagMessagePattern({ + templates: { + tagMessage: 'v{{newVersion}}' + }, + newVersion: '1.0.0' + } as ChangelogConfig) + + expect(result).toBe('v*') + }) +}) From 7e800b51a495f64d623946630ff1ba40441d88e1 Mon Sep 17 00:00:00 2001 From: zhong666 Date: Tue, 11 Apr 2023 18:34:12 +0800 Subject: [PATCH 5/5] chore: lint --- test/template.test.ts | 59 +++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/test/template.test.ts b/test/template.test.ts index baaf9f7..d1b14c4 100644 --- a/test/template.test.ts +++ b/test/template.test.ts @@ -1,46 +1,51 @@ import { describe, test, expect } from "vitest"; -import { getCommitMessage, getTagMessage, getTagBody, getTagMessagePattern } from '../src/template'; +import { + getCommitMessage, + getTagMessage, + getTagBody, + getTagMessagePattern, +} from "../src/template"; import { ChangelogConfig } from "../src"; -describe('template', () => { - test('getCommitMessage should work', () => { +describe("template", () => { + test("getCommitMessage should work", () => { const result = getCommitMessage({ templates: { - commitMessage: 'v{{newVersion}}' + commitMessage: "v{{newVersion}}", }, - newVersion: '1.0.0' - } as ChangelogConfig) + newVersion: "1.0.0", + } as ChangelogConfig); - expect(result).toBe('v1.0.0') - }) - test('getTagMessage should work', () => { + expect(result).toBe("v1.0.0"); + }); + test("getTagMessage should work", () => { const result = getTagMessage({ templates: { - tagMessage: 'v{{newVersion}}' + tagMessage: "v{{newVersion}}", }, - newVersion: '1.0.0' - } as ChangelogConfig) + newVersion: "1.0.0", + } as ChangelogConfig); - expect(result).toBe('v1.0.0') - }) - test('getTagBody should work', () => { + expect(result).toBe("v1.0.0"); + }); + test("getTagBody should work", () => { const result = getTagBody({ templates: { - tagBody: 'Release new version: v{{newVersion}}' + tagBody: "Release new version: v{{newVersion}}", }, - newVersion: '1.0.0' - } as ChangelogConfig) + newVersion: "1.0.0", + } as ChangelogConfig); - expect(result).toBe('Release new version: v1.0.0') - }) - test('getTagMessagePattern should work', () => { + expect(result).toBe("Release new version: v1.0.0"); + }); + test("getTagMessagePattern should work", () => { const result = getTagMessagePattern({ templates: { - tagMessage: 'v{{newVersion}}' + tagMessage: "v{{newVersion}}", }, - newVersion: '1.0.0' - } as ChangelogConfig) + newVersion: "1.0.0", + } as ChangelogConfig); - expect(result).toBe('v*') - }) -}) + expect(result).toBe("v*"); + }); +});