UNPKG

ruins

Version:

> [!IMPORTANT] > This is in beta. Not everything is ironed out and some modules might misbehave

52 lines (48 loc) 1.6 kB
import { exec } from "child_process"; import { writeFile } from "node:fs/promises"; import { promisify } from "node:util"; import { getConfig } from "../config/getConfig.js"; import { resolve } from "node:path"; import consola from "consola"; import type { RuinsGitlog, RuinsOutput } from "../types/ruins.js"; import { parseConventionalCommit } from "./utils/conventional-commit.js"; const execPromise = promisify(exec); /** * Create a file collecting all TODOs in the project * * @param {string} ruinsPath - path to Ruins project directory * @returns {Promise<void>} */ export const createGitLog = async () => { const settings = await getConfig(); const outputFile = resolve(settings.dir, settings.files.gitlog); try { const m = settings.gitlog.months; const grepOutput = await execPromise( `cd ${process.cwd()} && git log --since="${m} months ago" --pretty=format:"%h | %ae | %s | %ad" --date=short --no-merges` ); const formattedOutput = grepOutput.stdout .split(/\r?\n/) .map((line) => { if (!line) return; const [hash, email, message, date] = line.split(" | "); return { hash, email, message, date, meta: parseConventionalCommit(message), }; }) .filter((line) => line !== undefined); const output: RuinsOutput<RuinsGitlog> = { meta: { timestamp: Date.now(), }, data: formattedOutput, }; await writeFile(outputFile, JSON.stringify(output, null, 2)); } catch { consola.error("Something went wrong!"); } };