✨ feat(vscode): 发布摘提交认出 GitHub 合并提交和 squash 提交的 PR 号
This commit is contained in:
1 parent
7351b6247f
commit
5a1c0e20a2
3 files changed
+73
-22
No files matched your search
@@ -13,7 +13,7 @@ import {
|
||||
listUnreleasedCommits,
|
||||
normalizeReleasePrefix,
|
||||
parseAlembicRevision,
|
||||
parseGiteaMergeSubject,
|
||||
parseMergeSubject,
|
||||
pickCurrentRelease,
|
||||
todayReleaseBranch,
|
||||
} from '../../src/git/release'
|
||||
@@ -66,12 +66,20 @@ describe('纯函数', () => {
|
||||
expect(pickCurrentRelease('release/', ['main', 'release/2026-08-01', 'release/2026-08-31', 'hotfix/2027'])).toBe('release/2026-08-31')
|
||||
expect(pickCurrentRelease('release/', ['main'])).toBeUndefined()
|
||||
})
|
||||
it('parseGiteaMergeSubject 认 Gitea 合并说明', () => {
|
||||
expect(parseGiteaMergeSubject('Merge pull request \'连续包月会员订阅体系\' (#260) from feature/monthly-membership into main')).toEqual({
|
||||
it('parseMergeSubject 认 Gitea 合并说明', () => {
|
||||
expect(parseMergeSubject('Merge pull request \'连续包月会员订阅体系\' (#260) from feature/monthly-membership into main')).toEqual({
|
||||
number: 260,
|
||||
title: '连续包月会员订阅体系',
|
||||
})
|
||||
expect(parseGiteaMergeSubject('fix: no merge')).toBeUndefined()
|
||||
expect(parseMergeSubject('fix: no merge')).toBeUndefined()
|
||||
})
|
||||
it('parseMergeSubject 认 GitHub 合并说明,标题取说明正文第一行,没有正文就用来源分支', () => {
|
||||
expect(parseMergeSubject('Merge pull request #12 from cruldra/feature/x', '\n会员订阅\n\n细节')).toEqual({ number: 12, title: '会员订阅' })
|
||||
expect(parseMergeSubject('Merge pull request #12 from cruldra/feature/x')).toEqual({ number: 12, title: 'cruldra/feature/x' })
|
||||
})
|
||||
it('parseMergeSubject 认 squash 合并的「标题 (#N)」', () => {
|
||||
expect(parseMergeSubject('feat: 会员订阅 (#34)')).toEqual({ number: 34, title: 'feat: 会员订阅' })
|
||||
expect(parseMergeSubject('fix (#34) 不在结尾')).toBeUndefined()
|
||||
})
|
||||
it('parseAlembicRevision 认裸赋值、带类型标注、元组和 None', () => {
|
||||
expect(parseAlembicRevision('revision = \'a1\'\ndown_revision = \'a0\'\n')).toEqual({ revision: 'a1', downRevisions: ['a0'] })
|
||||
@@ -208,11 +216,32 @@ describe('集成', () => {
|
||||
cwd: fx.repo,
|
||||
current: 'release/2026-08-31',
|
||||
devBranch: 'main',
|
||||
shas: [a, b],
|
||||
commits: [{ sha: a, subject: 'fix(admin): 会员档位隐藏' }, { sha: b, subject: 'fix(membership): 年付月度发卡' }],
|
||||
})
|
||||
expect(map.get(a)).toEqual({ number: 260, title: '连续包月会员订阅体系' })
|
||||
expect(map.get(b)).toEqual({ number: 260, title: '连续包月会员订阅体系' })
|
||||
})
|
||||
it('indexUnreleasedByMergePr 认 GitHub 的合并提交和 squash 提交', async () => {
|
||||
fx = await setup()
|
||||
await cutRelease({ cwd: fx.repo, devBranch: 'main', prefix: 'release/', now: AUG31 })
|
||||
git(fx.peer, ['checkout', '-b', 'feature'])
|
||||
const a = commit(fx.peer, 'b.txt', 'b', 'fix: 档位')
|
||||
git(fx.peer, ['checkout', 'main'])
|
||||
git(fx.peer, ['merge', '--no-ff', '-m', 'Merge pull request #12 from cruldra/feature', '-m', '会员订阅', 'feature'])
|
||||
const squashed = commit(fx.peer, 'c.txt', 'c', 'feat: 发卡 (#13)')
|
||||
const lone = commit(fx.peer, 'd.txt', 'd', 'chore: lone')
|
||||
git(fx.peer, ['push', 'origin', 'main'])
|
||||
git(fx.repo, ['fetch', 'origin'])
|
||||
const map = await indexUnreleasedByMergePr({
|
||||
cwd: fx.repo,
|
||||
current: 'release/2026-08-31',
|
||||
devBranch: 'main',
|
||||
commits: [{ sha: lone, subject: 'chore: lone' }, { sha: squashed, subject: 'feat: 发卡 (#13)' }, { sha: a, subject: 'fix: 档位' }],
|
||||
})
|
||||
expect(map.get(a)).toEqual({ number: 12, title: '会员订阅' })
|
||||
expect(map.get(squashed)).toEqual({ number: 13, title: 'feat: 发卡' })
|
||||
expect(map.has(lone)).toBe(false)
|
||||
})
|
||||
it('发布分支把同一改动拆成两条,即使标题不同也不再列出', async () => {
|
||||
fx = await setup()
|
||||
await cutRelease({ cwd: fx.repo, devBranch: 'main', prefix: 'release/', now: AUG31 })
|
||||
|
||||
Reference in new issue
Block a user