UNPKG

@lerna/publish

Version:

Publish packages in the current project

310 lines (309 loc) 11.1 kB
var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var import_npmlog = __toESM(require("npmlog")); var import_semver = __toESM(require("semver")); function addBumpPositional(yargs, additionalKeywords = []) { const semverKeywords = ["major", "minor", "patch", "premajor", "preminor", "prepatch", "prerelease"].concat( additionalKeywords ); const bumpOptionList = `'${semverKeywords.slice(0, -1).join("', '")}', or '${semverKeywords[semverKeywords.length - 1]}'.`; yargs.positional("bump", { describe: `Increment version(s) by explicit version _or_ semver keyword, ${bumpOptionList}`, type: "string", coerce: (choice) => { if (!import_semver.default.valid(choice) && semverKeywords.indexOf(choice) === -1) { throw new Error(`bump must be an explicit version string _or_ one of: ${bumpOptionList}`); } return choice; } }); } const command = { command: "version [bump]", describe: "Bump version of packages changed since the last release", // TODO: refactor based on TS feedback // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore builder(yargs, composed) { const opts = { "allow-branch": { describe: "Specify which branches to allow versioning from.", type: "array" }, amend: { describe: "Amend the existing commit, instead of generating a new one.", type: "boolean" }, "build-metadata": { describe: "Apply semver-compatible build metadata to the release", requiresArg: true, type: "string" }, "conventional-commits": { describe: "Use conventional-changelog to determine version bump and generate CHANGELOG.", type: "boolean" }, "conventional-graduate": { describe: "Version currently prereleased packages to a non-prerelease version." // type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array) }, "conventional-prerelease": { describe: "Version changed packages as prereleases when using --conventional-commits." // type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array) }, "conventional-bump-prerelease": { describe: "Bumps prerelease versions if conventional commits requires it.", type: "boolean" }, "changelog-preset": { describe: "Custom conventional-changelog preset.", type: "string", requiresArg: true, defaultDescription: "angular" }, exact: { describe: "Specify cross-dependency version numbers exactly rather than with a caret (^).", type: "boolean" }, "force-publish": { describe: "Always include targeted packages in versioning operations, skipping default logic." // type must remain ambiguous because it is overloaded (boolean _or_ string _or_ array) }, "git-remote": { describe: "Push git changes to the specified remote.", type: "string", requiresArg: true, defaultDescription: "origin" }, "create-release": { describe: "Create an official GitHub or GitLab release for every version.", type: "string", choices: ["gitlab", "github"] }, "ignore-changes": { describe: [ "Ignore changes in files matched by glob(s) when detecting changed packages.", "Pass --no-ignore-changes to completely disable." ].join("\n"), type: "array" }, "ignore-scripts": { describe: "Disable all lifecycle scripts", type: "boolean" }, "include-merged-tags": { describe: "Include tags from merged branches when detecting changed packages.", type: "boolean" }, m: { describe: "Use a custom commit message when creating the version commit.", alias: "message", type: "string", requiresArg: true }, "no-changelog": { describe: "Do not generate CHANGELOG.md files when using --conventional-commits.", type: "boolean" }, changelog: { // proxy for --no-changelog hidden: true, type: "boolean" }, "no-commit-hooks": { describe: "Do not run git commit hooks when committing version changes.", type: "boolean" }, "commit-hooks": { // proxy for --no-commit-hooks hidden: true, type: "boolean" }, "no-git-tag-version": { describe: "Do not commit or tag version changes.", type: "boolean" }, "git-tag-version": { // proxy for --no-git-tag-version hidden: true, type: "boolean" }, // TODO: (major) make --no-granular-pathspec the default "no-granular-pathspec": { describe: "Do not stage changes file-by-file, but globally.", type: "boolean" }, "granular-pathspec": { // proxy for --no-granular-pathspec hidden: true, // describe: "Stage changes file-by-file, not globally.", type: "boolean" }, // TODO: (major) make --no-private the default "no-private": { describe: "Do not version private packages.", type: "boolean" }, private: { // proxy for --no-private hidden: true, type: "boolean" }, "no-push": { describe: "Do not push tagged commit to git remote.", type: "boolean" }, push: { // proxy for --no-push hidden: true, type: "boolean" }, // preid is copied into ../publish/command because a whitelist for one option isn't worth it preid: { describe: "Specify the prerelease identifier when versioning a prerelease", type: "string", requiresArg: true, defaultDescription: "alpha" }, "sign-git-commit": { describe: "Pass the `--gpg-sign` flag to `git commit`.", type: "boolean" }, "signoff-git-commit": { describe: "Pass the `--signoff` flag to `git commit`.", type: "boolean" }, "sign-git-tag": { describe: "Pass the `--sign` flag to `git tag`.", type: "boolean" }, "force-git-tag": { describe: "Pass the `--force` flag to `git tag`.", type: "boolean" }, "tag-version-prefix": { describe: "Customize the tag prefix. To remove entirely, pass an empty string.", type: "string", requiresArg: true, defaultDescription: "v" }, "git-tag-command": { describe: "Allows users to specify a custom command to be used when applying git tags. For example, this may be useful for providing a wrapper command in CI/CD pipelines that have no direct write access.", type: "string" }, "npm-client-args": { describe: "Additional arguments to pass to the npm client when performing 'npm install'.", type: "array" }, y: { describe: "Skip all confirmation prompts.", alias: "yes", type: "boolean" } }; if (composed) { Object.keys(opts).forEach((key) => { opts[key].hidden = true; }); yargs.default("composed", composed).hide("composed"); } else { addBumpPositional(yargs); } yargs.options(opts); yargs.parserConfiguration({ "populate--": true }); if (!composed) { yargs.group(Object.keys(opts), "Command Options:"); } return yargs.option("ignore", { // TODO: remove in next major release // NOT the same as filter-options --ignore hidden: true, conflicts: "ignore-changes", type: "array" }).option("cd-version", { // TODO: remove in next major release hidden: true, conflicts: "bump", type: "string", requiresArg: true }).option("repo-version", { // TODO: remove in next major release hidden: true, conflicts: "bump", type: "string", requiresArg: true }).option("skip-git", { // TODO: remove in next major release hidden: true, type: "boolean" }).option("github-release", { // TODO: remove in next major release hidden: true, type: "boolean" }).check((argv) => { if (argv.ignore) { argv.ignoreChanges = argv.ignore; delete argv.ignore; import_npmlog.default.warn("deprecated", "--ignore has been renamed --ignore-changes"); } if (argv.cdVersion && !argv.bump) { argv.bump = argv.cdVersion; delete argv.cdVersion; delete argv["cd-version"]; import_npmlog.default.warn("deprecated", "--cd-version has been replaced by positional [bump]"); } if (argv.repoVersion && !argv.bump) { argv.bump = argv.repoVersion; delete argv.repoVersion; delete argv["repo-version"]; import_npmlog.default.warn("deprecated", "--repo-version has been replaced by positional [bump]"); } if (argv.skipGit) { argv.gitTagVersion = false; argv["git-tag-version"] = false; argv.push = false; delete argv.skipGit; delete argv["skip-git"]; import_npmlog.default.warn("deprecated", "--skip-git has been replaced by --no-git-tag-version --no-push"); } if (argv.githubRelease) { argv.createRelease = "github"; delete argv.githubRelease; import_npmlog.default.warn("deprecated", "--github-release has been replaced by --create-release=github"); } if (argv["--"]) { import_npmlog.default.warn("EDOUBLEDASH", "Arguments after -- are no longer passed to subprocess executions."); import_npmlog.default.warn("EDOUBLEDASH", "This will cause an error in a future major version."); } return argv; }); }, handler(argv) { return require(".")(argv); }, addBumpPositional }; module.exports = command;