function generateBlogPost(releaseInfo, prereleaseMajorVersion) {
	const ruleList = RULE_FILES

		// Strip the .js extension
		.map(ruleFileName => path.basename(ruleFileName, ".js"))

		/*
		 * Sort by length descending. This ensures that rule names which are substrings of other rule names are not
		 * matched incorrectly. For example, the string "no-undefined" should get matched with the `no-undefined` rule,
		 * instead of getting matched with the `no-undef` rule followed by the string "ined".
		 */
		.sort((ruleA, ruleB) => ruleB.length - ruleA.length);

	const renderContext = Object.assign(
		{ prereleaseMajorVersion, ruleList },
		releaseInfo,
	);

	const output = ejs.render(
			cat("./templates/blogpost.md.ejs"),
			renderContext,
		),
		now = new Date(),
		month = now.getMonth() + 1,
		day = now.getDate(),
		filename = path.join(
			SITE_DIR,
			`src/content/blog/${now.getFullYear()}-${
				month < 10 ? `0${month}` : month
			}-${day < 10 ? `0${day}` : day}-eslint-v${
				releaseInfo.version
			}-released.md`,
		);

	output.to(filename);
}
Generates a release blog post for eslint.org
@param {Object} releaseInfo The release metadata.
@param {string} [prereleaseMajorVersion] If this is a prerelease, the next major version after this prerelease
@returns {void}
@private