diff --git a/scripts/release/README.md b/scripts/release/README.md index cc9de9de1..4d9237f1b 100644 --- a/scripts/release/README.md +++ b/scripts/release/README.md @@ -3,7 +3,7 @@ ## Usage ```sh -node ./scripts/release/release.js --version NEW_VERSION +node ./scripts/release/release.js ``` The script has its own `package.json` so we can reinstall the root's `node_modules/` while making the release. @@ -12,6 +12,7 @@ The script has its own `package.json` so we can reinstall the root's `node_modul | Flag | Description | | ----------------------------- | --------------------------------------------------------------------------------------- | +| `--version` | Version to release | | `--manual` | Manual run release process instead of publish from GitHub actions | | `--dry` | Dry run | | `--skip-dependencies-install` | Skip dependencies installation | diff --git a/scripts/release/run.js b/scripts/release/run.js index 4c22b8b5c..4623354ca 100644 --- a/scripts/release/run.js +++ b/scripts/release/run.js @@ -20,6 +20,10 @@ if (semver.parse(previousVersion) === null) { } for (let step of [ + { + process: steps.chooseVersion, + skip: Boolean(params.version), + }, { name: "Validating new version", process: steps.validateNewVersion, diff --git a/scripts/release/steps/bump-prettier.js b/scripts/release/steps/bump-prettier.js index 7c2fdc9e1..5190209f2 100644 --- a/scripts/release/steps/bump-prettier.js +++ b/scripts/release/steps/bump-prettier.js @@ -5,8 +5,7 @@ import semver from "semver"; import { logPromise, readJson, runGit, runYarn, writeJson } from "../utils.js"; async function format() { - await runYarn(["lint:eslint", "--fix"]); - await runYarn(["lint:prettier", "--write"]); + await runYarn(["fix:prettier"]); } // Only add commit to `.git-blame-ignore-revs` when files except `package.json` and `yarn.lock` changed @@ -66,6 +65,6 @@ export default async function bumpPrettier(params) { "Installing Prettier", runYarn(["add", "--dev", `prettier@${version}`]), ); - await logPromise("Updating files", format()); + await logPromise("Formatting files", format()); await logPromise("Committing changed files", commit(params)); } diff --git a/scripts/release/steps/choose-version.js b/scripts/release/steps/choose-version.js new file mode 100644 index 000000000..9ca83fd1b --- /dev/null +++ b/scripts/release/steps/choose-version.js @@ -0,0 +1,34 @@ +import enquirer from "enquirer"; +import semver from "semver"; + +const SEMVER_INCREMENTS = ["patch", "minor", "major"]; +const CUSTOM_VERSION_VALUE_PLACEHOLDER = "custom-version"; + +export default async function chooseVersion(params) { + let version = await new enquirer.Select({ + name: "version", + message: `Choose a version to release (current: ${params.previousVersion})`, + choices: [ + ...SEMVER_INCREMENTS.map((type) => { + const version = semver.inc(params.previousVersion, type); + + return { + message: `${type}: ${version}`, + value: version, + }; + }), + { role: "separator" }, + { message: "Other", value: CUSTOM_VERSION_VALUE_PLACEHOLDER }, + ], + }).run(); + + if (version === CUSTOM_VERSION_VALUE_PLACEHOLDER) { + ({ version } = await enquirer.prompt({ + type: "input", + name: "version", + message: `Input version (current: ${params.previousVersion})`, + })); + } + + params.version = version; +} diff --git a/scripts/release/steps/index.js b/scripts/release/steps/index.js index ec6368830..df103e975 100644 --- a/scripts/release/steps/index.js +++ b/scripts/release/steps/index.js @@ -1,5 +1,6 @@ export { default as bumpPrettier } from "./bump-prettier.js"; export { default as checkGitStatus } from "./check-git-status.js"; +export { default as chooseVersion } from "./choose-version.js"; export { default as cleanChangelog } from "./clean-changelog.js"; export { default as generateBundles } from "./generate-bundles.js"; export { default as installDependencies } from "./install-dependencies.js";