From 958d0baf3fa42935a1256b913cf481b4a1925428 Mon Sep 17 00:00:00 2001 From: Soybean Date: Sat, 20 Jul 2024 03:16:02 +0800 Subject: [PATCH] feat(packages): @sa/scripts: add ignore pattern list for command `gitCommitVerify`. close #504 --- packages/scripts/src/commands/git-commit.ts | 4 +++- packages/scripts/src/config/index.ts | 12 +++++++++++- packages/scripts/src/index.ts | 4 ++-- packages/scripts/src/types/index.ts | 2 ++ 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/scripts/src/commands/git-commit.ts b/packages/scripts/src/commands/git-commit.ts index 95735b259..35c0df561 100644 --- a/packages/scripts/src/commands/git-commit.ts +++ b/packages/scripts/src/commands/git-commit.ts @@ -65,13 +65,15 @@ export async function gitCommit(lang: Lang = 'en-us') { } /** Git commit message verify */ -export async function gitCommitVerify(lang: Lang = 'en-us') { +export async function gitCommitVerify(lang: Lang = 'en-us', ignores: RegExp[] = []) { const gitPath = await execCommand('git', ['rev-parse', '--show-toplevel']); const gitMsgPath = path.join(gitPath, '.git', 'COMMIT_EDITMSG'); const commitMsg = readFileSync(gitMsgPath, 'utf8').trim(); + if (ignores.some(regExp => regExp.test(commitMsg))) return; + const REG_EXP = /(?[a-z]+)(?:\((?.+)\))?(?!)?: (?.+)/i; if (!REG_EXP.test(commitMsg)) { diff --git a/packages/scripts/src/config/index.ts b/packages/scripts/src/config/index.ts index 511cba777..0fd9fbe75 100644 --- a/packages/scripts/src/config/index.ts +++ b/packages/scripts/src/config/index.ts @@ -13,7 +13,17 @@ const defaultOptions: CliOption = { '!node_modules/**' ], ncuCommandArgs: ['--deep', '-u'], - changelogOptions: {} + changelogOptions: {}, + gitCommitVerifyIgnores: [ + /^((Merge pull request)|(Merge (.*?) into (.*?)|(Merge branch (.*?)))(?:\r?\n)*$)/m, + /^(Merge tag (.*?))(?:\r?\n)*$/m, + /^(R|r)evert (.*)/, + /^(amend|fixup|squash)!/, + /^(Merged (.*?)(in|into) (.*)|Merged PR (.*): (.*))/, + /^Merge remote-tracking branch(\s*)(.*)/, + /^Automatic merge(.*)/, + /^Auto-merged (.*?) into (.*)/ + ] }; export async function loadCliOptions(overrides?: Partial, cwd = process.cwd()) { diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts index 1d5b1a13c..34367d798 100755 --- a/packages/scripts/src/index.ts +++ b/packages/scripts/src/index.ts @@ -75,8 +75,8 @@ export async function setupCli() { }, 'git-commit-verify': { desc: 'verify git commit message, make sure it match Conventional Commits standard', - action: async () => { - await gitCommitVerify(); + action: async args => { + await gitCommitVerify(args?.lang, cliOptions.gitCommitVerifyIgnores); } }, changelog: { diff --git a/packages/scripts/src/types/index.ts b/packages/scripts/src/types/index.ts index cbe7fbcdf..32bc09174 100644 --- a/packages/scripts/src/types/index.ts +++ b/packages/scripts/src/types/index.ts @@ -26,4 +26,6 @@ export interface CliOption { * @link https://github.com/soybeanjs/changelog */ changelogOptions: Partial; + /** The ignore pattern list of git commit verify */ + gitCommitVerifyIgnores: RegExp[]; }