UNPKG

redhot

Version:

TypeScript Monorepo Management

72 lines (61 loc) 1.95 kB
const conventionalChangelog = require('conventional-changelog') const addStream = require('add-stream') const tempfile = require('tempfile') const fs = require('fs') const path = require('path') const { isFile, exec } = require('../../util') const startCommits = {} function touchFile (path) { return exec(`touch ${path}`) } // Update the startCommit for each package, looking for release commits // for each package. exports.generateChangelogs = function (packages, rootDir, callback) { const config = { preset: 'angular', append: true, transform: function (commit, cb) { if (commit.type === 'release') { startCommits[commit.scope] = commit.hash } cb() } } conventionalChangelog(config, {}, { reverse: true }) .on('end', () => runUpdateChangelogs(packages, rootDir, callback)) .resume() } function runUpdateChangelogs (packages, rootDir, callback) { packages.forEach(function (packageName) { const filename = path.join(rootDir, packageName, '/CHANGELOG.md') if (!isFile(filename)) { touchFile(filename) } const changelogOpts = { preset: 'angular', releaseCount: 0, pkg: { path: path.join(rootDir, packageName, 'package.json') }, transform: function (commit, cb) { if (commit.scope === packageName) { cb(null, commit) } else { cb() } } } const gitRawCommitsOpts = { from: startCommits[packageName] } const readStream = fs.createReadStream(filename) const tmp = tempfile() conventionalChangelog(changelogOpts, {}, gitRawCommitsOpts) .pipe(addStream(readStream)) .pipe(fs.createWriteStream(tmp)) .on('finish', function () { fs.createReadStream(tmp) .pipe(fs.createWriteStream(filename)) console.log('Successfully updated changelog for ' + packageName + '!') callback && callback() }) }) }