From d662bf89690ddbaf04b1ae94e8168e315fe5fba4 Mon Sep 17 00:00:00 2001 From: biche Date: Mon, 23 Oct 2023 15:13:19 +0200 Subject: [PATCH] This script is for anyone who spent too much time generating pretty changelog (almost everyone) It just parse the commit message from local git repo and generate a easy customizable HTML code --- out/changelog.cjs | 85 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 9 +++-- 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100755 out/changelog.cjs diff --git a/out/changelog.cjs b/out/changelog.cjs new file mode 100755 index 00000000..ce0f2c72 --- /dev/null +++ b/out/changelog.cjs @@ -0,0 +1,85 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const {execSync} = require("child_process"); +const {marked} = require("marked"); +const {emojify} = require("node-emoji"); + +function getLogsByDate() { + const logs = execSync(`git log --date=short`).toString(); + const commits = []; + for (let log of logs.split(/[a-zA-Z0-9]{40}/)) { + log = log.split('Date: ')[1]; + if (!log) { + continue; + } + const obj = { + date: log.split('\n\n ')[0], + subject: log.split('\n\n ')[1].split('\n\ncommit ')[0] + } + commits.push(obj); + } + + const dates = {}; + for (const com of commits) { + if (!dates[com.date]) { + dates[com.date] = []; + } + dates[com.date].push(com); + } + return dates; +} + +(async () => { + try { + const logs = getLogsByDate(); + + let html = ""; + for (const [date, commit] of Object.entries(logs)) { + let lis = ''; + for (const com of commit) { + let sub = com.subject.trim(); + sub = emojify(sub); + sub = marked(sub, {mangle: false, headerIds: false}); + sub = sub.replaceAll('\n', '
'); + sub = sub.replaceAll('\t', ' - '); + if (sub.length < 30) { + continue; + } + lis += `
  • ${sub}
  • `; + } + if (lis.length < 1) { + continue; + } + html += `

    ${date}

    `; + } + + fs.writeFileSync(process.argv[2], ` + +
    ${html}
    `); + } catch (error) { + console.error(error); + } +})(); diff --git a/package.json b/package.json index 002014c3..e1165148 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,15 @@ "aicommit", "aicommits", "gptcommit", - "commit" + "commit", + "changelog", + "generator" ], "main": "cli.js", "bin": { "opencommit": "./out/cli.cjs", - "oco": "./out/cli.cjs" + "oco": "./out/cli.cjs", + "changelog": "./out/changelog.cjs ./CHANGELOG.html" }, "repository": { "url": "https://github.com/di-sukharev/opencommit" @@ -77,6 +80,8 @@ "ignore": "^5.2.4", "ini": "^3.0.1", "inquirer": "^9.1.4", + "node-emoji": "^2.1.0", + "marked": "9.1.2", "openai": "^3.2.1" } }