diff --git a/test/parallel/test-release-changelog.js b/test/parallel/test-release-changelog.js new file mode 100644 index 00000000000000..99889fa1724014 --- /dev/null +++ b/test/parallel/test-release-changelog.js @@ -0,0 +1,89 @@ +'use strict'; + +// This test checks that the changelogs contain an entry for releases. + +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + +const getDefine = (text, name) => { + const regexp = new RegExp(`#define\\s+${name}\\s+(.*)`); + const match = regexp.exec(text); + assert.notStrictEqual(match, null); + return match[1]; +}; + +const srcRoot = path.join(__dirname, '..', '..'); +const mainChangelogFile = path.join(srcRoot, 'CHANGELOG.md'); +const versionFile = path.join(srcRoot, 'src', 'node_version.h'); +const versionText = fs.readFileSync(versionFile, { encoding: 'utf8' }); +const release = getDefine(versionText, 'NODE_VERSION_IS_RELEASE') !== '0'; + +if (!release) { + common.skip('release bit is not set'); +} + +const major = getDefine(versionText, 'NODE_MAJOR_VERSION'); +const minor = getDefine(versionText, 'NODE_MINOR_VERSION'); +const patch = getDefine(versionText, 'NODE_PATCH_VERSION'); +const versionForRegex = `${major}\\.${minor}\\.${patch}`; + +const lts = getDefine(versionText, 'NODE_VERSION_IS_LTS') !== '0'; +const codename = getDefine(versionText, 'NODE_VERSION_LTS_CODENAME').slice(1, -1); +// If the LTS bit is set there should be a codename. +if (lts) { + assert.notStrictEqual(codename, ''); +} + +const changelogPath = `doc/changelogs/CHANGELOG_V${major}.md`; +// Check CHANGELOG_V*.md +{ + const changelog = fs.readFileSync(path.join(srcRoot, changelogPath), { encoding: 'utf8' }); + // Check title matches major version. + assert.match(changelog, new RegExp(`# Node\\.js ${major} ChangeLog`)); + // Check table header + let tableHeader; + if (lts) { + tableHeader = new RegExp(`