From 863368e1ba915eb885eca20c493ddad740cb8df2 Mon Sep 17 00:00:00 2001 From: SUZUKI Sosuke Date: Sun, 17 Dec 2023 22:51:37 +0900 Subject: [PATCH] Add `--next` flag to release script (#15816) Co-authored-by: fisker --- scripts/release/README.md | 9 ++++++--- scripts/release/parse-arguments.js | 5 +++++ scripts/release/steps/bump-prettier.js | 4 ++-- scripts/release/steps/check-git-status.js | 11 ++++++++++- scripts/release/steps/post-publish-steps.js | 4 ++-- .../steps/show-instructions-after-npm-publish.js | 8 +++++++- scripts/release/steps/update-changelog.js | 3 ++- scripts/release/steps/update-dependents-count.js | 4 ++-- scripts/release/steps/update-version.js | 7 ++++++- scripts/release/steps/validate-new-version.js | 10 +++++++++- scripts/release/steps/wait-for-bot-release.js | 8 ++++---- 11 files changed, 55 insertions(+), 18 deletions(-) diff --git a/scripts/release/README.md b/scripts/release/README.md index d5240a2b2..cc9de9de1 100644 --- a/scripts/release/README.md +++ b/scripts/release/README.md @@ -10,9 +10,12 @@ The script has its own `package.json` so we can reinstall the root's `node_modul ## Flags -- `--manual` Manual run release process instead of publish from GitHub actions -- `--dry` Dry run -- `--skip-dependencies-install` Skip dependencies installation +| Flag | Description | +| ----------------------------- | --------------------------------------------------------------------------------------- | +| `--manual` | Manual run release process instead of publish from GitHub actions | +| `--dry` | Dry run | +| `--skip-dependencies-install` | Skip dependencies installation | +| `--next` | Pre-release such as alpha and beta. It must be run on the `next` branch or it will fail | ## Credits diff --git a/scripts/release/parse-arguments.js b/scripts/release/parse-arguments.js index 7ca04e967..8fb03914c 100644 --- a/scripts/release/parse-arguments.js +++ b/scripts/release/parse-arguments.js @@ -8,6 +8,7 @@ function parseArguments() { manual = false, dry = false, "skip-dependencies-install": skipDependenciesInstall = false, + next = false, }, } = parseArgs({ options: { @@ -26,6 +27,9 @@ function parseArguments() { "skip-dependencies-install": { type: "boolean", }, + next: { + type: "boolean", + }, }, }); @@ -35,6 +39,7 @@ function parseArguments() { manual, dry, skipDependenciesInstall, + next, }; } diff --git a/scripts/release/steps/bump-prettier.js b/scripts/release/steps/bump-prettier.js index e16f4e648..795d630e8 100644 --- a/scripts/release/steps/bump-prettier.js +++ b/scripts/release/steps/bump-prettier.js @@ -37,9 +37,9 @@ async function bump({ } export default async function bumpPrettier(params) { - const { dry, version } = params; + const { dry, version, next } = params; - if (dry) { + if (dry || next) { return; } diff --git a/scripts/release/steps/check-git-status.js b/scripts/release/steps/check-git-status.js index bb13636f7..f30abd8c3 100644 --- a/scripts/release/steps/check-git-status.js +++ b/scripts/release/steps/check-git-status.js @@ -1,6 +1,6 @@ import { runGit } from "../utils.js"; -export default async function checkGitStatus() { +export default async function checkGitStatus({ next }) { const { stdout: status } = await runGit(["status", "--porcelain"]); if (status) { @@ -9,4 +9,13 @@ export default async function checkGitStatus() { "Please revert or commit all local changes before making a release.", ); } + + if (next) { + const { stdout: branch } = await runGit(["branch", "--show-current"]); + if (branch !== "next") { + throw new Error( + `Expected to be on "next" branch, but currently on "${branch}"`, + ); + } + } } diff --git a/scripts/release/steps/post-publish-steps.js b/scripts/release/steps/post-publish-steps.js index cdaf5e598..4b8005f5a 100644 --- a/scripts/release/steps/post-publish-steps.js +++ b/scripts/release/steps/post-publish-steps.js @@ -45,10 +45,10 @@ function twitterAnnouncement() { `; } -export default async function postPublishSteps({ dry }) { +export default async function postPublishSteps({ dry, next }) { console.log(chalk.bold.green("The script has finished!\n")); - if (dry) { + if (dry || next) { return; } diff --git a/scripts/release/steps/show-instructions-after-npm-publish.js b/scripts/release/steps/show-instructions-after-npm-publish.js index e048e9660..2f7c9a8e1 100644 --- a/scripts/release/steps/show-instructions-after-npm-publish.js +++ b/scripts/release/steps/show-instructions-after-npm-publish.js @@ -36,9 +36,15 @@ export function getReleaseUrl(version, previousVersion) { export default async function showInstructionsAfterNpmPublish({ version, previousVersion, + next, }) { - const releaseUrl = getReleaseUrl(version, previousVersion); + if (next) { + console.log(`${chalk.green.bold(`Prettier ${version} published!`)}`); + await waitForEnter(); + return; + } + const releaseUrl = getReleaseUrl(version, previousVersion); console.log( outdent` ${chalk.green.bold(`Prettier ${version} published!`)} diff --git a/scripts/release/steps/update-changelog.js b/scripts/release/steps/update-changelog.js index c151407d0..705061b20 100644 --- a/scripts/release/steps/update-changelog.js +++ b/scripts/release/steps/update-changelog.js @@ -31,8 +31,9 @@ export default async function updateChangelog({ dry, version, previousVersion, + next, }) { - if (dry) { + if (dry || next) { return; } diff --git a/scripts/release/steps/update-dependents-count.js b/scripts/release/steps/update-dependents-count.js index 0bf168f15..8179b6731 100644 --- a/scripts/release/steps/update-dependents-count.js +++ b/scripts/release/steps/update-dependents-count.js @@ -71,8 +71,8 @@ function formatNumber(value) { return Math.floor(value / 1e5) / 10 + " million"; } -export default async function updateDependentsCount({ dry }) { - if (dry) { +export default async function updateDependentsCount({ dry, next }) { + if (dry || next) { return; } diff --git a/scripts/release/steps/update-version.js b/scripts/release/steps/update-version.js index 4790de5c3..91b4adf57 100644 --- a/scripts/release/steps/update-version.js +++ b/scripts/release/steps/update-version.js @@ -1,10 +1,15 @@ import { runYarn, readJson, writeJson, processFile } from "../utils.js"; -export default async function updateVersion({ version }) { +export default async function updateVersion({ version, next }) { const pkg = await readJson("package.json"); pkg.version = version; await writeJson("package.json", pkg); + // For pre-release, just update package.json + if (next) { + return; + } + // Update github issue templates processFile(".github/ISSUE_TEMPLATE/formatting.md", (content) => content.replace(/^(\*\*Prettier ).*?(\*\*)$/m, `$1${version}$2`), diff --git a/scripts/release/steps/validate-new-version.js b/scripts/release/steps/validate-new-version.js index 8ec863ac7..5c677e54c 100644 --- a/scripts/release/steps/validate-new-version.js +++ b/scripts/release/steps/validate-new-version.js @@ -1,7 +1,7 @@ import chalk from "chalk"; import semver from "semver"; -export default function validateNewVersion({ version, previousVersion }) { +export default function validateNewVersion({ version, previousVersion, next }) { if (!version) { throw new Error("'--version' is required"); } @@ -17,4 +17,12 @@ export default function validateNewVersion({ version, previousVersion }) { `Version '${chalk.yellow.underline(version)}' has already been published`, ); } + + if (next && semver.prerelease(version) === null) { + throw new Error( + `Version '${chalk.yellow.underline( + version, + )}' is not a prerelease version`, + ); + } } diff --git a/scripts/release/steps/wait-for-bot-release.js b/scripts/release/steps/wait-for-bot-release.js index 32021590b..b5c003c08 100644 --- a/scripts/release/steps/wait-for-bot-release.js +++ b/scripts/release/steps/wait-for-bot-release.js @@ -26,7 +26,7 @@ const sleep = () => setTimeout(resolve, 30_000); }); -export default async function waitForBotRelease({ dry, version }) { +export default async function waitForBotRelease({ dry, version, next }) { if (dry) { return; } @@ -68,9 +68,9 @@ export default async function waitForBotRelease({ dry, version }) { "Run workflow", )}" button, type "${chalk.yellow.underline( version, - )}" in "Version to release", uncheck all checkboxes, hit the "${chalk.bgGreen( - "Run workflow", - )}" button. + )}" in "Version to release", ${ + next ? 'check only "Unstable version"' : "uncheck all checkboxes" + }, hit the "${chalk.bgGreen("Run workflow")}" button. `, );