UNPKG

git-release-manager

Version:

A tool to generate release notes from git commit history

149 lines 7.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getChangeInformation = getChangeInformation; exports.getRangeSummary = getRangeSummary; exports.renderChangelogTemplate = renderChangelogTemplate; const commitProcessor_1 = require("../git/commits/commitProcessor"); const context_1 = require("../git/context"); const commitUtils_1 = require("../git/utils/commitUtils"); const sections_1 = require("../sections"); const templateRenderer_1 = require("../../templates/templateRenderer"); const gitOperations_1 = require("../git/gitOperations"); const ReferenceTypesEnum_1 = require("../changes/types/ReferenceTypesEnum"); async function getChangeInformation(rangeInfo) { var _a; let header; let summary; let currentReference; let changeCommitsCount = await (0, commitUtils_1.getCommitCount)(rangeInfo.resolvedRange); currentReference = rangeInfo.latestReference; header = (_a = currentReference === null || currentReference === void 0 ? void 0 : currentReference.name) !== null && _a !== void 0 ? _a : null; if (currentReference) { if ((currentReference === null || currentReference === void 0 ? void 0 : currentReference.reference) != rangeInfo.resolvedTo.reference) { const commitsAhead = await (0, commitUtils_1.getCommitCount)(`${currentReference === null || currentReference === void 0 ? void 0 : currentReference.reference}..${rangeInfo.resolvedTo.reference}`); header += ` (+${commitsAhead} commits)`; } } // if (resolvedTo.type === ReferenceTypesEnum.commit) {} // else if (resolvedTo.type === ReferenceTypesEnum.date) {} // else if (resolvedTo.type === ReferenceTypesEnum.branch) {} // else if (resolvedTo.type === ReferenceTypesEnum.ref) {} // else if (resolvedTo.type === ReferenceTypesEnum.tag) {} summary = 'Changes'; if (rangeInfo.resolvedFrom.value) { switch (rangeInfo.resolvedFrom.type) { case ReferenceTypesEnum_1.ReferenceTypesEnum.commit: summary += ` from commit ${rangeInfo.resolvedFrom.value}`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.branch: summary += ` from ${rangeInfo.resolvedFrom.value} branch`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.date: summary += ` after ${rangeInfo.resolvedFrom.value}`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.tag: summary += ` from ${rangeInfo.resolvedFrom.value} tag`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.ref: summary += ` from reference ${rangeInfo.resolvedFrom.value}`; break; default: break; } } else { summary += ` from initial commit`; } if (rangeInfo.resolvedTo.value) { switch (rangeInfo.resolvedTo.type) { case ReferenceTypesEnum_1.ReferenceTypesEnum.commit: summary += ` to commit ${rangeInfo.resolvedTo.value}`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.branch: summary += ` to ${rangeInfo.resolvedTo.value} branch`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.date: summary += ` before ${rangeInfo.resolvedTo.value}`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.tag: summary += ` to ${rangeInfo.resolvedTo.value} tag`; break; case ReferenceTypesEnum_1.ReferenceTypesEnum.ref: summary += ` to reference ${rangeInfo.resolvedTo.value}`; break; default: break; } } else { summary += ` to HEAD`; } return { header, summary, currentReference, changeCommitsCount, }; } async function getRangeSummary(resolvedFrom, resolvedTo) { const gitInfo = await (0, gitOperations_1.collectGitInfo)(resolvedFrom, resolvedTo); const rangeSummary = { ...gitInfo, resolvedFrom, resolvedTo, }; return rangeSummary; } async function renderChangelogTemplate(templatePath, options, config) { let fileData = ''; const date = new Date().toISOString().split('T')[0]; const repository = await (0, context_1.getCurrentRepositoryAsync)(); const { resolvedFrom, resolvedTo } = await (0, gitOperations_1.resolveGitReferences)(options); if (!resolvedFrom || !resolvedTo) { console.log('Unable to resolve git references'); return; } const rangeSummary = await getRangeSummary(resolvedFrom, resolvedTo); if (rangeSummary.referenceList.length === 0) { console.log('No tag found'); return; } if (options === null || options === void 0 ? void 0 : options.mergeAll) { const context = await getContext(rangeSummary, config, date, repository); fileData = await (0, templateRenderer_1.renderTemplate)(templatePath, options === null || options === void 0 ? void 0 : options.environment, context); } else { //burda resolvedTo.type tag ise doğru, commit ise commitList, date ise dateList, branch ise branchList, ref ise refList'te bulunmalı ona göre döngü yapılmalı // date ise gün gün commitleri alıp context oluşturup render etmek gerekiyor, veya opsionel olarak config'den alınacak parametreye göre bölünecek birim belirtilmeli // branch ise branch'e göre commitleri alıp context oluşturup render etmek gerekiyor // ref ise ref'e göre commitleri alıp context oluşturup render etmek gerekiyor, burda kaç ref alınacağı bilgisi bulunmalı // commit ise commitList'te bulunan commitlerin hepsini alıp context oluşturup render etmek gerekiyor for (let index = 0; index < rangeSummary.referenceList.length; index++) { const { resolvedFrom, resolvedTo } = await (0, gitOperations_1.resolveGitReferencesFromRangeSummary)(rangeSummary, index); if (!resolvedFrom || !resolvedTo) { continue; } const newRangeSummary = await getRangeSummary(resolvedFrom, resolvedTo); const context = await getContext(newRangeSummary, config, date, repository); const renderedData = await (0, templateRenderer_1.renderTemplate)(templatePath, options === null || options === void 0 ? void 0 : options.environment, context); fileData += `\n\n${renderedData}`; } } return fileData; } async function getContext(rangeSummary, config, date, repository) { const changeInfo = await getChangeInformation(rangeSummary); const commits = await (0, commitProcessor_1.listCommitsAsync)(rangeSummary.resolvedRange, config); const sections = (0, sections_1.createSections)(commits, config); const context = { date, ...rangeSummary, changeInfo, repository, commits, sections, config, }; return context; } //# sourceMappingURL=templateOperations.js.map