Files
test-repo/scripts/release/steps/update-changelog.js
T
Sosuke Suzukiandfisker Cheung 29d6b22eae Add script to replace Prettier stable/Prettier master with the actual versions (#8984)
* Add a script replaces 'Prettier stable' => 'Prettier x.x'

* Fix by prettier

* Implement replaceVersionInBlogPost in release steps

* Update scripts/release/steps/update-changelog.js

Co-authored-by: fisker Cheung <lionkay@gmail.com>

* Fix from review

* Format version

* Update scripts/release/steps/update-changelog.js

Co-authored-by: fisker Cheung <lionkay@gmail.com>

* `ver` -> `version`

* `Version` -> `Versions`

Co-authored-by: fisker Cheung <lionkay@gmail.com>
2020-08-19 20:18:16 +09:00

92 lines
2.7 KiB
JavaScript

"use strict";
const fs = require("fs");
const chalk = require("chalk");
const { outdent, string: outdentString } = require("outdent");
const semver = require("semver");
const { waitForEnter, runYarn, logPromise } = require("../utils");
function getBlogPostInfo(version) {
const date = new Date();
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
return {
file: `website/blog/${year}-${month}-${day}-${version}.md`,
path: `blog/${year}/${month}/${day}/${version}.html`,
};
}
function writeChangelog({ version, previousVersion, releaseNotes }) {
const changelog = fs.readFileSync("CHANGELOG.md", "utf-8");
const newEntry = outdent`
# ${version}
[diff](https://github.com/prettier/prettier/compare/${previousVersion}...${version})
${releaseNotes}
`;
fs.writeFileSync("CHANGELOG.md", newEntry + "\n\n" + changelog);
}
function formatVersion(version) {
return `${semver.major(version)}.${semver.minor(version)}`;
}
function replaceVersionsInBlogPost({ blogPost, version, previousVersion }) {
const blogPostData = fs.readFileSync(blogPost, "utf-8");
const newBlogPostData = blogPostData
.replace(/prettier stable/gi, `Prettier ${formatVersion(previousVersion)}`)
.replace(/prettier master/gi, `Prettier ${formatVersion(version)}`);
fs.writeFileSync(blogPost, newBlogPostData);
}
module.exports = async function ({ version, previousVersion }) {
const semverDiff = semver.diff(version, previousVersion);
if (semverDiff !== "patch") {
const blogPost = getBlogPostInfo(version);
writeChangelog({
version,
previousVersion,
releaseNotes: `🔗 [Release Notes](https://prettier.io/${blogPost.path})`,
});
if (fs.existsSync(blogPost.file)) {
replaceVersionsInBlogPost({
blogPost: blogPost.file,
version,
previousVersion,
});
// Everything is fine, this step is finished
return;
}
console.warn(
outdentString(chalk`
{yellow warning} The file {bold ${blogPost.file}} doesn't exist, but it will be referenced in {bold CHANGELOG.md}. Make sure to create it later.
Press ENTER to continue.
`)
);
} else {
console.log(
outdentString(chalk`
{yellow.bold A manual step is necessary.}
You can copy the entries from {bold changelog_unreleased/*/pr-*.md} to {bold CHANGELOG.md}
and update it accordingly.
You don't need to commit the file, the script will take care of that.
When you're finished, press ENTER to continue.
`)
);
}
await waitForEnter();
await logPromise(
"Re-running Prettier on docs",
runYarn(["lint:prettier", "--write"])
);
};