2021-07-26 09:24:44 +08:00
|
|
|
import fs from "node:fs";
|
2023-12-17 19:34:12 +00:00
|
|
|
|
2021-07-26 09:24:44 +08:00
|
|
|
import semver from "semver";
|
2023-12-17 19:34:12 +00:00
|
|
|
|
|
|
|
|
import { logPromise, readJson, runGit, runYarn, writeJson } from "../utils.js";
|
2018-06-05 16:37:52 -03:00
|
|
|
|
|
|
|
|
async function format() {
|
2021-04-21 22:15:12 +08:00
|
|
|
await runYarn(["lint:eslint", "--fix"]);
|
|
|
|
|
await runYarn(["lint:prettier", "--write"]);
|
2018-06-05 16:37:52 -03:00
|
|
|
}
|
|
|
|
|
|
2024-06-05 17:01:19 +08:00
|
|
|
// Only add commit to `.git-blame-ignore-revs` when files except `package.json` and `yarn.lock` changed
|
|
|
|
|
const IGNORED_FILES = new Set(["package.json", "yarn.lock"]);
|
|
|
|
|
async function shouldAddToGitBlameIgnoreRevsFile() {
|
|
|
|
|
const { stdout } = await runGit(["diff", "--name-only"]);
|
|
|
|
|
const changedFiles = stdout.split("\n");
|
|
|
|
|
return changedFiles.some((file) => !IGNORED_FILES.has(file));
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-18 21:49:24 +09:00
|
|
|
async function commit({ version, repo }) {
|
2024-06-05 17:01:19 +08:00
|
|
|
const filesChanged = shouldAddToGitBlameIgnoreRevsFile();
|
|
|
|
|
|
2021-04-21 22:15:12 +08:00
|
|
|
await runGit(["commit", "-am", `Bump Prettier dependency to ${version}`]);
|
2020-10-18 09:05:28 +08:00
|
|
|
|
|
|
|
|
// Add rev to `.git-blame-ignore-revs` file
|
2024-06-05 17:01:19 +08:00
|
|
|
if (filesChanged) {
|
|
|
|
|
const file = ".git-blame-ignore-revs";
|
|
|
|
|
const mark = "# Prettier bump after release";
|
|
|
|
|
const { stdout: rev } = await runGit(["rev-parse", "HEAD"]);
|
|
|
|
|
let text = fs.readFileSync(file, "utf8");
|
|
|
|
|
text = text.replace(mark, `${mark}\n# ${version}\n${rev}`);
|
|
|
|
|
fs.writeFileSync(file, text);
|
|
|
|
|
await runGit(["commit", "-am", `Git blame ignore ${version}`]);
|
|
|
|
|
}
|
2020-10-18 09:05:28 +08:00
|
|
|
|
2022-06-16 13:56:57 +08:00
|
|
|
await runGit(["push", "--repo", repo]);
|
2018-06-05 16:37:52 -03:00
|
|
|
}
|
|
|
|
|
|
2021-01-24 01:14:13 +08:00
|
|
|
async function bump({
|
|
|
|
|
version,
|
|
|
|
|
previousVersion,
|
|
|
|
|
previousVersionOnDefaultBranch,
|
|
|
|
|
}) {
|
2018-08-08 23:49:22 +08:00
|
|
|
const pkg = await readJson("package.json");
|
|
|
|
|
if (semver.diff(version, previousVersion) === "patch") {
|
2021-01-24 01:14:13 +08:00
|
|
|
pkg.version = previousVersionOnDefaultBranch; // restore the `-dev` version
|
2018-08-08 23:49:22 +08:00
|
|
|
} else {
|
|
|
|
|
pkg.version = semver.inc(version, "minor") + "-dev";
|
|
|
|
|
}
|
2022-01-17 09:19:50 +08:00
|
|
|
await writeJson("package.json", pkg);
|
2018-08-08 23:49:22 +08:00
|
|
|
}
|
|
|
|
|
|
2021-09-10 11:17:09 +09:00
|
|
|
export default async function bumpPrettier(params) {
|
2023-12-17 22:51:37 +09:00
|
|
|
const { dry, version, next } = params;
|
2018-08-08 23:49:22 +08:00
|
|
|
|
2023-12-17 22:51:37 +09:00
|
|
|
if (dry || next) {
|
2018-06-05 16:37:52 -03:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-17 19:16:39 +08:00
|
|
|
/*
|
|
|
|
|
This should be done before installing Prettier,
|
|
|
|
|
otherwise the yarn.lock will merge `prettier@npm:<version>, prettier@workspace:.`
|
|
|
|
|
*/
|
|
|
|
|
await logPromise("Bump default branch version", bump(params));
|
2023-07-05 21:52:17 +09:00
|
|
|
await logPromise(
|
|
|
|
|
"Installing Prettier",
|
2024-01-17 19:16:39 +08:00
|
|
|
runYarn(["add", "--dev", `prettier@${version}`]),
|
2023-07-05 21:52:17 +09:00
|
|
|
);
|
2018-06-05 16:37:52 -03:00
|
|
|
await logPromise("Updating files", format());
|
2022-06-16 13:56:57 +08:00
|
|
|
await logPromise("Committing changed files", commit(params));
|
2021-07-26 09:24:44 +08:00
|
|
|
}
|