mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import { join, dirname } from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import { ROOT } from '../common/constant.js';
|
|
import { createSpinner, slimPath } from '../common/logger.js';
|
|
import { createWriteStream, readFileSync } from 'fs';
|
|
import conventionalChangelog from 'conventional-changelog';
|
|
|
|
const DIST_FILE = join(ROOT, './changelog.generated.md');
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const MAIN_TEMPLATE = join(__dirname, '../../template/changelog-main.hbs');
|
|
const HEADER_TEMPLATE = join(__dirname, '../../template/changelog-header.hbs');
|
|
const COMMIT_TEMPLATE = join(__dirname, '../../template/changelog-commit.hbs');
|
|
|
|
const mainTemplate = readFileSync(MAIN_TEMPLATE, 'utf-8');
|
|
const headerPartial = readFileSync(HEADER_TEMPLATE, 'utf-8');
|
|
const commitPartial = readFileSync(COMMIT_TEMPLATE, 'utf-8');
|
|
|
|
function formatType(type: string) {
|
|
const MAP: Record<string, string> = {
|
|
fix: 'Bug Fixes',
|
|
feat: 'Feature',
|
|
docs: 'Document',
|
|
types: 'Types',
|
|
};
|
|
|
|
return MAP[type] || type;
|
|
}
|
|
|
|
function transform(item: any) {
|
|
if (item.type === 'chore' || item.type === 'test') {
|
|
return null;
|
|
}
|
|
|
|
item.type = formatType(item.type);
|
|
|
|
if (item.hash) {
|
|
item.shortHash = item.hash.slice(0, 6);
|
|
}
|
|
|
|
if (item.references.length) {
|
|
item.references.forEach((ref: any) => {
|
|
if (ref.issue && item.subject) {
|
|
item.subject = item.subject.replace(` (#${ref.issue})`, '');
|
|
}
|
|
});
|
|
}
|
|
return item;
|
|
}
|
|
|
|
export async function changelog(): Promise<void> {
|
|
const spinner = createSpinner('Generating changelog...').start();
|
|
|
|
return new Promise((resolve) => {
|
|
conventionalChangelog(
|
|
{
|
|
preset: 'angular',
|
|
releaseCount: 2,
|
|
},
|
|
null,
|
|
null,
|
|
null,
|
|
{
|
|
mainTemplate,
|
|
headerPartial,
|
|
commitPartial,
|
|
transform,
|
|
}
|
|
)
|
|
.pipe(createWriteStream(DIST_FILE))
|
|
.on('close', () => {
|
|
spinner.success({
|
|
text: `Changelog generated at ${slimPath(DIST_FILE)}`,
|
|
});
|
|
resolve();
|
|
});
|
|
});
|
|
}
|