From c1ec20840dfe1e3b5b3d0f3029a3ccf901ef76e6 Mon Sep 17 00:00:00 2001 From: Ken Chau Date: Tue, 1 Oct 2024 08:03:17 +0000 Subject: [PATCH] Updates --- 404.html | 6 +++--- assets/js/{23.2220b1a6.js => 23.f3104018.js} | 2 +- assets/js/{24.e9328f3f.js => 24.65573d97.js} | 2 +- assets/js/{25.5bcd9f4e.js => 25.51777c8b.js} | 2 +- assets/js/{26.e05ec0ca.js => 26.18ceeb7f.js} | 2 +- assets/js/{27.7e4bacc0.js => 27.b8c66699.js} | 2 +- assets/js/{30.865896fb.js => 30.f30b4679.js} | 2 +- assets/js/{31.3b2d72a8.js => 31.77c50f29.js} | 2 +- assets/js/{35.889e84bf.js => 35.060fd012.js} | 2 +- assets/js/{app.4c151171.js => app.ef895008.js} | 4 ++-- cli/bump.html | 4 ++-- cli/change.html | 4 ++-- cli/check.html | 4 ++-- cli/options.html | 4 ++-- cli/publish.html | 4 ++-- cli/sync.html | 4 ++-- concepts/bump-algorithm.html | 4 ++-- concepts/change-files.html | 4 ++-- concepts/ci-integration.html | 4 ++-- concepts/groups.html | 4 ++-- index.html | 4 ++-- overview/configuration.html | 4 ++-- overview/getting-started.html | 4 ++-- overview/installation.html | 4 ++-- 24 files changed, 41 insertions(+), 41 deletions(-) rename assets/js/{23.2220b1a6.js => 23.f3104018.js} (95%) rename assets/js/{24.e9328f3f.js => 24.65573d97.js} (99%) rename assets/js/{25.5bcd9f4e.js => 25.51777c8b.js} (97%) rename assets/js/{26.e05ec0ca.js => 26.18ceeb7f.js} (98%) rename assets/js/{27.7e4bacc0.js => 27.b8c66699.js} (98%) rename assets/js/{30.865896fb.js => 30.f30b4679.js} (99%) rename assets/js/{31.3b2d72a8.js => 31.77c50f29.js} (99%) rename assets/js/{35.889e84bf.js => 35.060fd012.js} (99%) rename assets/js/{app.4c151171.js => app.ef895008.js} (95%) diff --git a/404.html b/404.html index 21ef9f5ab..ba9d1aaa1 100644 --- a/404.html +++ b/404.html @@ -8,13 +8,13 @@ - + -

404

Looks like we've got some broken links.
+ - + diff --git a/assets/js/23.2220b1a6.js b/assets/js/23.f3104018.js similarity index 95% rename from assets/js/23.2220b1a6.js rename to assets/js/23.f3104018.js index 62f579a9b..ca69055e0 100644 --- a/assets/js/23.2220b1a6.js +++ b/assets/js/23.f3104018.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{310:function(e,t,s){"use strict";s.r(t);var a=s(10),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"bump"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bump"}},[e._v("#")]),e._v(" "),t("code",[e._v("bump")])]),e._v(" "),t("p",[e._v("Bumps versions locally without publishing to the remote git repo or npm registry. This command will also generate changelogs.")]),e._v(" "),t("p",[e._v("This is the same logic that is used by the "),t("code",[e._v("publish")]),e._v(" command, so it's a good practice to bump things locally to see what kind of changes will be made before those changes are published to the npm registry and the remote git repo.")]),e._v(" "),t("p",[e._v("Since this affects files locally only, it's up to you to synchronize the package versions in the remote git repo as well as the npm registry after running this command. (Or if you were using it for testing, simply revert the local changes and run "),t("code",[e._v("beachball publish")]),e._v(".)")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ beachball bump\n")])])]),t("h3",{attrs:{id:"options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"./options"}},[e._v("options page")]),e._v(".")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{319:function(e,t,s){"use strict";s.r(t);var a=s(10),o=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"bump"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#bump"}},[e._v("#")]),e._v(" "),t("code",[e._v("bump")])]),e._v(" "),t("p",[e._v("Bumps versions locally without publishing to the remote git repo or npm registry. This command will also generate changelogs.")]),e._v(" "),t("p",[e._v("This is the same logic that is used by the "),t("code",[e._v("publish")]),e._v(" command, so it's a good practice to bump things locally to see what kind of changes will be made before those changes are published to the npm registry and the remote git repo.")]),e._v(" "),t("p",[e._v("Since this affects files locally only, it's up to you to synchronize the package versions in the remote git repo as well as the npm registry after running this command. (Or if you were using it for testing, simply revert the local changes and run "),t("code",[e._v("beachball publish")]),e._v(".)")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ beachball bump\n")])])]),t("h3",{attrs:{id:"options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"./options"}},[e._v("options page")]),e._v(".")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/24.e9328f3f.js b/assets/js/24.65573d97.js similarity index 99% rename from assets/js/24.e9328f3f.js rename to assets/js/24.65573d97.js index 9c8d2b183..5abc43c7a 100644 --- a/assets/js/24.e9328f3f.js +++ b/assets/js/24.65573d97.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{311:function(e,a,t){"use strict";t.r(a);var s=t(10),n=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"change"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#change"}},[e._v("#")]),e._v(" "),a("code",[e._v("change")])]),e._v(" "),a("p",[e._v("This command walks you through a couple of questions and will generate the appropriate "),a("a",{attrs:{href:"../concepts/change-files"}},[e._v("change file")]),e._v(" in the "),a("code",[e._v("/change")]),e._v(" directory. The generated file will be committed automatically.")]),e._v(" "),a("p",[e._v("One of the niceties of using this utility to generate change files is that it will "),a("a",{attrs:{href:"./check"}},[e._v("check")]),e._v(" whether or not you even need a change file. Also, it will load recent commit messages to ease change file generation.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("$ beachball change\n")])])]),a("h3",{attrs:{id:"options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),a("p",[e._v("Some "),a("a",{attrs:{href:"./options"}},[e._v("general options")]),e._v(" including "),a("code",[e._v("--branch")]),e._v(" and "),a("code",[e._v("--scope")]),e._v(" also apply for this command.")]),e._v(" "),a("table",[a("thead",[a("tr",[a("th",[e._v("Option")]),e._v(" "),a("th",[e._v("Alias")]),e._v(" "),a("th",[e._v("Default")]),e._v(" "),a("th",[e._v("Description")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[a("code",[e._v("--all")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("false")]),e._v(" "),a("td",[e._v("Generate change files for all packages")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--message")])]),e._v(" "),a("td",[a("code",[e._v("-m")])]),e._v(" "),a("td",[e._v("(interactive prompt)")]),e._v(" "),a("td",[e._v("Description for all change files")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--no-commit")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("false")]),e._v(" "),a("td",[e._v("Stage the change files rather than committing")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--package")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("(changed packages)")]),e._v(" "),a("td",[e._v("Generate change files for these packages (option can be specified multiple times)")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--type")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("(interactive prompt)")]),e._v(" "),a("td",[e._v("Type for all the change files (must be valid for each package)")])])])]),e._v(" "),a("h3",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[e._v("#")]),e._v(" Examples")]),e._v(" "),a("p",[e._v("Basic interactive prompt (see "),a("a",{attrs:{href:"#prompt-walkthrough"}},[e._v("walkthrough")]),e._v(" for details):")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change\n")])])]),a("p",[e._v("Skip the interactive prompt by specifying a message and type for all changed packages:")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change --type patch --message 'some message'\n")])])]),a("p",[e._v("Generate change file for specific package(s), regardless of changes, and even if a change file already exists for the package in this branch. Each package must be specified with a separate "),a("code",[e._v("--package")]),e._v(" option. (You can also use the "),a("code",[e._v("--message")]),e._v(" and "),a("code",[e._v("--type")]),e._v(" options here.)")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change --package foo --package bar\n")])])]),a("p",[e._v("Generate change files for all packages, regardless of changes. This would most often be used for build config updates which only touch a shared config file, but actually impact the output of all packages.")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change --all --type patch --message 'update build output settings'\n")])])]),a("h3",{attrs:{id:"prompt-walkthrough"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prompt-walkthrough"}},[e._v("#")]),e._v(" Prompt walkthrough")]),e._v(" "),a("p",[e._v("If you have changes that are not committed yet (i.e. "),a("code",[e._v("git status")]),e._v(" reports changes), then "),a("code",[e._v("beachball change")]),e._v(" will warn you about these:")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('$ beachball change\nDefaults to "origin/master"\nThere are uncommitted changes in your repository. Please commit these files first:\n- a-new-file\n')])])]),a("p",[e._v("Make sure to commit "),a("em",[e._v("all")]),e._v(" changes before proceeding with the "),a("code",[e._v("change")]),e._v(" command.")]),e._v(" "),a("p",[e._v("After committing, run "),a("code",[e._v("beachball change")]),e._v(":")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('$ beachball change\n\nValidating options and change files...\nChecking for changes against "origin/main"\nFound changes in the following packages:\n some-pkg\n')])])]),a("p",[e._v("For each package, the prompt will start by asking for a change "),a("strong",[e._v("type")]),e._v(". This should be chosen based on "),a("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semantic versioning rules"),a("OutboundLink")],1),e._v(" because it determines how to update the package version. If the change doesn't affect the published package at all (e.g. you just updated some comments), choose "),a("code",[e._v("none")]),e._v(".")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("Please describe the changes for: some-pkg\n? Change type › - Use arrow-keys. Return to submit.\n❯ Patch - bug fixes; no backwards incompatible changes.\n Minor - small feature; backwards compatible changes.\n None - this change does not affect the published package in any way.\n Major - major feature; breaking changes.\n")])])]),a("p",[e._v("Next, it asks for a "),a("strong",[e._v("description")]),e._v(" of the change. You can type any text or choose from a list of recent commit messages.")]),e._v(" "),a("blockquote",[a("p",[e._v("Tip: These descriptions will be collated into a changelog when the change is published by "),a("code",[e._v("beachball publish")]),e._v(", so think about how to describe your change in a way that's helpful and relevant for consumers of the package.")])]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("Please describe the changes for: some-pkg\n? Describe changes (type or choose one) ›\nadding a new file\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{310:function(e,a,t){"use strict";t.r(a);var s=t(10),n=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"change"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#change"}},[e._v("#")]),e._v(" "),a("code",[e._v("change")])]),e._v(" "),a("p",[e._v("This command walks you through a couple of questions and will generate the appropriate "),a("a",{attrs:{href:"../concepts/change-files"}},[e._v("change file")]),e._v(" in the "),a("code",[e._v("/change")]),e._v(" directory. The generated file will be committed automatically.")]),e._v(" "),a("p",[e._v("One of the niceties of using this utility to generate change files is that it will "),a("a",{attrs:{href:"./check"}},[e._v("check")]),e._v(" whether or not you even need a change file. Also, it will load recent commit messages to ease change file generation.")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[e._v("$ beachball change\n")])])]),a("h3",{attrs:{id:"options"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),a("p",[e._v("Some "),a("a",{attrs:{href:"./options"}},[e._v("general options")]),e._v(" including "),a("code",[e._v("--branch")]),e._v(" and "),a("code",[e._v("--scope")]),e._v(" also apply for this command.")]),e._v(" "),a("table",[a("thead",[a("tr",[a("th",[e._v("Option")]),e._v(" "),a("th",[e._v("Alias")]),e._v(" "),a("th",[e._v("Default")]),e._v(" "),a("th",[e._v("Description")])])]),e._v(" "),a("tbody",[a("tr",[a("td",[a("code",[e._v("--all")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("false")]),e._v(" "),a("td",[e._v("Generate change files for all packages")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--message")])]),e._v(" "),a("td",[a("code",[e._v("-m")])]),e._v(" "),a("td",[e._v("(interactive prompt)")]),e._v(" "),a("td",[e._v("Description for all change files")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--no-commit")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("false")]),e._v(" "),a("td",[e._v("Stage the change files rather than committing")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--package")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("(changed packages)")]),e._v(" "),a("td",[e._v("Generate change files for these packages (option can be specified multiple times)")])]),e._v(" "),a("tr",[a("td",[a("code",[e._v("--type")])]),e._v(" "),a("td"),e._v(" "),a("td",[e._v("(interactive prompt)")]),e._v(" "),a("td",[e._v("Type for all the change files (must be valid for each package)")])])])]),e._v(" "),a("h3",{attrs:{id:"examples"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#examples"}},[e._v("#")]),e._v(" Examples")]),e._v(" "),a("p",[e._v("Basic interactive prompt (see "),a("a",{attrs:{href:"#prompt-walkthrough"}},[e._v("walkthrough")]),e._v(" for details):")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change\n")])])]),a("p",[e._v("Skip the interactive prompt by specifying a message and type for all changed packages:")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change --type patch --message 'some message'\n")])])]),a("p",[e._v("Generate change file for specific package(s), regardless of changes, and even if a change file already exists for the package in this branch. Each package must be specified with a separate "),a("code",[e._v("--package")]),e._v(" option. (You can also use the "),a("code",[e._v("--message")]),e._v(" and "),a("code",[e._v("--type")]),e._v(" options here.)")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change --package foo --package bar\n")])])]),a("p",[e._v("Generate change files for all packages, regardless of changes. This would most often be used for build config updates which only touch a shared config file, but actually impact the output of all packages.")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("beachball change --all --type patch --message 'update build output settings'\n")])])]),a("h3",{attrs:{id:"prompt-walkthrough"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#prompt-walkthrough"}},[e._v("#")]),e._v(" Prompt walkthrough")]),e._v(" "),a("p",[e._v("If you have changes that are not committed yet (i.e. "),a("code",[e._v("git status")]),e._v(" reports changes), then "),a("code",[e._v("beachball change")]),e._v(" will warn you about these:")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('$ beachball change\nDefaults to "origin/master"\nThere are uncommitted changes in your repository. Please commit these files first:\n- a-new-file\n')])])]),a("p",[e._v("Make sure to commit "),a("em",[e._v("all")]),e._v(" changes before proceeding with the "),a("code",[e._v("change")]),e._v(" command.")]),e._v(" "),a("p",[e._v("After committing, run "),a("code",[e._v("beachball change")]),e._v(":")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v('$ beachball change\n\nValidating options and change files...\nChecking for changes against "origin/main"\nFound changes in the following packages:\n some-pkg\n')])])]),a("p",[e._v("For each package, the prompt will start by asking for a change "),a("strong",[e._v("type")]),e._v(". This should be chosen based on "),a("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semantic versioning rules"),a("OutboundLink")],1),e._v(" because it determines how to update the package version. If the change doesn't affect the published package at all (e.g. you just updated some comments), choose "),a("code",[e._v("none")]),e._v(".")]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("Please describe the changes for: some-pkg\n? Change type › - Use arrow-keys. Return to submit.\n❯ Patch - bug fixes; no backwards incompatible changes.\n Minor - small feature; backwards compatible changes.\n None - this change does not affect the published package in any way.\n Major - major feature; breaking changes.\n")])])]),a("p",[e._v("Next, it asks for a "),a("strong",[e._v("description")]),e._v(" of the change. You can type any text or choose from a list of recent commit messages.")]),e._v(" "),a("blockquote",[a("p",[e._v("Tip: These descriptions will be collated into a changelog when the change is published by "),a("code",[e._v("beachball publish")]),e._v(", so think about how to describe your change in a way that's helpful and relevant for consumers of the package.")])]),e._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[e._v("Please describe the changes for: some-pkg\n? Describe changes (type or choose one) ›\nadding a new file\n")])])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/25.5bcd9f4e.js b/assets/js/25.51777c8b.js similarity index 97% rename from assets/js/25.5bcd9f4e.js rename to assets/js/25.51777c8b.js index 3f2a761da..813233787 100644 --- a/assets/js/25.5bcd9f4e.js +++ b/assets/js/25.51777c8b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{313:function(e,t,a){"use strict";a.r(t);var s=a(10),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"check"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check"}},[e._v("#")]),e._v(" "),t("code",[e._v("check")])]),e._v(" "),t("p",[e._v("It's recommended to enforce that "),t("a",{attrs:{href:"../concepts/change-files"}},[e._v("change files")]),e._v(" are included with each PR. This way, all changes are captured and affect semver appropriately.")]),e._v(" "),t("p",[e._v("To ensure that all changes are captured in change files, simply run:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ beachball check\n")])])]),t("p",[e._v("This command also checks for misconfigurations that would result in problems when attempting to publish.")]),e._v(" "),t("h3",{attrs:{id:"options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"./options"}},[e._v("options page")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"where-should-check-be-run"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#where-should-check-be-run"}},[e._v("#")]),e._v(" Where should "),t("code",[e._v("check")]),e._v(" be run?")]),e._v(" "),t("h4",{attrs:{id:"as-a-step-in-the-pr-review-gate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#as-a-step-in-the-pr-review-gate"}},[e._v("#")]),e._v(" As a step in the PR review gate")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"../concepts/change-files#validating-change-files"}},[e._v("change files page")]),e._v(" for how to set this up.")]),e._v(" "),t("h4",{attrs:{id:"as-git-hook-optional"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#as-git-hook-optional"}},[e._v("#")]),e._v(" As git hook (optional)")]),e._v(" "),t("p",[e._v("For a reference about git hooks, take a look at "),t("a",{attrs:{href:"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks",target:"_blank",rel:"noopener noreferrer"}},[e._v("this documentation"),t("OutboundLink")],1),e._v(". This hook would typically be run pre-push.")]),e._v(" "),t("p",[e._v("While running "),t("code",[e._v("beachball check")]),e._v(" before push may seem appealing, it has some downsides: it will substantially slow down running "),t("code",[e._v("git push")]),e._v(" and could be annoying when pushing work-in-progress changes to remote branches. Our experience with repos enabling this hook is that it's often quickly removed due to developer feedback.")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{312:function(e,t,a){"use strict";a.r(t);var s=a(10),o=Object(s.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"check"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#check"}},[e._v("#")]),e._v(" "),t("code",[e._v("check")])]),e._v(" "),t("p",[e._v("It's recommended to enforce that "),t("a",{attrs:{href:"../concepts/change-files"}},[e._v("change files")]),e._v(" are included with each PR. This way, all changes are captured and affect semver appropriately.")]),e._v(" "),t("p",[e._v("To ensure that all changes are captured in change files, simply run:")]),e._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[e._v("$ beachball check\n")])])]),t("p",[e._v("This command also checks for misconfigurations that would result in problems when attempting to publish.")]),e._v(" "),t("h3",{attrs:{id:"options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"./options"}},[e._v("options page")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"where-should-check-be-run"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#where-should-check-be-run"}},[e._v("#")]),e._v(" Where should "),t("code",[e._v("check")]),e._v(" be run?")]),e._v(" "),t("h4",{attrs:{id:"as-a-step-in-the-pr-review-gate"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#as-a-step-in-the-pr-review-gate"}},[e._v("#")]),e._v(" As a step in the PR review gate")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"../concepts/change-files#validating-change-files"}},[e._v("change files page")]),e._v(" for how to set this up.")]),e._v(" "),t("h4",{attrs:{id:"as-git-hook-optional"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#as-git-hook-optional"}},[e._v("#")]),e._v(" As git hook (optional)")]),e._v(" "),t("p",[e._v("For a reference about git hooks, take a look at "),t("a",{attrs:{href:"https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks",target:"_blank",rel:"noopener noreferrer"}},[e._v("this documentation"),t("OutboundLink")],1),e._v(". This hook would typically be run pre-push.")]),e._v(" "),t("p",[e._v("While running "),t("code",[e._v("beachball check")]),e._v(" before push may seem appealing, it has some downsides: it will substantially slow down running "),t("code",[e._v("git push")]),e._v(" and could be annoying when pushing work-in-progress changes to remote branches. Our experience with repos enabling this hook is that it's often quickly removed due to developer feedback.")])])}),[],!1,null,null,null);t.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/26.e05ec0ca.js b/assets/js/26.18ceeb7f.js similarity index 98% rename from assets/js/26.e05ec0ca.js rename to assets/js/26.18ceeb7f.js index 36a6c0119..3c2082611 100644 --- a/assets/js/26.e05ec0ca.js +++ b/assets/js/26.18ceeb7f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{315:function(t,e,v){"use strict";v.r(e);var _=v(10),o=Object(_.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"beachball-cli-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#beachball-cli-options"}},[t._v("#")]),t._v(" Beachball CLI Options")]),t._v(" "),e("p",[t._v("For the latest full list of supported options, see "),e("code",[t._v("CliOptions")]),t._v(" "),e("a",{attrs:{href:"https://github.com/microsoft/beachball/blob/master/src/types/BeachballOptions.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("in this file"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"general-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#general-options"}},[t._v("#")]),t._v(" General options")]),t._v(" "),e("p",[t._v("These apply to most CLI commands.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Option")]),t._v(" "),e("th",[t._v("Alias")]),t._v(" "),e("th",[t._v("Default")]),t._v(" "),e("th",[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("--branch")])]),t._v(" "),e("td",[e("code",[t._v("-b")])]),t._v(" "),e("td",[t._v("Detected default branch in default remote, falling back to "),e("code",[t._v("'origin/master'")])]),t._v(" "),e("td",[t._v("target branch from origin")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--no-fetch")])]),t._v(" "),e("td"),t._v(" "),e("td"),t._v(" "),e("td",[t._v("Disable fetching")])])])]),t._v(" "),e("h2",{attrs:{id:"change-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-options"}},[t._v("#")]),t._v(" "),e("code",[t._v("change")]),t._v(" options")]),t._v(" "),e("p",[t._v("See the "),e("a",{attrs:{href:"./change"}},[e("code",[t._v("change")]),t._v(" page")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"bumping-and-publishing-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bumping-and-publishing-options"}},[t._v("#")]),t._v(" Bumping and publishing options")]),t._v(" "),e("p",[t._v("These options are applicable for the "),e("code",[t._v("publish")]),t._v(" command, as well as "),e("code",[t._v("bump")]),t._v(" and/or "),e("code",[t._v("canary")]),t._v(" in some cases.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Option")]),t._v(" "),e("th",[t._v("Alias")]),t._v(" "),e("th",[t._v("Default")]),t._v(" "),e("th",[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("--authType")])]),t._v(" "),e("td",[e("code",[t._v("-a")])]),t._v(" "),e("td",[e("code",[t._v("'authtoken'")])]),t._v(" "),e("td",[t._v("type of token argument, affecting how it is applied to npm commands.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--message")])]),t._v(" "),e("td",[e("code",[t._v("-m")])]),t._v(" "),e("td",[e("code",[t._v("'applying package updates'")])]),t._v(" "),e("td",[t._v("custom message for the checkin")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--git-tags")]),t._v(", "),e("code",[t._v("--no-git-tags")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("true")]),t._v(" ("),e("code",[t._v("--git-tags")]),t._v(")")]),t._v(" "),e("td",[t._v("whether to create git tags for published packages")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--publish")]),t._v(", "),e("code",[t._v("--no-publish")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("true")]),t._v(" ("),e("code",[t._v("--publish")]),t._v(")")]),t._v(" "),e("td",[t._v("whether to publish to the npm registry")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--push")]),t._v(", "),e("code",[t._v("--no-push")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("true")]),t._v(" ("),e("code",[t._v("--push")]),t._v(")")]),t._v(" "),e("td",[t._v("whether to push changes back to git remote origin")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--prerelease-prefix")])]),t._v(" "),e("td"),t._v(" "),e("td"),t._v(" "),e("td",[t._v("prerelease prefix for packages that are specified to receive a prerelease bump ("),e("code",[t._v("--prerelease-prefix beta")]),t._v(" makes the "),e("code",[t._v("x.y.z-beta")]),t._v(" version)")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--registry")])]),t._v(" "),e("td",[e("code",[t._v("-r")])]),t._v(" "),e("td",[e("code",[t._v("'https://registry.npmjs.org'")])]),t._v(" "),e("td",[t._v("npm registry for publishing")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--retries")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("3")])]),t._v(" "),e("td",[t._v("number of retries for a package publish before failing")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--tag")])]),t._v(" "),e("td",[e("code",[t._v("-t")])]),t._v(" "),e("td",[e("code",[t._v("'latest'")])]),t._v(" "),e("td",[t._v("dist-tag for npm publishes")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--token")])]),t._v(" "),e("td",[e("code",[t._v("-n")])]),t._v(" "),e("td"),t._v(" "),e("td",[t._v("credential to use with npm commands. its type is specified with the "),e("code",[t._v("--authType")]),t._v(" argument")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--verbose")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("false")])]),t._v(" "),e("td",[t._v("prints additional information to the console")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--yes")])]),t._v(" "),e("td",[e("code",[t._v("-y")])]),t._v(" "),e("td",[t._v("if CI detected, "),e("code",[t._v("true")])]),t._v(" "),e("td",[t._v("skips the prompts for publish")])])])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{313:function(t,e,v){"use strict";v.r(e);var _=v(10),o=Object(_.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"beachball-cli-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#beachball-cli-options"}},[t._v("#")]),t._v(" Beachball CLI Options")]),t._v(" "),e("p",[t._v("For the latest full list of supported options, see "),e("code",[t._v("CliOptions")]),t._v(" "),e("a",{attrs:{href:"https://github.com/microsoft/beachball/blob/master/src/types/BeachballOptions.ts",target:"_blank",rel:"noopener noreferrer"}},[t._v("in this file"),e("OutboundLink")],1),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"general-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#general-options"}},[t._v("#")]),t._v(" General options")]),t._v(" "),e("p",[t._v("These apply to most CLI commands.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Option")]),t._v(" "),e("th",[t._v("Alias")]),t._v(" "),e("th",[t._v("Default")]),t._v(" "),e("th",[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("--branch")])]),t._v(" "),e("td",[e("code",[t._v("-b")])]),t._v(" "),e("td",[t._v("Detected default branch in default remote, falling back to "),e("code",[t._v("'origin/master'")])]),t._v(" "),e("td",[t._v("target branch from origin")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--no-fetch")])]),t._v(" "),e("td"),t._v(" "),e("td"),t._v(" "),e("td",[t._v("Disable fetching")])])])]),t._v(" "),e("h2",{attrs:{id:"change-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#change-options"}},[t._v("#")]),t._v(" "),e("code",[t._v("change")]),t._v(" options")]),t._v(" "),e("p",[t._v("See the "),e("a",{attrs:{href:"./change"}},[e("code",[t._v("change")]),t._v(" page")]),t._v(".")]),t._v(" "),e("h2",{attrs:{id:"bumping-and-publishing-options"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#bumping-and-publishing-options"}},[t._v("#")]),t._v(" Bumping and publishing options")]),t._v(" "),e("p",[t._v("These options are applicable for the "),e("code",[t._v("publish")]),t._v(" command, as well as "),e("code",[t._v("bump")]),t._v(" and/or "),e("code",[t._v("canary")]),t._v(" in some cases.")]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("Option")]),t._v(" "),e("th",[t._v("Alias")]),t._v(" "),e("th",[t._v("Default")]),t._v(" "),e("th",[t._v("Description")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[e("code",[t._v("--authType")])]),t._v(" "),e("td",[e("code",[t._v("-a")])]),t._v(" "),e("td",[e("code",[t._v("'authtoken'")])]),t._v(" "),e("td",[t._v("type of token argument, affecting how it is applied to npm commands.")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--message")])]),t._v(" "),e("td",[e("code",[t._v("-m")])]),t._v(" "),e("td",[e("code",[t._v("'applying package updates'")])]),t._v(" "),e("td",[t._v("custom message for the checkin")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--git-tags")]),t._v(", "),e("code",[t._v("--no-git-tags")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("true")]),t._v(" ("),e("code",[t._v("--git-tags")]),t._v(")")]),t._v(" "),e("td",[t._v("whether to create git tags for published packages")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--publish")]),t._v(", "),e("code",[t._v("--no-publish")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("true")]),t._v(" ("),e("code",[t._v("--publish")]),t._v(")")]),t._v(" "),e("td",[t._v("whether to publish to the npm registry")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--push")]),t._v(", "),e("code",[t._v("--no-push")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("true")]),t._v(" ("),e("code",[t._v("--push")]),t._v(")")]),t._v(" "),e("td",[t._v("whether to push changes back to git remote origin")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--prerelease-prefix")])]),t._v(" "),e("td"),t._v(" "),e("td"),t._v(" "),e("td",[t._v("prerelease prefix for packages that are specified to receive a prerelease bump ("),e("code",[t._v("--prerelease-prefix beta")]),t._v(" makes the "),e("code",[t._v("x.y.z-beta")]),t._v(" version)")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--registry")])]),t._v(" "),e("td",[e("code",[t._v("-r")])]),t._v(" "),e("td",[e("code",[t._v("'https://registry.npmjs.org'")])]),t._v(" "),e("td",[t._v("npm registry for publishing")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--retries")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("3")])]),t._v(" "),e("td",[t._v("number of retries for a package publish before failing")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--tag")])]),t._v(" "),e("td",[e("code",[t._v("-t")])]),t._v(" "),e("td",[e("code",[t._v("'latest'")])]),t._v(" "),e("td",[t._v("dist-tag for npm publishes")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--token")])]),t._v(" "),e("td",[e("code",[t._v("-n")])]),t._v(" "),e("td"),t._v(" "),e("td",[t._v("credential to use with npm commands. its type is specified with the "),e("code",[t._v("--authType")]),t._v(" argument")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--verbose")])]),t._v(" "),e("td"),t._v(" "),e("td",[e("code",[t._v("false")])]),t._v(" "),e("td",[t._v("prints additional information to the console")])]),t._v(" "),e("tr",[e("td",[e("code",[t._v("--yes")])]),t._v(" "),e("td",[e("code",[t._v("-y")])]),t._v(" "),e("td",[t._v("if CI detected, "),e("code",[t._v("true")])]),t._v(" "),e("td",[t._v("skips the prompts for publish")])])])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/27.7e4bacc0.js b/assets/js/27.b8c66699.js similarity index 98% rename from assets/js/27.7e4bacc0.js rename to assets/js/27.b8c66699.js index d98892588..bdb2b7805 100644 --- a/assets/js/27.7e4bacc0.js +++ b/assets/js/27.b8c66699.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{312:function(e,t,s){"use strict";s.r(t);var a=s(10),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"publish"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#publish"}},[e._v("#")]),e._v(" "),t("code",[e._v("publish")])]),e._v(" "),t("p",[e._v("Publishing automates all the bumping and synchronizing of package versions in the git remote as well as the npm registry.")]),e._v(" "),t("h3",{attrs:{id:"options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"./options"}},[e._v("options page")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"algorithm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#algorithm"}},[e._v("#")]),e._v(" Algorithm")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("publish")]),e._v(" command is designed to run steps in an order that minimizes the chances of mid-publish failure by doing validation upfront.")]),e._v(" "),t("p",[t("code",[e._v("beachball publish")]),e._v(" performs the following steps:")]),e._v(" "),t("ol",[t("li",[e._v("Validate that options and change files are valid")]),e._v(" "),t("li",[e._v("Bump and publish to npm (unless disabled):\n"),t("ol",[t("li",[e._v("Bump the package versions locally")]),e._v(" "),t("li",[e._v("Generate the changelog files (unless disabled)")]),e._v(" "),t("li",[e._v("Delete change files locally (unless disabled)")]),e._v(" "),t("li",[e._v("Validate that nothing to be published depends on a private package")]),e._v(" "),t("li",[e._v("Publish packages to npm in topological order based on the dependency graph (to reduce the chances that if there's a failure partway through, a published package might require unpublished versions)")])])]),e._v(" "),t("li",[e._v("Bump and push to git (unless bumping or pushing is disabled):\n"),t("ol",[t("li",[e._v("Revert any previous changes (from the publish step)")]),e._v(" "),t("li",[e._v("Merge the latest changes from the remote branch to avoid merge conflicts (unless fetching is disabled)")]),e._v(" "),t("li",[e._v("Bump the versions locally")]),e._v(" "),t("li",[e._v("Generate the changelog files (unless disabled)")]),e._v(" "),t("li",[e._v("Delete change files locally (unless disabled)")]),e._v(" "),t("li",[e._v("Commit the changes")]),e._v(" "),t("li",[e._v("Create git tags for new package versions (unless disabled)")]),e._v(" "),t("li",[e._v("Push the changes and tags")])])])]),e._v(" "),t("p",[e._v("It might be surprising that "),t("code",[e._v("beachball publish")]),e._v(" does so many steps, especially the step about reverting changes! In most version bumping systems that automate syncing the git repo and npm registry, they assume that the source code is still fresh once it's time to push changes back to the git repository. This is rarely the case for large repos with many developers. So, "),t("code",[e._v("beachball")]),e._v(" fetches the latest changes before pushing back to the target branch to avoid merge conflicts.")]),e._v(" "),t("h3",{attrs:{id:"example-ci-workflow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-ci-workflow"}},[e._v("#")]),e._v(" Example CI workflow")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"../concepts/ci-integration"}},[e._v("CI integration page")]),e._v(" details and examples for how to run "),t("code",[e._v("beachball publish")]),e._v(" in CI.")]),e._v(" "),t("h3",{attrs:{id:"recovering-from-failed-publish"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recovering-from-failed-publish"}},[e._v("#")]),e._v(" Recovering from failed publish")]),e._v(" "),t("p",[e._v("If the "),t("code",[e._v("publish")]),e._v(" command fails partway through, after some versions have been published to the registry, you'll need to run "),t("a",{attrs:{href:"./sync"}},[t("code",[e._v("beachball sync")])]),e._v(" and commit the changes.")])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{311:function(e,t,s){"use strict";s.r(t);var a=s(10),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"publish"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#publish"}},[e._v("#")]),e._v(" "),t("code",[e._v("publish")])]),e._v(" "),t("p",[e._v("Publishing automates all the bumping and synchronizing of package versions in the git remote as well as the npm registry.")]),e._v(" "),t("h3",{attrs:{id:"options"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#options"}},[e._v("#")]),e._v(" Options")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"./options"}},[e._v("options page")]),e._v(".")]),e._v(" "),t("h3",{attrs:{id:"algorithm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#algorithm"}},[e._v("#")]),e._v(" Algorithm")]),e._v(" "),t("p",[e._v("The "),t("code",[e._v("publish")]),e._v(" command is designed to run steps in an order that minimizes the chances of mid-publish failure by doing validation upfront.")]),e._v(" "),t("p",[t("code",[e._v("beachball publish")]),e._v(" performs the following steps:")]),e._v(" "),t("ol",[t("li",[e._v("Validate that options and change files are valid")]),e._v(" "),t("li",[e._v("Bump and publish to npm (unless disabled):\n"),t("ol",[t("li",[e._v("Bump the package versions locally")]),e._v(" "),t("li",[e._v("Generate the changelog files (unless disabled)")]),e._v(" "),t("li",[e._v("Delete change files locally (unless disabled)")]),e._v(" "),t("li",[e._v("Validate that nothing to be published depends on a private package")]),e._v(" "),t("li",[e._v("Publish packages to npm in topological order based on the dependency graph (to reduce the chances that if there's a failure partway through, a published package might require unpublished versions)")])])]),e._v(" "),t("li",[e._v("Bump and push to git (unless bumping or pushing is disabled):\n"),t("ol",[t("li",[e._v("Revert any previous changes (from the publish step)")]),e._v(" "),t("li",[e._v("Merge the latest changes from the remote branch to avoid merge conflicts (unless fetching is disabled)")]),e._v(" "),t("li",[e._v("Bump the versions locally")]),e._v(" "),t("li",[e._v("Generate the changelog files (unless disabled)")]),e._v(" "),t("li",[e._v("Delete change files locally (unless disabled)")]),e._v(" "),t("li",[e._v("Commit the changes")]),e._v(" "),t("li",[e._v("Create git tags for new package versions (unless disabled)")]),e._v(" "),t("li",[e._v("Push the changes and tags")])])])]),e._v(" "),t("p",[e._v("It might be surprising that "),t("code",[e._v("beachball publish")]),e._v(" does so many steps, especially the step about reverting changes! In most version bumping systems that automate syncing the git repo and npm registry, they assume that the source code is still fresh once it's time to push changes back to the git repository. This is rarely the case for large repos with many developers. So, "),t("code",[e._v("beachball")]),e._v(" fetches the latest changes before pushing back to the target branch to avoid merge conflicts.")]),e._v(" "),t("h3",{attrs:{id:"example-ci-workflow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#example-ci-workflow"}},[e._v("#")]),e._v(" Example CI workflow")]),e._v(" "),t("p",[e._v("See the "),t("a",{attrs:{href:"../concepts/ci-integration"}},[e._v("CI integration page")]),e._v(" details and examples for how to run "),t("code",[e._v("beachball publish")]),e._v(" in CI.")]),e._v(" "),t("h3",{attrs:{id:"recovering-from-failed-publish"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#recovering-from-failed-publish"}},[e._v("#")]),e._v(" Recovering from failed publish")]),e._v(" "),t("p",[e._v("If the "),t("code",[e._v("publish")]),e._v(" command fails partway through, after some versions have been published to the registry, you'll need to run "),t("a",{attrs:{href:"./sync"}},[t("code",[e._v("beachball sync")])]),e._v(" and commit the changes.")])])}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/30.865896fb.js b/assets/js/30.f30b4679.js similarity index 99% rename from assets/js/30.865896fb.js rename to assets/js/30.f30b4679.js index 94b71d693..8a677a643 100644 --- a/assets/js/30.865896fb.js +++ b/assets/js/30.f30b4679.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{316:function(e,a,t){"use strict";t.r(a);var s=t(10),n=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"change-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#change-files"}},[e._v("#")]),e._v(" Change Files")]),e._v(" "),a("p",[e._v("There are "),a("a",{attrs:{href:"https://semantic-release.gitbook.io/semantic-release/",target:"_blank"}},[e._v("very popular")]),e._v(" and excellent packages available which manage package versioning based on commit messages. "),a("code",[e._v("beachball")]),e._v(" works differently, using something called a "),a("strong",[e._v("change file")]),e._v(".")]),e._v(" "),a("h2",{attrs:{id:"what-is-a-change-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-change-file"}},[e._v("#")]),e._v(" What is a change file?")]),e._v(" "),a("p",[e._v("Change files are generated by the "),a("code",[e._v("beachball change")]),e._v(" command and live under the "),a("code",[e._v("/change")]),e._v(" folder. They look something like this:")]),e._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"comment"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upgrading React to 16.8.x to use hooks"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"minor"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"packageName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"my-amazing-app"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"me@me.me"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),a("p",[a("code",[e._v("beachball")]),e._v(" then uses the change files during publishing to determine how to bump package versions, and what content should be in the changelog.")]),e._v(" "),a("p",[e._v("The advantage of using "),a("code",[e._v(".json")]),e._v(" files rather than commit messages is that it's very easy to see visual diffs of these files in a PR, so reviewers can verify that the change type and message are correct.")]),e._v(" "),a("p",[e._v("For example, a reviewer might remind the author that a certain new API has been introduced and that the change ought to be a minor. The author can then modify the change file without having to amend history of a commit!")]),e._v(" "),a("h2",{attrs:{id:"generating-a-change-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#generating-a-change-file"}},[e._v("#")]),e._v(" Generating a change file")]),e._v(" "),a("p",[e._v("After making some commits, it's time to create a change file. Change files are generated with the "),a("code",[e._v("beachball change")]),e._v(" command. (In a monorepo, this should only be run at the repo root.)")]),e._v(" "),a("p",[e._v("Assuming you've defined the "),a("code",[e._v("change")]),e._v(" wrapper script suggested on the "),a("a",{attrs:{href:"../overview/installation"}},[e._v("installation page")]),e._v(", run one of the following commands:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for npm")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run change\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for yarn")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" change\n")])])]),a("p",[e._v("If you don't already have a change file for this branch and package, it will ask you to enter a description and a change type (in a monorepo, it will ask for each changed package).")]),e._v(" "),a("ul",[a("li",[e._v("For the "),a("strong",[e._v("description")]),e._v(", "),a("code",[e._v("beachball")]),e._v(" will provide a list of recent commit messages to choose from, or you can type a custom message.")]),e._v(" "),a("li",[e._v("Choose the correct "),a("strong",[e._v("type")]),e._v(" using "),a("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semantic versioning rules"),a("OutboundLink")],1),e._v(".")])]),e._v(" "),a("p",[e._v("After you've answered those questions, a change file similar to the example above is created and committed in your branch under "),a("code",[e._v("/change")]),e._v(".")]),e._v(" "),a("p",[e._v("If you prefer, you can specify the change type and message on the command line. (In a monorepo, the specified type and message will be used for all changed packages.)")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for npm")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run change -- "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--type")]),e._v(" minor "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--message")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upgrading React to 16.8.x to use hooks"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for yarn")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" change "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--type")]),e._v(" minor "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--message")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upgrading React to 16.8.x to use hooks"')]),e._v("\n")])])]),a("h2",{attrs:{id:"validating-change-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validating-change-files"}},[e._v("#")]),e._v(" Validating change files")]),e._v(" "),a("p",[e._v("Your PR build should include a step that calls "),a("code",[e._v("beachball check")]),e._v(" to validate that change files are included.")]),e._v(" "),a("p",[e._v("Assuming you've defined the "),a("code",[e._v("checkchange")]),e._v(" wrapper script suggested on the "),a("a",{attrs:{href:"../overview/installation"}},[e._v("installation page")]),e._v(", add a step to your PR build as follows.")]),e._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# For GitHub Actions:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With npm:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run checkchange\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With yarn:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" yarn checkchange\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# For Azure Pipelines:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With npm:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run checkchange\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With yarn:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" yarn checkchange\n")])])]),a("p",[e._v("An alternative if desired is to define a separate required workflow/pipeline which skips the main install step and only runs "),a("code",[e._v("npx beachball check")]),e._v(". This has the advantage of providing faster validation and not blocking the main PR build (and hiding any later build/test/lint errors) simply for missing change files.")]),e._v(" "),a("p",[e._v("To prevent change files from being required for changes that will never affect the published package (such as tests, snapshots, or certain config files), use the "),a("a",{attrs:{href:"../overview/configuration#options"}},[a("code",[e._v("ignorePatterns")]),e._v(" option")]),e._v(".")]),e._v(" "),a("blockquote",[a("p",[e._v("Note: In the past, it was necessary to check out the repo's whole history for "),a("code",[e._v("beachball check")]),e._v(" to work properly (such as setting "),a("code",[e._v("fetch-depth: 0")]),e._v(" in "),a("code",[e._v("actions/checkout")]),e._v(" for GitHub workflows). This should no longer be needed because if "),a("code",[e._v("beachball")]),e._v(" detects a shallow clone, it will automatically fetch more history, and exit with an error if the current branch and target branch don't appear to share history.")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{315:function(e,a,t){"use strict";t.r(a);var s=t(10),n=Object(s.a)({},(function(){var e=this,a=e._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h1",{attrs:{id:"change-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#change-files"}},[e._v("#")]),e._v(" Change Files")]),e._v(" "),a("p",[e._v("There are "),a("a",{attrs:{href:"https://semantic-release.gitbook.io/semantic-release/",target:"_blank"}},[e._v("very popular")]),e._v(" and excellent packages available which manage package versioning based on commit messages. "),a("code",[e._v("beachball")]),e._v(" works differently, using something called a "),a("strong",[e._v("change file")]),e._v(".")]),e._v(" "),a("h2",{attrs:{id:"what-is-a-change-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#what-is-a-change-file"}},[e._v("#")]),e._v(" What is a change file?")]),e._v(" "),a("p",[e._v("Change files are generated by the "),a("code",[e._v("beachball change")]),e._v(" command and live under the "),a("code",[e._v("/change")]),e._v(" folder. They look something like this:")]),e._v(" "),a("div",{staticClass:"language-json extra-class"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"comment"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upgrading React to 16.8.x to use hooks"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"minor"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"packageName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"my-amazing-app"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(",")]),e._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[e._v('"email"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"me@me.me"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),a("p",[a("code",[e._v("beachball")]),e._v(" then uses the change files during publishing to determine how to bump package versions, and what content should be in the changelog.")]),e._v(" "),a("p",[e._v("The advantage of using "),a("code",[e._v(".json")]),e._v(" files rather than commit messages is that it's very easy to see visual diffs of these files in a PR, so reviewers can verify that the change type and message are correct.")]),e._v(" "),a("p",[e._v("For example, a reviewer might remind the author that a certain new API has been introduced and that the change ought to be a minor. The author can then modify the change file without having to amend history of a commit!")]),e._v(" "),a("h2",{attrs:{id:"generating-a-change-file"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#generating-a-change-file"}},[e._v("#")]),e._v(" Generating a change file")]),e._v(" "),a("p",[e._v("After making some commits, it's time to create a change file. Change files are generated with the "),a("code",[e._v("beachball change")]),e._v(" command. (In a monorepo, this should only be run at the repo root.)")]),e._v(" "),a("p",[e._v("Assuming you've defined the "),a("code",[e._v("change")]),e._v(" wrapper script suggested on the "),a("a",{attrs:{href:"../overview/installation"}},[e._v("installation page")]),e._v(", run one of the following commands:")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for npm")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run change\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for yarn")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" change\n")])])]),a("p",[e._v("If you don't already have a change file for this branch and package, it will ask you to enter a description and a change type (in a monorepo, it will ask for each changed package).")]),e._v(" "),a("ul",[a("li",[e._v("For the "),a("strong",[e._v("description")]),e._v(", "),a("code",[e._v("beachball")]),e._v(" will provide a list of recent commit messages to choose from, or you can type a custom message.")]),e._v(" "),a("li",[e._v("Choose the correct "),a("strong",[e._v("type")]),e._v(" using "),a("a",{attrs:{href:"https://semver.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("semantic versioning rules"),a("OutboundLink")],1),e._v(".")])]),e._v(" "),a("p",[e._v("After you've answered those questions, a change file similar to the example above is created and committed in your branch under "),a("code",[e._v("/change")]),e._v(".")]),e._v(" "),a("p",[e._v("If you prefer, you can specify the change type and message on the command line. (In a monorepo, the specified type and message will be used for all changed packages.)")]),e._v(" "),a("div",{staticClass:"language-bash extra-class"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for npm")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("npm")]),e._v(" run change -- "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--type")]),e._v(" minor "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--message")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upgrading React to 16.8.x to use hooks"')]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# for yarn")]),e._v("\n$ "),a("span",{pre:!0,attrs:{class:"token function"}},[e._v("yarn")]),e._v(" change "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--type")]),e._v(" minor "),a("span",{pre:!0,attrs:{class:"token parameter variable"}},[e._v("--message")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[e._v('"Upgrading React to 16.8.x to use hooks"')]),e._v("\n")])])]),a("h2",{attrs:{id:"validating-change-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#validating-change-files"}},[e._v("#")]),e._v(" Validating change files")]),e._v(" "),a("p",[e._v("Your PR build should include a step that calls "),a("code",[e._v("beachball check")]),e._v(" to validate that change files are included.")]),e._v(" "),a("p",[e._v("Assuming you've defined the "),a("code",[e._v("checkchange")]),e._v(" wrapper script suggested on the "),a("a",{attrs:{href:"../overview/installation"}},[e._v("installation page")]),e._v(", add a step to your PR build as follows.")]),e._v(" "),a("div",{staticClass:"language-yml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# For GitHub Actions:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With npm:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run checkchange\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With yarn:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" yarn checkchange\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# For Azure Pipelines:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With npm:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run checkchange\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[e._v("### With yarn:")]),e._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),a("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" yarn checkchange\n")])])]),a("p",[e._v("An alternative if desired is to define a separate required workflow/pipeline which skips the main install step and only runs "),a("code",[e._v("npx beachball check")]),e._v(". This has the advantage of providing faster validation and not blocking the main PR build (and hiding any later build/test/lint errors) simply for missing change files.")]),e._v(" "),a("p",[e._v("To prevent change files from being required for changes that will never affect the published package (such as tests, snapshots, or certain config files), use the "),a("a",{attrs:{href:"../overview/configuration#options"}},[a("code",[e._v("ignorePatterns")]),e._v(" option")]),e._v(".")]),e._v(" "),a("blockquote",[a("p",[e._v("Note: In the past, it was necessary to check out the repo's whole history for "),a("code",[e._v("beachball check")]),e._v(" to work properly (such as setting "),a("code",[e._v("fetch-depth: 0")]),e._v(" in "),a("code",[e._v("actions/checkout")]),e._v(" for GitHub workflows). This should no longer be needed because if "),a("code",[e._v("beachball")]),e._v(" detects a shallow clone, it will automatically fetch more history, and exit with an error if the current branch and target branch don't appear to share history.")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/31.3b2d72a8.js b/assets/js/31.77c50f29.js similarity index 99% rename from assets/js/31.3b2d72a8.js rename to assets/js/31.77c50f29.js index cce463174..b98134d5b 100644 --- a/assets/js/31.3b2d72a8.js +++ b/assets/js/31.77c50f29.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{320:function(e,t,s){"use strict";s.r(t);var n=s(10),a=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ci-integration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ci-integration"}},[e._v("#")]),e._v(" CI Integration")]),e._v(" "),t("p",[e._v("There are two parts to CI integration with "),t("code",[e._v("beachball")]),e._v(":")]),e._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"./change-files#validating-change-files"}},[e._v("Add a PR build step")]),e._v(" to call "),t("code",[e._v("beachball check")]),e._v(" to validate that change files are included.")]),e._v(" "),t("li",[e._v("Add a release build step to call "),t("code",[e._v("beachball publish")]),e._v(" to publish to npm and push back to git (this page).")])]),e._v(" "),t("p",[e._v("To automate the bumping of package versions based on change files, you'll need to configure your release workflow/pipeline so that "),t("code",[e._v("beachball publish")]),e._v(" has write access to the git repo and npm registry. The exact steps will vary between CI systems, but general concepts as well as steps for some common setups are outlined below.")]),e._v(" "),t("h2",{attrs:{id:"authentication"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#authentication"}},[e._v("#")]),e._v(" Authentication")]),e._v(" "),t("p",[e._v("Automated publishing from a GitHub repo to the public npm registry ("),t("code",[e._v("registry.npmjs.org")]),e._v(") typically uses personal access tokens for authentication. These tokens are stored as secrets in your CI system. You should ensure that these secrets are only available to release builds.")]),e._v(" "),t("p",[e._v("For Azure DevOps repos publishing to a private registry, there are other possible approaches (such as using a service account with credentials stored in a key vault) which are not currently covered by these docs.")]),e._v(" "),t("h3",{attrs:{id:"generating-tokens"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#generating-tokens"}},[e._v("#")]),e._v(" Generating tokens")]),e._v(" "),t("h4",{attrs:{id:"npm-token"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#npm-token"}},[e._v("#")]),e._v(" npm token")]),e._v(" "),t("p",[e._v("If publishing to the public npm registry ("),t("code",[e._v("registry.npmjs.org")]),e._v("), "),t("a",{attrs:{href:"https://docs.npmjs.com/creating-and-viewing-access-tokens#creating-granular-access-tokens-on-the-website",target:"_blank",rel:"noopener noreferrer"}},[e._v("create a granular access token"),t("OutboundLink")],1),e._v(" with write access to only the relevant package(s) and/or scope(s). Classic automation tokens are not recommended due to their overly broad permissions.")]),e._v(" "),t("h4",{attrs:{id:"github-token"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github-token"}},[e._v("#")]),e._v(" GitHub token")]),e._v(" "),t("p",[e._v("You should use "),t("a",{attrs:{href:"https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule",target:"_blank",rel:"noopener noreferrer"}},[e._v("branch protection"),t("OutboundLink")],1),e._v(" for your "),t("code",[e._v("main")]),e._v("/"),t("code",[e._v("master")]),e._v(" branch, but this creates some difficulties for pushing changes back during automated publishing.")]),e._v(" "),t("p",[e._v("The main way to allow "),t("code",[e._v("beachball")]),e._v(" to push back to a repo with branch protections is by using a "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#personal-access-tokens-classic",target:"_blank",rel:"noopener noreferrer"}},[e._v("classic personal access token"),t("OutboundLink")],1),e._v(" with "),t("code",[e._v("repo")]),e._v(" permissions. (If the repo is part of an organization that uses SAML single sign-on (SSO), be sure to "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on",target:"_blank",rel:"noopener noreferrer"}},[e._v("authorize the token for SSO access"),t("OutboundLink")],1),e._v(".) Since classic PATs have broad permissions, they must only be accessible to release builds—"),t("a",{attrs:{href:"#storing-tokens"}},[e._v("instructions below")]),e._v(".")]),e._v(" "),t("p",[e._v('An alternative approach is creating a classic PAT with a "machine user" account. Create a new account with an alternate email or '),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Email_address#Subaddressing",target:"_blank",rel:"noopener noreferrer"}},[e._v("subaddress"),t("OutboundLink")],1),e._v(" ("),t("code",[e._v("+")]),e._v(' address), give it contributor permissions to only this repo, and add it under "Restrict who can push to matching branches" in the branch protection rule.')]),e._v(" "),t("p",[e._v("(It's unclear if/when branch policy bypass support will be added for "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-fine-grained-personal-access-token",target:"_blank",rel:"noopener noreferrer"}},[e._v("fine-grained PATs"),t("OutboundLink")],1),e._v("; it's been "),t("a",{attrs:{href:"https://github.com/community/community/discussions/36441?sort=top#discussioncomment-4602435",target:"_blank",rel:"noopener noreferrer"}},[e._v("requested"),t("OutboundLink")],1),e._v(" by users with no response and doesn't seem to be on the "),t("a",{attrs:{href:"https://github.com/orgs/github/projects/4247/views/1",target:"_blank",rel:"noopener noreferrer"}},[e._v("public roadmap"),t("OutboundLink")],1),e._v(". The "),t("a",{attrs:{href:"https://docs.github.com/en/actions/security-guides/automatic-token-authentication",target:"_blank",rel:"noopener noreferrer"}},[e._v("built-in "),t("code",[e._v("GITHUB_TOKEN")]),t("OutboundLink")],1),e._v(" won't work for the same reason.)")]),e._v(" "),t("h3",{attrs:{id:"storing-tokens"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#storing-tokens"}},[e._v("#")]),e._v(" Storing tokens")]),e._v(" "),t("h4",{attrs:{id:"secrets-github-actions"}},[e._v("GitHub Actions")]),e._v(" "),t("p",[e._v("To restrict secret access to appropriate branches, use an "),t("strong",[t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment",target:"_blank",rel:"noopener noreferrer"}},[e._v("environment"),t("OutboundLink")],1)]),e._v(". (The docs for environments focus on cloud deployments or resources, but environments can also be used only for secret storage.)")]),e._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment",target:"_blank",rel:"noopener noreferrer"}},[e._v("Create an environment"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Restrict "),t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-branches",target:"_blank",rel:"noopener noreferrer"}},[e._v("deployment branches"),t("OutboundLink")],1),e._v(' to "Selected branches" and add a rule to allow only your release branch(es) (often '),t("code",[e._v("main")]),e._v("/"),t("code",[e._v("master")]),e._v(").")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-an-environment",target:"_blank",rel:"noopener noreferrer"}},[e._v("Add secrets"),t("OutboundLink")],1),e._v(" for the npm and GitHub tokens.")]),e._v(" "),t("li",[e._v("To "),t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment",target:"_blank",rel:"noopener noreferrer"}},[e._v("use the environment"),t("OutboundLink")],1),e._v(", add a key "),t("code",[e._v("environment: your-env-name")]),e._v(" in your release workflow job. (Full example below.)")])]),e._v(" "),t("h4",{attrs:{id:"secrets-azure-pipelines"}},[e._v("Azure Pipelines")]),e._v(" "),t("p",[e._v("There are a couple of options here:")]),e._v(" "),t("ul",[t("li",[e._v("Use "),t("a",{attrs:{href:"https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#secret-variables",target:"_blank",rel:"noopener noreferrer"}},[e._v("secret variables in your release pipeline"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Use "),t("a",{attrs:{href:"https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=classic",target:"_blank",rel:"noopener noreferrer"}},[e._v("secrets in a variable group"),t("OutboundLink")],1),e._v(", which can optionally be linked to a key vault. Ensure that this variable group is only accessible to your release pipeline.")])]),e._v(" "),t("h2",{attrs:{id:"setting-options-for-publishing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-options-for-publishing"}},[e._v("#")]),e._v(" Setting options for publishing")]),e._v(" "),t("p",[e._v("If you're passing any custom options besides the npm token to "),t("code",[e._v("beachball publish")]),e._v(", it's recommended to set them in either the "),t("code",[e._v("beachball")]),e._v(" config (if they don't interfere with other commands), or a "),t("code",[e._v("package.json")]),e._v(" script (if specific to "),t("code",[e._v("publish")]),e._v(").")]),e._v(" "),t("p",[e._v("For example, the following script could be used for publishing public scoped packages:")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"release"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"beachball publish --access public"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("If you're publishing to a private feed, "),t("code",[e._v("registry")]),e._v(" should be set in the overall "),t("code",[e._v("beachball")]),e._v(" config, since it's also used by the "),t("code",[e._v("sync")]),e._v(" command. For example, if your beachball config is in the root "),t("code",[e._v("package.json")]),e._v(" (or it works the same in a config file):")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"beachball"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"registry"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://pkgs.dev.azure.com/some-org/_packaging/some-feed/npm/registry/"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h2",{attrs:{id:"publishing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#publishing"}},[e._v("#")]),e._v(" Publishing")]),e._v(" "),t("p",[e._v("The exact publishing setup will vary depending on your CI setup, but the overall steps are as follows:")]),e._v(" "),t("ol",[t("li",[e._v("Ensure the git user name and email are set, or git will reject the commit. Somewhere in your pipeline:"),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" config user.name "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"someone"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" config user.email "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"someone@example.com"')]),e._v("\n")])])])]),e._v(" "),t("li",[e._v("Set up git authentication. This could use tokens (covered below), SSH keys, or some other non-interactive method.")]),e._v(" "),t("li",[e._v("Set up npm authentication. This could use tokens passed on the command line (covered below), tokens set in "),t("code",[e._v(".npmrc")]),e._v(", or some other method.")]),e._v(" "),t("li",[e._v("Run "),t("code",[e._v("beachball publish")]),e._v("!")])]),e._v(" "),t("h3",{attrs:{id:"github-repo-github-actions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github-repo-github-actions"}},[e._v("#")]),e._v(" GitHub repo + GitHub Actions")]),e._v(" "),t("p",[e._v("Here's a sample setup for publishing from a GitHub repo using GitHub actions. The environment, secret, and script names can be modified as you prefer.")]),e._v(" "),t("p",[e._v("This sample assumes the following:")]),e._v(" "),t("ul",[t("li",[e._v("An environment called "),t("code",[e._v("release")]),e._v(" (set up "),t("a",{attrs:{href:"#secrets-github-actions"}},[e._v("as described above")]),e._v(") with the following secrets:\n"),t("ul",[t("li",[t("code",[e._v("REPO_PAT")]),e._v(": A GitHub classic personal access token with admin access ("),t("a",{attrs:{href:"#generating-a-github-token"}},[e._v("as described above")]),e._v(")")]),e._v(" "),t("li",[t("code",[e._v("NPM_TOKEN")]),e._v(": An npm token with write access to the package(s) and/or scope(s), such as a "),t("a",{attrs:{href:"#generating-an-npm-token"}},[e._v("fine-grained token for public npm")])])])]),e._v(" "),t("li",[e._v("A repo root "),t("code",[e._v("package.json")]),e._v(" script "),t("code",[e._v("release")]),e._v(" which runs "),t("code",[e._v("beachball publish")])]),e._v(" "),t("li",[e._v("The build is running on a Linux/Mac agent. (This could be easily adapted to a Windows agent with different syntax in the commands.)")])]),e._v(" "),t("p",[e._v("Note that in GitHub Actions, it's easiest to set up authentication if you set "),t("code",[e._v("persist-credentials: false")]),e._v(" when checking out code.")]),e._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Example trigger configurations (choose one or more, or another setup)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# on:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on push to main")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# push:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# branches: [main]")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release daily (see https://crontab-generator.org/ for help with schedules)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# schedule:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# - cron: '0 8 * * *'")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on manual trigger (can be used alone or with other options)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# workflow_dispatch:")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" release\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Variable syntax below assumes Linux/Mac but could be easily adapted to Windows")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("runs-on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("latest\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("steps")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Check out code\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("uses")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" actions/checkout@v3\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("with")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Prevent the action from storing credentials in a way that's hard to override")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("persist-credentials")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean important"}},[e._v("false")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ... Other steps to prepare for publishing (install, build, test, etc) ...")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set the name, email, and URL with PAT")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Set git credentials\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("|")]),t("span",{pre:!0,attrs:{class:"token scalar string"}},[e._v('\n git config user.name "someone"\n git config user.email "someone@example.com"\n git remote set-url origin "https://$REPO_PAT@github.com/your-org/your-repo"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("REPO_PAT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.REPO_PAT "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pass the token on the command line for publishing")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Publish\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v('token "$NPM_TOKEN"\n '),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("NPM_TOKEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.NPM_TOKEN "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h3",{attrs:{id:"github-repo-azure-pipelines"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github-repo-azure-pipelines"}},[e._v("#")]),e._v(" GitHub repo + Azure Pipelines")]),e._v(" "),t("p",[e._v("Here's a sample setup for publishing from a GitHub repo using Azure Pipelines. The environment, secret, and script names can be modified as you prefer.")]),e._v(" "),t("p",[e._v("This sample assumes the following:")]),e._v(" "),t("ul",[t("li",[e._v("A variable group called "),t("code",[e._v("Beachball secrets")]),e._v(" (set up "),t("a",{attrs:{href:"#secrets-azure-pipelines"}},[e._v("as described above")]),e._v(") with the following secrets:\n"),t("ul",[t("li",[t("code",[e._v("GITHUB_PAT")]),e._v(": A GitHub classic personal access token with admin access ("),t("a",{attrs:{href:"#generating-a-github-token"}},[e._v("as described above")]),e._v(")")]),e._v(" "),t("li",[t("code",[e._v("NPM_TOKEN")]),e._v(": An npm token with write access to the package(s) and/or scope(s), such as a "),t("a",{attrs:{href:"#generating-an-npm-token"}},[e._v("fine-grained token for public npm")])])])]),e._v(" "),t("li",[e._v("A repo root "),t("code",[e._v("package.json")]),e._v(" script "),t("code",[e._v("release")]),e._v(" which runs "),t("code",[e._v("beachball publish")])]),e._v(" "),t("li",[e._v("The build is running on a Linux/Mac agent. (This could be easily adapted to a Windows agent with different syntax in the commands.)")])]),e._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Example trigger configurations (choose one or more, or another setup)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("#")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on push to main")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# trigger: [main]")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("#")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on a schedule")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?tabs=yaml&view=azure-devops#supported-cron-syntax")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# schedules:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# - cron: '0 8 * * *'")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# branches:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# include: [main]")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# This group should only be accessible to the release pipeline")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("variables")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("group")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Beachball secrets\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Variable syntax below assumes Linux/Mac but could be easily adapted to Windows")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("pool")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("vmImage")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("latest\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("steps")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ... Other steps to set up repo and prepare for publishing (install, build, test, etc) ...")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set the name, email, and URL with PAT")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("|")]),t("span",{pre:!0,attrs:{class:"token scalar string"}},[e._v('\n git config user.name "someone"\n git config user.email "someone@example.com"\n git remote set-url origin "https://$(REPO_PAT)@github.com/your-org/your-repo"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Set git credentials\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pass the token on the command line for publishing")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v('token "$(NPM_TOKEN)"\n '),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Publish\n")])])]),t("h3",{attrs:{id:"azure-repos-azure-pipelines"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#azure-repos-azure-pipelines"}},[e._v("#")]),e._v(" Azure Repos + Azure Pipelines")]),e._v(" "),t("p",[e._v("This should be very similar to the GitHub version, aside from possibly the authentication method. You could potentially use personal access tokens for git and npm feed authentication (similar to above), or other methods are available which aren't currently covered here.")]),e._v(" "),t("p",[e._v("If you're publishing to a private Azure Artifacts npm feed, be sure to set "),t("code",[e._v("registry")]),e._v(" in the "),t("code",[e._v("beachball")]),e._v(" config "),t("a",{attrs:{href:"#setting-options-for-publishing"}},[e._v("as described above")]),e._v(".")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{316:function(e,t,s){"use strict";s.r(t);var n=s(10),a=Object(n.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"ci-integration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ci-integration"}},[e._v("#")]),e._v(" CI Integration")]),e._v(" "),t("p",[e._v("There are two parts to CI integration with "),t("code",[e._v("beachball")]),e._v(":")]),e._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"./change-files#validating-change-files"}},[e._v("Add a PR build step")]),e._v(" to call "),t("code",[e._v("beachball check")]),e._v(" to validate that change files are included.")]),e._v(" "),t("li",[e._v("Add a release build step to call "),t("code",[e._v("beachball publish")]),e._v(" to publish to npm and push back to git (this page).")])]),e._v(" "),t("p",[e._v("To automate the bumping of package versions based on change files, you'll need to configure your release workflow/pipeline so that "),t("code",[e._v("beachball publish")]),e._v(" has write access to the git repo and npm registry. The exact steps will vary between CI systems, but general concepts as well as steps for some common setups are outlined below.")]),e._v(" "),t("h2",{attrs:{id:"authentication"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#authentication"}},[e._v("#")]),e._v(" Authentication")]),e._v(" "),t("p",[e._v("Automated publishing from a GitHub repo to the public npm registry ("),t("code",[e._v("registry.npmjs.org")]),e._v(") typically uses personal access tokens for authentication. These tokens are stored as secrets in your CI system. You should ensure that these secrets are only available to release builds.")]),e._v(" "),t("p",[e._v("For Azure DevOps repos publishing to a private registry, there are other possible approaches (such as using a service account with credentials stored in a key vault) which are not currently covered by these docs.")]),e._v(" "),t("h3",{attrs:{id:"generating-tokens"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#generating-tokens"}},[e._v("#")]),e._v(" Generating tokens")]),e._v(" "),t("h4",{attrs:{id:"npm-token"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#npm-token"}},[e._v("#")]),e._v(" npm token")]),e._v(" "),t("p",[e._v("If publishing to the public npm registry ("),t("code",[e._v("registry.npmjs.org")]),e._v("), "),t("a",{attrs:{href:"https://docs.npmjs.com/creating-and-viewing-access-tokens#creating-granular-access-tokens-on-the-website",target:"_blank",rel:"noopener noreferrer"}},[e._v("create a granular access token"),t("OutboundLink")],1),e._v(" with write access to only the relevant package(s) and/or scope(s). Classic automation tokens are not recommended due to their overly broad permissions.")]),e._v(" "),t("h4",{attrs:{id:"github-token"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github-token"}},[e._v("#")]),e._v(" GitHub token")]),e._v(" "),t("p",[e._v("You should use "),t("a",{attrs:{href:"https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/managing-a-branch-protection-rule",target:"_blank",rel:"noopener noreferrer"}},[e._v("branch protection"),t("OutboundLink")],1),e._v(" for your "),t("code",[e._v("main")]),e._v("/"),t("code",[e._v("master")]),e._v(" branch, but this creates some difficulties for pushing changes back during automated publishing.")]),e._v(" "),t("p",[e._v("The main way to allow "),t("code",[e._v("beachball")]),e._v(" to push back to a repo with branch protections is by using a "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#personal-access-tokens-classic",target:"_blank",rel:"noopener noreferrer"}},[e._v("classic personal access token"),t("OutboundLink")],1),e._v(" with "),t("code",[e._v("repo")]),e._v(" permissions. (If the repo is part of an organization that uses SAML single sign-on (SSO), be sure to "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on",target:"_blank",rel:"noopener noreferrer"}},[e._v("authorize the token for SSO access"),t("OutboundLink")],1),e._v(".) Since classic PATs have broad permissions, they must only be accessible to release builds—"),t("a",{attrs:{href:"#storing-tokens"}},[e._v("instructions below")]),e._v(".")]),e._v(" "),t("p",[e._v('An alternative approach is creating a classic PAT with a "machine user" account. Create a new account with an alternate email or '),t("a",{attrs:{href:"https://en.wikipedia.org/wiki/Email_address#Subaddressing",target:"_blank",rel:"noopener noreferrer"}},[e._v("subaddress"),t("OutboundLink")],1),e._v(" ("),t("code",[e._v("+")]),e._v(' address), give it contributor permissions to only this repo, and add it under "Restrict who can push to matching branches" in the branch protection rule.')]),e._v(" "),t("p",[e._v("(It's unclear if/when branch policy bypass support will be added for "),t("a",{attrs:{href:"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-fine-grained-personal-access-token",target:"_blank",rel:"noopener noreferrer"}},[e._v("fine-grained PATs"),t("OutboundLink")],1),e._v("; it's been "),t("a",{attrs:{href:"https://github.com/community/community/discussions/36441?sort=top#discussioncomment-4602435",target:"_blank",rel:"noopener noreferrer"}},[e._v("requested"),t("OutboundLink")],1),e._v(" by users with no response and doesn't seem to be on the "),t("a",{attrs:{href:"https://github.com/orgs/github/projects/4247/views/1",target:"_blank",rel:"noopener noreferrer"}},[e._v("public roadmap"),t("OutboundLink")],1),e._v(". The "),t("a",{attrs:{href:"https://docs.github.com/en/actions/security-guides/automatic-token-authentication",target:"_blank",rel:"noopener noreferrer"}},[e._v("built-in "),t("code",[e._v("GITHUB_TOKEN")]),t("OutboundLink")],1),e._v(" won't work for the same reason.)")]),e._v(" "),t("h3",{attrs:{id:"storing-tokens"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#storing-tokens"}},[e._v("#")]),e._v(" Storing tokens")]),e._v(" "),t("h4",{attrs:{id:"secrets-github-actions"}},[e._v("GitHub Actions")]),e._v(" "),t("p",[e._v("To restrict secret access to appropriate branches, use an "),t("strong",[t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment",target:"_blank",rel:"noopener noreferrer"}},[e._v("environment"),t("OutboundLink")],1)]),e._v(". (The docs for environments focus on cloud deployments or resources, but environments can also be used only for secret storage.)")]),e._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment",target:"_blank",rel:"noopener noreferrer"}},[e._v("Create an environment"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Restrict "),t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-branches",target:"_blank",rel:"noopener noreferrer"}},[e._v("deployment branches"),t("OutboundLink")],1),e._v(' to "Selected branches" and add a rule to allow only your release branch(es) (often '),t("code",[e._v("main")]),e._v("/"),t("code",[e._v("master")]),e._v(").")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-an-environment",target:"_blank",rel:"noopener noreferrer"}},[e._v("Add secrets"),t("OutboundLink")],1),e._v(" for the npm and GitHub tokens.")]),e._v(" "),t("li",[e._v("To "),t("a",{attrs:{href:"https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#using-an-environment",target:"_blank",rel:"noopener noreferrer"}},[e._v("use the environment"),t("OutboundLink")],1),e._v(", add a key "),t("code",[e._v("environment: your-env-name")]),e._v(" in your release workflow job. (Full example below.)")])]),e._v(" "),t("h4",{attrs:{id:"secrets-azure-pipelines"}},[e._v("Azure Pipelines")]),e._v(" "),t("p",[e._v("There are a couple of options here:")]),e._v(" "),t("ul",[t("li",[e._v("Use "),t("a",{attrs:{href:"https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#secret-variables",target:"_blank",rel:"noopener noreferrer"}},[e._v("secret variables in your release pipeline"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("li",[e._v("Use "),t("a",{attrs:{href:"https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=classic",target:"_blank",rel:"noopener noreferrer"}},[e._v("secrets in a variable group"),t("OutboundLink")],1),e._v(", which can optionally be linked to a key vault. Ensure that this variable group is only accessible to your release pipeline.")])]),e._v(" "),t("h2",{attrs:{id:"setting-options-for-publishing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#setting-options-for-publishing"}},[e._v("#")]),e._v(" Setting options for publishing")]),e._v(" "),t("p",[e._v("If you're passing any custom options besides the npm token to "),t("code",[e._v("beachball publish")]),e._v(", it's recommended to set them in either the "),t("code",[e._v("beachball")]),e._v(" config (if they don't interfere with other commands), or a "),t("code",[e._v("package.json")]),e._v(" script (if specific to "),t("code",[e._v("publish")]),e._v(").")]),e._v(" "),t("p",[e._v("For example, the following script could be used for publishing public scoped packages:")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"release"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"beachball publish --access public"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("p",[e._v("If you're publishing to a private feed, "),t("code",[e._v("registry")]),e._v(" should be set in the overall "),t("code",[e._v("beachball")]),e._v(" config, since it's also used by the "),t("code",[e._v("sync")]),e._v(" command. For example, if your beachball config is in the root "),t("code",[e._v("package.json")]),e._v(" (or it works the same in a config file):")]),e._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"beachball"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[e._v('"registry"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"https://pkgs.dev.azure.com/some-org/_packaging/some-feed/npm/registry/"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h2",{attrs:{id:"publishing"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#publishing"}},[e._v("#")]),e._v(" Publishing")]),e._v(" "),t("p",[e._v("The exact publishing setup will vary depending on your CI setup, but the overall steps are as follows:")]),e._v(" "),t("ol",[t("li",[e._v("Ensure the git user name and email are set, or git will reject the commit. Somewhere in your pipeline:"),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" config user.name "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"someone"')]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[e._v("git")]),e._v(" config user.email "),t("span",{pre:!0,attrs:{class:"token string"}},[e._v('"someone@example.com"')]),e._v("\n")])])])]),e._v(" "),t("li",[e._v("Set up git authentication. This could use tokens (covered below), SSH keys, or some other non-interactive method.")]),e._v(" "),t("li",[e._v("Set up npm authentication. This could use tokens passed on the command line (covered below), tokens set in "),t("code",[e._v(".npmrc")]),e._v(", or some other method.")]),e._v(" "),t("li",[e._v("Run "),t("code",[e._v("beachball publish")]),e._v("!")])]),e._v(" "),t("h3",{attrs:{id:"github-repo-github-actions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github-repo-github-actions"}},[e._v("#")]),e._v(" GitHub repo + GitHub Actions")]),e._v(" "),t("p",[e._v("Here's a sample setup for publishing from a GitHub repo using GitHub actions. The environment, secret, and script names can be modified as you prefer.")]),e._v(" "),t("p",[e._v("This sample assumes the following:")]),e._v(" "),t("ul",[t("li",[e._v("An environment called "),t("code",[e._v("release")]),e._v(" (set up "),t("a",{attrs:{href:"#secrets-github-actions"}},[e._v("as described above")]),e._v(") with the following secrets:\n"),t("ul",[t("li",[t("code",[e._v("REPO_PAT")]),e._v(": A GitHub classic personal access token with admin access ("),t("a",{attrs:{href:"#generating-a-github-token"}},[e._v("as described above")]),e._v(")")]),e._v(" "),t("li",[t("code",[e._v("NPM_TOKEN")]),e._v(": An npm token with write access to the package(s) and/or scope(s), such as a "),t("a",{attrs:{href:"#generating-an-npm-token"}},[e._v("fine-grained token for public npm")])])])]),e._v(" "),t("li",[e._v("A repo root "),t("code",[e._v("package.json")]),e._v(" script "),t("code",[e._v("release")]),e._v(" which runs "),t("code",[e._v("beachball publish")])]),e._v(" "),t("li",[e._v("The build is running on a Linux/Mac agent. (This could be easily adapted to a Windows agent with different syntax in the commands.)")])]),e._v(" "),t("p",[e._v("Note that in GitHub Actions, it's easiest to set up authentication if you set "),t("code",[e._v("persist-credentials: false")]),e._v(" when checking out code.")]),e._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Example trigger configurations (choose one or more, or another setup)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# on:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on push to main")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# push:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# branches: [main]")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release daily (see https://crontab-generator.org/ for help with schedules)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# schedule:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# - cron: '0 8 * * *'")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on manual trigger (can be used alone or with other options)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# workflow_dispatch:")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("environment")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" release\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Variable syntax below assumes Linux/Mac but could be easily adapted to Windows")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("runs-on")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("latest\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("steps")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Check out code\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("uses")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" actions/checkout@v3\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("with")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Prevent the action from storing credentials in a way that's hard to override")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("persist-credentials")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token boolean important"}},[e._v("false")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ... Other steps to prepare for publishing (install, build, test, etc) ...")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set the name, email, and URL with PAT")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Set git credentials\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("|")]),t("span",{pre:!0,attrs:{class:"token scalar string"}},[e._v('\n git config user.name "someone"\n git config user.email "someone@example.com"\n git remote set-url origin "https://$REPO_PAT@github.com/your-org/your-repo"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("REPO_PAT")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.REPO_PAT "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pass the token on the command line for publishing")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Publish\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("run")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v('token "$NPM_TOKEN"\n '),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("env")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("NPM_TOKEN")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" $"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("{")]),e._v(" secrets.NPM_TOKEN "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("}")]),e._v("\n")])])]),t("h3",{attrs:{id:"github-repo-azure-pipelines"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github-repo-azure-pipelines"}},[e._v("#")]),e._v(" GitHub repo + Azure Pipelines")]),e._v(" "),t("p",[e._v("Here's a sample setup for publishing from a GitHub repo using Azure Pipelines. The environment, secret, and script names can be modified as you prefer.")]),e._v(" "),t("p",[e._v("This sample assumes the following:")]),e._v(" "),t("ul",[t("li",[e._v("A variable group called "),t("code",[e._v("Beachball secrets")]),e._v(" (set up "),t("a",{attrs:{href:"#secrets-azure-pipelines"}},[e._v("as described above")]),e._v(") with the following secrets:\n"),t("ul",[t("li",[t("code",[e._v("GITHUB_PAT")]),e._v(": A GitHub classic personal access token with admin access ("),t("a",{attrs:{href:"#generating-a-github-token"}},[e._v("as described above")]),e._v(")")]),e._v(" "),t("li",[t("code",[e._v("NPM_TOKEN")]),e._v(": An npm token with write access to the package(s) and/or scope(s), such as a "),t("a",{attrs:{href:"#generating-an-npm-token"}},[e._v("fine-grained token for public npm")])])])]),e._v(" "),t("li",[e._v("A repo root "),t("code",[e._v("package.json")]),e._v(" script "),t("code",[e._v("release")]),e._v(" which runs "),t("code",[e._v("beachball publish")])]),e._v(" "),t("li",[e._v("The build is running on a Linux/Mac agent. (This could be easily adapted to a Windows agent with different syntax in the commands.)")])]),e._v(" "),t("div",{staticClass:"language-yml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Example trigger configurations (choose one or more, or another setup)")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("#")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on push to main")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# trigger: [main]")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("#")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # Release on a schedule")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# # https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?tabs=yaml&view=azure-devops#supported-cron-syntax")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# schedules:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# - cron: '0 8 * * *'")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# branches:")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# include: [main]")]),e._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# This group should only be accessible to the release pipeline")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("variables")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("group")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Beachball secrets\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Variable syntax below assumes Linux/Mac but could be easily adapted to Windows")]),e._v("\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("pool")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("vmImage")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" ubuntu"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v("latest\n\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("steps")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# ... Other steps to set up repo and prepare for publishing (install, build, test, etc) ...")]),e._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Set the name, email, and URL with PAT")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("|")]),t("span",{pre:!0,attrs:{class:"token scalar string"}},[e._v('\n git config user.name "someone"\n git config user.email "someone@example.com"\n git remote set-url origin "https://$(REPO_PAT)@github.com/your-org/your-repo"')]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Set git credentials\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[e._v("# Pass the token on the command line for publishing")]),e._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("script")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" npm run release "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v("-")]),e._v('token "$(NPM_TOKEN)"\n '),t("span",{pre:!0,attrs:{class:"token key atrule"}},[e._v("name")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[e._v(":")]),e._v(" Publish\n")])])]),t("h3",{attrs:{id:"azure-repos-azure-pipelines"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#azure-repos-azure-pipelines"}},[e._v("#")]),e._v(" Azure Repos + Azure Pipelines")]),e._v(" "),t("p",[e._v("This should be very similar to the GitHub version, aside from possibly the authentication method. You could potentially use personal access tokens for git and npm feed authentication (similar to above), or other methods are available which aren't currently covered here.")]),e._v(" "),t("p",[e._v("If you're publishing to a private Azure Artifacts npm feed, be sure to set "),t("code",[e._v("registry")]),e._v(" in the "),t("code",[e._v("beachball")]),e._v(" config "),t("a",{attrs:{href:"#setting-options-for-publishing"}},[e._v("as described above")]),e._v(".")])])}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/35.889e84bf.js b/assets/js/35.060fd012.js similarity index 99% rename from assets/js/35.889e84bf.js rename to assets/js/35.060fd012.js index 1661f3bbf..cbc5c4bfc 100644 --- a/assets/js/35.889e84bf.js +++ b/assets/js/35.060fd012.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{319:function(a,t,e){"use strict";e.r(t);var s=e(10),n=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[a._v("#")]),a._v(" Installation")]),a._v(" "),t("h2",{attrs:{id:"cli-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-setup"}},[a._v("#")]),a._v(" CLI setup")]),a._v(" "),t("p",[a._v("The primary way to use "),t("code",[a._v("beachball")]),a._v(" is by installing it as a "),t("code",[a._v("devDependency")]),a._v(" and configuring wrapper scripts. (You can also run "),t("code",[a._v("beachball")]),a._v(" via "),t("code",[a._v("npx")]),a._v(".)")]),a._v(" "),t("blockquote",[t("p",[a._v("Note: In a monorepo, "),t("code",[a._v("beachball")]),a._v(" should be installed at and run from the repo root only.")])]),a._v(" "),t("h3",{attrs:{id:"automatic-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#automatic-setup"}},[a._v("#")]),a._v(" Automatic setup")]),a._v(" "),t("p",[a._v("Run "),t("code",[a._v("npx beachball init")]),a._v(" to automatically run the steps outlined below.")]),a._v(" "),t("h3",{attrs:{id:"manual-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manual-setup"}},[a._v("#")]),a._v(" Manual setup")]),a._v(" "),t("p",[a._v("To get started, install "),t("code",[a._v("beachball")]),a._v(" as a "),t("code",[a._v("devDependency")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("npm")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-D")]),a._v(" beachball\n")])])]),t("p",[a._v("or for yarn users (add "),t("code",[a._v("-W")]),a._v(" if in a monorepo):")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("yarn")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("add")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-D")]),a._v(" beachball\n")])])]),t("p",[a._v("After that, add some scripts to call "),t("code",[a._v("beachball")]),a._v(" commands:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"change"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"beachball change"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"checkchange"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"beachball check"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"release"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"beachball publish"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("You should also ensure that a "),t("a",{attrs:{href:"https://docs.npmjs.com/cli/v9/configuring-npm/package-json#repository",target:"_blank",rel:"noopener noreferrer"}},[t("code",[a._v("repository")]),t("OutboundLink")],1),a._v(" URL is set in your repo root "),t("code",[a._v("package.json")]),a._v(" to help "),t("code",[a._v("beachball")]),a._v(" figure out which remote to compare against when determining changes. For example:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"repository"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"git"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"url"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://github.com/your-org-name/your-repo-name.git"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h2",{attrs:{id:"local-development-workflow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#local-development-workflow"}},[a._v("#")]),a._v(" Local development workflow")]),a._v(" "),t("p",[a._v("After making and committing changes in a branch, run "),t("code",[a._v("npm run change")]),a._v(" or "),t("code",[a._v("yarn change")]),a._v(" to generate change files. See the "),t("a",{attrs:{href:"../concepts/change-files"}},[a._v("change files page")]),a._v(" for more details.")]),a._v(" "),t("h2",{attrs:{id:"ci-integration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ci-integration"}},[a._v("#")]),a._v(" CI integration")]),a._v(" "),t("p",[a._v("There are two parts to CI integration with "),t("code",[a._v("beachball")]),a._v(":")]),a._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"../concepts/change-files#validating-change-files"}},[a._v("Add a PR build step")]),a._v(" to call "),t("code",[a._v("beachball check")]),a._v(" to validate that change files are included.")]),a._v(" "),t("li",[t("a",{attrs:{href:"../concepts/ci-integration"}},[a._v("Add a release build step")]),a._v(" to call "),t("code",[a._v("beachball publish")]),a._v(" to publish to npm and push back to git.")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{320:function(a,t,e){"use strict";e.r(t);var s=e(10),n=Object(s.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"installation"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#installation"}},[a._v("#")]),a._v(" Installation")]),a._v(" "),t("h2",{attrs:{id:"cli-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#cli-setup"}},[a._v("#")]),a._v(" CLI setup")]),a._v(" "),t("p",[a._v("The primary way to use "),t("code",[a._v("beachball")]),a._v(" is by installing it as a "),t("code",[a._v("devDependency")]),a._v(" and configuring wrapper scripts. (You can also run "),t("code",[a._v("beachball")]),a._v(" via "),t("code",[a._v("npx")]),a._v(".)")]),a._v(" "),t("blockquote",[t("p",[a._v("Note: In a monorepo, "),t("code",[a._v("beachball")]),a._v(" should be installed at and run from the repo root only.")])]),a._v(" "),t("h3",{attrs:{id:"automatic-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#automatic-setup"}},[a._v("#")]),a._v(" Automatic setup")]),a._v(" "),t("p",[a._v("Run "),t("code",[a._v("npx beachball init")]),a._v(" to automatically run the steps outlined below.")]),a._v(" "),t("h3",{attrs:{id:"manual-setup"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#manual-setup"}},[a._v("#")]),a._v(" Manual setup")]),a._v(" "),t("p",[a._v("To get started, install "),t("code",[a._v("beachball")]),a._v(" as a "),t("code",[a._v("devDependency")]),a._v(":")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("npm")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-D")]),a._v(" beachball\n")])])]),t("p",[a._v("or for yarn users (add "),t("code",[a._v("-W")]),a._v(" if in a monorepo):")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("yarn")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("add")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token parameter variable"}},[a._v("-D")]),a._v(" beachball\n")])])]),t("p",[a._v("After that, add some scripts to call "),t("code",[a._v("beachball")]),a._v(" commands:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"scripts"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"change"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"beachball change"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"checkchange"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"beachball check"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"release"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"beachball publish"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("p",[a._v("You should also ensure that a "),t("a",{attrs:{href:"https://docs.npmjs.com/cli/v9/configuring-npm/package-json#repository",target:"_blank",rel:"noopener noreferrer"}},[t("code",[a._v("repository")]),t("OutboundLink")],1),a._v(" URL is set in your repo root "),t("code",[a._v("package.json")]),a._v(" to help "),t("code",[a._v("beachball")]),a._v(" figure out which remote to compare against when determining changes. For example:")]),a._v(" "),t("div",{staticClass:"language-json extra-class"},[t("pre",{pre:!0,attrs:{class:"language-json"}},[t("code",[t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"repository"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"type"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"git"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token property"}},[a._v('"url"')]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"https://github.com/your-org-name/your-repo-name.git"')]),a._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n")])])]),t("h2",{attrs:{id:"local-development-workflow"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#local-development-workflow"}},[a._v("#")]),a._v(" Local development workflow")]),a._v(" "),t("p",[a._v("After making and committing changes in a branch, run "),t("code",[a._v("npm run change")]),a._v(" or "),t("code",[a._v("yarn change")]),a._v(" to generate change files. See the "),t("a",{attrs:{href:"../concepts/change-files"}},[a._v("change files page")]),a._v(" for more details.")]),a._v(" "),t("h2",{attrs:{id:"ci-integration"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ci-integration"}},[a._v("#")]),a._v(" CI integration")]),a._v(" "),t("p",[a._v("There are two parts to CI integration with "),t("code",[a._v("beachball")]),a._v(":")]),a._v(" "),t("ol",[t("li",[t("a",{attrs:{href:"../concepts/change-files#validating-change-files"}},[a._v("Add a PR build step")]),a._v(" to call "),t("code",[a._v("beachball check")]),a._v(" to validate that change files are included.")]),a._v(" "),t("li",[t("a",{attrs:{href:"../concepts/ci-integration"}},[a._v("Add a release build step")]),a._v(" to call "),t("code",[a._v("beachball publish")]),a._v(" to publish to npm and push back to git.")])])])}),[],!1,null,null,null);t.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/app.4c151171.js b/assets/js/app.ef895008.js similarity index 95% rename from assets/js/app.4c151171.js rename to assets/js/app.ef895008.js index 7131d2c69..abf0b4f7e 100644 --- a/assets/js/app.4c151171.js +++ b/assets/js/app.ef895008.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],c=e[1],u=e[2],f=0,p=[];f
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var c=n.render(!e),u=c.querySelector(r.barSelector),l=r.speed,f=r.easing;return c.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,l,f)),1===t?(s(c,{transition:"none",opacity:1}),c.offsetWidth,setTimeout((function(){s(c,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),l)}),l)):setTimeout(e,l)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),c=t?"-100":i(n.status||0),l=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+c+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&p(o),l!=document.body&&u(l,"nprogress-custom-parent"),l.appendChild(e),e},n.remove=function(){l(document.documentElement,"nprogress-busy"),l(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function c(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function u(t,e){var n=f(t),r=n+e;c(n,e)||(t.className=r.substring(1))}function l(t,e){var n,r=f(t);c(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){"use strict";var r=n(0),o=n(45).f,i=n(13),a=n(93),s=n(33),c=n(61),u=n(120);t.exports=function(t,e){var n,l,f,p,h,d=t.target,v=t.global,m=t.stat;if(n=v?r:m?r[d]||s(d,{}):r[d]&&r[d].prototype)for(l in e){if(p=e[l],f=t.dontCallGetSet?(h=o(n,l))&&h.value:n[l],!u(v?l:d+(m?".":"#")+l,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(t.sham||f&&f.sham)&&i(p,"sham",!0),a(n,l,p,t)}}},function(t,e,n){"use strict";var r=n(25),o=Function.prototype.call;t.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},function(t,e,n){"use strict";var r=n(3);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){"use strict";var r=n(46),o=n(28);t.exports=function(t){return r(o(t))}},function(t,e,n){"use strict";var r=n(47),o=TypeError;t.exports=function(t){if(r(t))throw new o("Can't call method on "+t);return t}},function(t,e,n){"use strict";var r=n(0),o=n(1),i=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?i(r[t]):r[t]&&r[t][e]}},function(t,e,n){"use strict";var r=n(1),o=n(102),i=TypeError;t.exports=function(t){if(r(t))return t;throw new i(o(t)+" is not a function")}},function(t,e,n){"use strict";var r=n(0),o=n(55),i=n(8),a=n(57),s=n(52),c=n(51),u=r.Symbol,l=o("wks"),f=c?u.for||u:u&&u.withoutSetter||a;t.exports=function(t){return i(l,t)||(l[t]=s&&i(u,t)?u[t]:f("Symbol."+t)),l[t]}},function(t,e,n){"use strict";var r=n(56),o=n(0),i=n(33),a=t.exports=o["__core-js_shared__"]||i("__core-js_shared__",{});(a.versions||(a.versions=[])).push({version:"3.38.1",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){"use strict";var r=n(0),o=Object.defineProperty;t.exports=function(t,e){try{o(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){"use strict";var r=n(28),o=Object;t.exports=function(t){return o(r(t))}},function(t,e,n){"use strict";var r=n(117);t.exports=function(t){return r(t.length)}},function(t,e,n){var r=n(145),o=n(11),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return o(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},function(t,e,n){var r=n(9)(n(7),"Map");t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(165),o=n(172),i=n(174),a=n(175),s=n(176);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),o=n(43),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(a.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(12),o=n(11);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){"use strict";var r=n(5),o=n(24),i=n(99),a=n(26),s=n(27),c=n(48),u=n(8),l=n(58),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=s(t),e=c(e),l)try{return f(t,e)}catch(t){}if(u(t,e))return a(!o(i.f,t,e),t[e])}},function(t,e,n){"use strict";var r=n(2),o=n(3),i=n(16),a=Object,s=r("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"===i(t)?s(t,""):a(t)}:a},function(t,e,n){"use strict";t.exports=function(t){return null==t}},function(t,e,n){"use strict";var r=n(100),o=n(49);t.exports=function(t){var e=r(t,"string");return o(e)?e:e+""}},function(t,e,n){"use strict";var r=n(29),o=n(1),i=n(50),a=n(51),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=r("Symbol");return o(e)&&i(e.prototype,s(t))}},function(t,e,n){"use strict";var r=n(2);t.exports=r({}.isPrototypeOf)},function(t,e,n){"use strict";var r=n(52);t.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,e,n){"use strict";var r=n(53),o=n(3),i=n(0).String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol("symbol detection");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},function(t,e,n){"use strict";var r,o,i=n(0),a=n(54),s=i.process,c=i.Deno,u=s&&s.versions||c&&c.version,l=u&&u.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),t.exports=o},function(t,e,n){"use strict";var r=n(0).navigator,o=r&&r.userAgent;t.exports=o?String(o):""},function(t,e,n){"use strict";var r=n(32);t.exports=function(t,e){return r[t]||(r[t]=e||{})}},function(t,e,n){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(2),o=0,i=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},function(t,e,n){"use strict";var r=n(5),o=n(3),i=n(104);t.exports=!r&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){"use strict";var r=n(6),o=String,i=TypeError;t.exports=function(t){if(r(t))return t;throw new i(o(t)+" is not an object")}},function(t,e,n){"use strict";t.exports={}},function(t,e,n){"use strict";var r=n(8),o=n(111),i=n(45),a=n(15);t.exports=function(t,e,n){for(var s=o(e),c=a.f,u=i.f,l=0;ll))return!1;var p=c.get(t),h=c.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,m=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d-1&&t%1==0&&t=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,g,2):String(t)}function g(t,e){return e&&e.__v_isRef?e.value:e}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function O(t,e){return x.call(t,e)}function C(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var $=/-(\w)/g,k=C((function(t){return t.replace($,(function(t,e){return e?e.toUpperCase():""}))})),S=C((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),j=/\B([A-Z])/g,E=C((function(t){return t.replace(j,"-$1").toLowerCase()}));var P=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function A(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function T(t,e){for(var n in e)t[n]=e[n];return t}function L(t){for(var e={},n=0;n0,Q=X&&X.indexOf("edge/")>0;X&&X.indexOf("android");var tt=X&&/iphone|ipad|ipod|ios/.test(X);X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X);var et,nt=X&&X.match(/firefox\/(\d+)/),rt={}.watch,ot=!1;if(J)try{var it={};Object.defineProperty(it,"passive",{get:function(){ot=!0}}),window.addEventListener("test-passive",null,it)}catch(t){}var at=function(){return void 0===et&&(et=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),et},st=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,lt="undefined"!=typeof Symbol&&ct(Symbol)&&"undefined"!=typeof Reflect&&ct(Reflect.ownKeys);ut="undefined"!=typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=null;function pt(t){void 0===t&&(t=null),t||ft&&ft._scope.off(),ft=t,t&&t._scope.on()}var ht=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new ht;return e.text=t,e.isComment=!0,e};function vt(t){return new ht(void 0,void 0,void 0,String(t))}function mt(t){var e=new ht(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var gt=0,yt=[],bt=function(){function t(){this._pending=!1,this.id=gt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,yt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Xt((u=t(u,"".concat(n||"","_").concat(r)))[0])&&Xt(f)&&(p[l]=vt(f.text+u[0].text),u.shift()),p.push.apply(p,u)):c(u)?Xt(f)?p[l]=vt(f.text+u):""!==u&&p.push(vt(u)):Xt(u)&&Xt(f)?p[l]=vt(f.text+u.text):(s(e._isVList)&&a(u.tag)&&i(u.key)&&a(n)&&(u.key="__vlist".concat(n,"_").concat(r,"__")),p.push(u)));return p}(t):void 0}function Xt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Yt(t,e){var n,r,i,s,c=null;if(o(t)||"string"==typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=me(t,n,u,e[u]))}else i={};for(var l in n)l in i||(i[l]=ge(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),W(i,"$stable",s),W(i,"$key",c),W(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=ft;pt(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Jt(n))&&n[0];return pt(e),n&&(!i||1===n.length&&i.isComment&&!de(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ge(t,e){return function(){return t[e]}}function ye(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};W(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||we(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:P(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Ft(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,_e(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function _e(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function we(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function Oe(t,e){return(t.__esModule||lt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function Ce(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(un=function(){return ln.now()})}var fn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){var t,e;for(cn=un(),an=!0,en.sort(fn),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,Ue(pn))}}function dn(t,e){if(t){for(var n=Object.create(null),r=lt?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!O(o,"default"))a=!1;else if(""===a||a===E(t)){var c=In(String,o.type);(c<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!h(t)&&t.test(e)}function Yn(t,e){var n=t.cache,r=t.keys,o=t._vnode,i=t.$vnode;for(var a in n){var s=n[a];if(s){var c=s.name;c&&!e(c)&&Zn(n,a,r,o)}}i.componentOptions.children=void 0}function Zn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}Gn.prototype._init=function(t){var e=this;e._uid=Hn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Bt(!0),e._scope.parent=void 0,e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Pn(Wn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Je(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=pe(e._renderChildren,o),t.$scopedSlots=n?ve(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return $e(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return $e(t,e,n,r,o,!0)};var i=n&&n.data;Tt(t,"$attrs",i&&i.attrs||r,null,!0),Tt(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate",void 0,!1),function(t){var e=dn(t.$options.inject,t);e&&(jt(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),jt(!0))}(e),Un(e),function(t){var e=t.$options.provide;if(e){var n=u(e)?e.call(t):e;if(!l(n))return;for(var r=Vt(t),o=lt?Reflect.ownKeys(n):Object.keys(n),i=0;i1?A(n):n;for(var r=A(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Zn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Zn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Yn(t,(function(t){return Xn(e,t)}))})),this.$watch("exclude",(function(e){Yn(t,(function(t){return!Xn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Ce(t),n=e&&e.componentOptions;if(n){var r=Jn(n),o=this.include,i=this.exclude;if(o&&(!r||!Xn(o,r))||i&&r&&Xn(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,w(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return V}};Object.defineProperty(t,"config",e),t.util={warn:On,extend:T,mergeOptions:Pn,defineReactive:Tt},t.set=Lt,t.delete=Rt,t.nextTick=Ue,t.observable=function(t){return At(t),t},t.options=Object.create(null),z.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=A(arguments,1);return n.unshift(this),u(t.install)?t.install.apply(t,n):u(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Pn(this.options,t),this}}(t),Kn(t),function(t){z.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&u(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Gn),Object.defineProperty(Gn.prototype,"$isServer",{get:at}),Object.defineProperty(Gn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Gn,"FunctionalRenderContext",{value:vn}),Gn.version="2.7.16";var er=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),or=b("events,caret,typing,plaintext-only"),ir=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},cr=function(t){return sr(t)?t.slice(6,t.length):""},ur=function(t){return null==t||!1===t};function lr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=fr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=fr(e,n.data));return function(t,e){if(a(t)||a(e))return pr(t,hr(e));return""}(e.staticClass,e.class)}function fr(t,e){return{staticClass:pr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function pr(t,e){return t?e?t+" "+e:t:e||""}function hr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Dr(t,e,n):ir(e)?ur(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):rr(e)?t.setAttribute(e,function(t,e){return ur(e)||"false"===e?"false":"contenteditable"===t&&or(e)?e:"true"}(e,n)):sr(e)?ur(n)?t.removeAttributeNS(ar,cr(e)):t.setAttributeNS(ar,e,n):Dr(t,e,n)}function Dr(t,e,n){if(ur(n))t.removeAttribute(e);else{if(Y&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Nr={create:Mr,update:Mr};function Ur(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=lr(e),c=n._transitionClasses;a(c)&&(s=pr(s,hr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Fr,zr={create:Ur,update:Ur};function Br(t,e,n){var r=Fr;return function o(){var i=e.apply(null,arguments);null!==i&&Hr(t,o,n,r)}}var Vr=Ae&&!(nt&&Number(nt[1])<=53);function qr(t,e,n,r){if(Vr){var o=cn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Fr.addEventListener(t,e,ot?{capture:n,passive:r}:n)}function Hr(t,e,n,r){(r||Fr).removeEventListener(t,e._wrapper||e,n)}function Wr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Fr=e.elm||t.elm,function(t){if(a(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Wt(n,r,qr,Hr,Br,e.context),Fr=void 0}}var Gr,Kr={create:Wr,update:Wr,destroy:function(t){return Wr(t,Cr)}};function Jr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=T({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Xr(o,l)&&(o.value=l)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Gr=Gr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Gr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==c[n])try{o[n]=r}catch(t){}}}}function Xr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Yr={create:Jr,update:Jr},Zr=C((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Qr(t){var e=to(t.style);return t.staticStyle?T(t.staticStyle,e):e}function to(t){return Array.isArray(t)?L(t):"string"==typeof t?Zr(t):t}var eo,no=/^--/,ro=/\s*!important$/,oo=function(t,e,n){if(no.test(e))t.style.setProperty(e,n);else if(ro.test(n))t.style.setProperty(E(e),n.replace(ro,""),"important");else{var r=ao(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(uo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function fo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(uo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function po(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,ho(t.name||"v")),T(e,t),e}return"string"==typeof t?ho(t):void 0}}var ho=C((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),vo=J&&!Z,mo="transition",go="transitionend",yo="animation",bo="animationend";vo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yo="WebkitAnimation",bo="webkitAnimationEnd"));var _o=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function wo(t){_o((function(){_o(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),lo(t,e))}function Oo(t,e){t._transitionClasses&&w(t._transitionClasses,e),fo(t,e)}function Co(t,e,n){var r=ko(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:bo,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n="transition",l=a,f=i.length):"animation"===e?u>0&&(n="animation",l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&$o.test(r[mo+"Property"])}}function So(t,e){for(;t.length1}function Lo(t,e){!0!==e.data.show&&Eo(e)}var Ro=function(t){var e,n,r={},u=t.modules,l=t.nodeOps;for(e=0;e<$r.length;++e)for(r[$r[e]]=[],n=0;nd?_(t,i(n[g+1])?null:n[g+1].elm,n,h,g,r):h>g&&x(e,f,d)}(f,v,g,n,u):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?x(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(d)&&a(h=d.hook)&&a(h=h.postpatch)&&h(t,e)}}}function k(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(D(Uo(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function No(t,e){return e.every((function(e){return!D(e,t)}))}function Uo(t){return"_value"in t?t._value:t.value}function Fo(t){t.target.composing=!0}function zo(t){t.target.composing&&(t.target.composing=!1,Bo(t.target,"input"))}function Bo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Vo(t){return!t.componentInstance||t.data&&t.data.transition?t:Vo(t.componentInstance._vnode)}var qo={model:Mo,show:{bind:function(t,e,n){var r=e.value,o=(n=Vo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Vo(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){t.style.display=t.__vOriginalDisplay})):Po(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Ho={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Wo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Wo(Ce(e.children)):t}function Go(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[k(r)]=o[r];return e}function Ko(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Jo=function(t){return t.tag||de(t)},Xo=function(t){return"show"===t.name},Yo={name:"transition",props:Ho,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Jo)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Wo(o);if(!i)return o;if(this._leaving)return Ko(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:c(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Go(this),u=this._vnode,l=Wo(u);if(i.data.directives&&i.data.directives.some(Xo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!de(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=T({},s);if("out-in"===r)return this._leaving=!0,Gt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ko(t,o);if("in-out"===r){if(de(i))return u;var p,h=function(){p()};Gt(s,"afterEnter",h),Gt(s,"enterCancelled",h),Gt(f,"delayLeave",(function(t){p=t}))}}return o}}},Zo=T({tag:String,moveClass:String},Ho);function Qo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ti(t){t.data.newPos=t.elm.getBoundingClientRect()}function ei(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Zo.mode;var ni={Transition:Yo,TransitionGroup:{props:Zo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ye(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Go(this),s=0;s-1?yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:yr[t]=/HTMLUnknownElement/.test(e.toString())},T(Gn.options.directives,qo),T(Gn.options.components,ni),Gn.prototype.__patch__=J?Ro:R,Gn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new He(t,r,R,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",l=c.path?Oi(c.path,u,n||o.append):u,f=function(t,e,n){void 0===e&&(e={});var r,o=n||li;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ui):ui(a)}return r}(c.query,o.query,r&&r.options.parseQuery),p=o.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var qi,Hi=function(){},Wi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},u=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==u?"router-link-active":u,p=null==l?"router-link-exact-active":l,h=null==this.activeClass?f:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?hi(null,Vi(a.redirectedFrom),null,n):a;c[d]=yi(r,v,this.exactPath),c[h]=this.exact||this.exactPath?c[d]:function(t,e){return 0===t.path.replace(pi,"/").indexOf(e.path.replace(pi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=c[d]?this.ariaCurrentValue:null,g=function(t){Gi(t)&&(e.replace?n.replace(i,Hi):n.push(i,Hi))},y={click:Gi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:c[h],isExactActive:c[d]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var w=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Bi(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var h=0;h-1}function Ca(t,e){return Oa(t)&&t._isRouter&&(null==e||t.type===e)}function $a(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function ka(t){return function(e,n,r){var o=!1,i=0,a=null;Sa(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=Pa((function(e){var o;((o=e).__esModule||Ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:qi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Pa((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Oa(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function Sa(t,e){return ja(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function ja(t){return Array.prototype.concat.apply([],t)}var Ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Pa(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Aa=function(t,e){this.router=t,this.base=function(t){if(!t)if(Ki){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=vi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ta(t,e,n,r){var o=Sa(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=qi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return ja(r?o.reverse():o)}function La(t,e){if(e)return function(){return t.apply(e,arguments)}}Aa.prototype.listen=function(t){this.cb=t},Aa.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Aa.prototype.onError=function(t){this.errorCbs.push(t)},Aa.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(Ca(t,ya.redirected)&&i===vi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Aa.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!Ca(t)&&Oa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(yi(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&aa(this.router,o,t,!1),s(((a=wa(i=o,t,ya.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=va&&n;r&&this.listeners.push(ia());var o=function(){var n=t.current,o=Ma(t.base);t.current===vi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&aa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(Ci(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ga(Ci(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ma(this.base)!==this.current.fullPath){var e=Ci(this.base+this.current.fullPath);t?ma(e):ga(e)}},e.prototype.getCurrentLocation=function(){return Ma(this.base)},e}(Aa);function Ma(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(Ci(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ia=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ma(t);if(!/^\/#/.test(e))return window.location.replace(Ci(t+"/#"+e)),!0}(this.base)||Da()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=va&&e;n&&this.listeners.push(ia());var r=function(){var e=t.current;Da()&&t.transitionTo(Na(),(function(r){n&&aa(t.router,r,e,!0),va||za(r.fullPath)}))},o=va?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Fa(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){za(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Na()!==e&&(t?Fa(e):za(e))},e.prototype.getCurrentLocation=function(){return Na()},e}(Aa);function Da(){var t=Na();return"/"===t.charAt(0)||(za("/"+t),!1)}function Na(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ua(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Fa(t){va?ma(Ua(t)):window.location.hash=t}function za(t){va?ga(Ua(t)):window.location.replace(Ua(t))}var Ba=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Ca(t,ya.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Aa),Va=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Yi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!va&&!1!==t.fallback,this.fallback&&(e="hash"),Ki||(e="abstract"),this.mode=e,e){case"history":this.history=new Ra(this,t.base);break;case"hash":this.history=new Ia(this,t.base,this.fallback);break;case"abstract":this.history=new Ba(this,t.base);break;default:0}},qa={currentRoute:{configurable:!0}};Va.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qa.currentRoute.get=function(){return this.history&&this.history.current},Va.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Ra||n instanceof Ia){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;va&&o&&"fullPath"in t&&aa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Va.prototype.beforeEach=function(t){return Wa(this.beforeHooks,t)},Va.prototype.beforeResolve=function(t){return Wa(this.resolveHooks,t)},Va.prototype.afterEach=function(t){return Wa(this.afterHooks,t)},Va.prototype.onReady=function(t,e){this.history.onReady(t,e)},Va.prototype.onError=function(t){this.history.onError(t)},Va.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Va.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Va.prototype.go=function(t){this.history.go(t)},Va.prototype.back=function(){this.go(-1)},Va.prototype.forward=function(){this.go(1)},Va.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Va.prototype.resolve=function(t,e,n){var r=Vi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?Ci(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Va.prototype.getRoutes=function(){return this.matcher.getRoutes()},Va.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Va.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Va.prototype,qa);var Ha=Va;function Wa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Va.install=function t(e){if(!t.installed||qi!==e){t.installed=!0,qi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",wi),e.component("RouterLink",Wi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Va.version="3.6.5",Va.isNavigationFailure=Ca,Va.NavigationFailureType=ya,Va.START_LOCATION=vi,Ki&&window.Vue&&window.Vue.use(Va);n(98);n(125),n(91);var Ga={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,301)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,257)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,245)),"components/Home":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,283)),"components/NavLink":()=>n.e(21).then(n.bind(null,244)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(12)]).then(n.bind(null,268)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,297)),"components/Page":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,284)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,270)),"components/PageNav":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,271)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,285)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,286)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,269)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(18)]).then(n.bind(null,258)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,256)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,308)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,302)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,303)),"layouts/404":()=>n.e(7).then(n.bind(null,304)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,305)),NotFound:()=>n.e(7).then(n.bind(null,304)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,305))},Ka={"v-b3815688":()=>n.e(22).then(n.bind(null,309)),"v-2546927e":()=>n.e(23).then(n.bind(null,310)),"v-618fa90d":()=>n.e(24).then(n.bind(null,311)),"v-25ef3a5f":()=>n.e(27).then(n.bind(null,312)),"v-c82b0b82":()=>n.e(25).then(n.bind(null,313)),"v-69d4dc92":()=>n.e(28).then(n.bind(null,314)),"v-a3c5b642":()=>n.e(29).then(n.bind(null,306)),"v-48bf0382":()=>n.e(26).then(n.bind(null,315)),"v-15e3261f":()=>n.e(30).then(n.bind(null,316)),"v-d10bd742":()=>n.e(32).then(n.bind(null,317)),"v-83bed76a":()=>n.e(33).then(n.bind(null,318)),"v-5bcc1347":()=>n.e(34).then(n.bind(null,307)),"v-1643c9df":()=>n.e(35).then(n.bind(null,319)),"v-48398402":()=>n.e(31).then(n.bind(null,320))};function Ja(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Xa=/-(\w)/g,Ya=Ja(t=>t.replace(Xa,(t,e)=>e?e.toUpperCase():"")),Za=/\B([A-Z])/g,Qa=Ja(t=>t.replace(Za,"-$1").toLowerCase()),ts=Ja(t=>t.charAt(0).toUpperCase()+t.slice(1));function es(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ts(Ya(e))):t(ts(e))||t(Qa(e))}const ns=Object.assign({},Ga,Ka),rs=t=>ns[t],os=t=>Ka[t],is=t=>Ga[t],as=t=>Gn.component(t);function ss(t){return es(os,t)}function cs(t){return es(is,t)}function us(t){return es(rs,t)}function ls(t){return es(as,t)}function fs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!ls(t)&&us(t)){const e=await us(t)();Gn.component(t,e.default)}}))}function ps(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var hs=n(88),ds=n.n(hs),vs=n(89),ms=n.n(vs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ms()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=_s(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ds()([{name:"description",content:this.$description}],t,this.siteMeta,ws)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){_s(null,this.currentMetaTags),ys()}};function ys(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bs(t=""){return t?``:""}function _s(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function ws(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(90),Os={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(xs)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Cs=n(22),$s=n.n(Cs),ks=[gs,Os,{mounted(){$s.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Gn.component(t.name)||$s.a.start(),n()}),this.$router.afterEach(()=>{$s.a.done(),this.isSidebarOpen=!1})}}],Ss={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ps("layout",t),Gn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},js=n(10),Es=Object(js.a)(Ss,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Es,"mixins",ks);const Ps=[{name:"v-b3815688",path:"/",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-b3815688").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-2546927e",path:"/cli/bump.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-2546927e").then(n)}},{name:"v-618fa90d",path:"/cli/change.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-618fa90d").then(n)}},{name:"v-25ef3a5f",path:"/cli/publish.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-25ef3a5f").then(n)}},{name:"v-c82b0b82",path:"/cli/check.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-c82b0b82").then(n)}},{name:"v-69d4dc92",path:"/cli/sync.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-69d4dc92").then(n)}},{name:"v-a3c5b642",path:"/concepts/bump-algorithm.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-a3c5b642").then(n)}},{name:"v-48bf0382",path:"/cli/options.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-48bf0382").then(n)}},{name:"v-15e3261f",path:"/concepts/change-files.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-15e3261f").then(n)}},{name:"v-d10bd742",path:"/concepts/groups.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-d10bd742").then(n)}},{name:"v-83bed76a",path:"/overview/configuration.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-83bed76a").then(n)}},{name:"v-5bcc1347",path:"/overview/getting-started.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-5bcc1347").then(n)}},{name:"v-1643c9df",path:"/overview/installation.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-1643c9df").then(n)}},{name:"v-48398402",path:"/concepts/ci-integration.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-48398402").then(n)}},{path:"*",component:Es}],As={title:"beachball",description:"The Sunniest Semantic Version Bumper",base:"/beachball/",headTags:[],pages:[{title:"Home",frontmatter:{home:!0,heroText:"The Sunniest Semantic Version Bumper",tagline:"Makes automating npm publishing a breeze",actionText:"Get Started →",actionLink:"/overview/getting-started",features:[{title:"Synchronized in git and npm",details:"keep your git and npm versions in sync in CI and local workflows"},{title:"Generates Changelogs",details:"same command will generate changelogs for your users"},{title:"Automated Version Bumps",details:"one command line to bump package(s) in your repo with semver"},{title:"Single or Monorepo",details:"compatible out of the box for single repo or monorepos"},{title:"Pre-Publish Validation Checks",details:"double and triple check git repo and npm registry before publish"},{title:"Zero Config Versioning",details:"no config is required to get started, do more in one line"}],footer:"MIT Licensed | Copyright © 2019-present Microsoft"},regularPath:"/",relativePath:"README.md",key:"v-b3815688",path:"/"},{title:"bump",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/bump.html",relativePath:"cli/bump.md",key:"v-2546927e",path:"/cli/bump.html",headers:[{level:3,title:"Options",slug:"options"}]},{title:"change",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/change.html",relativePath:"cli/change.md",key:"v-618fa90d",path:"/cli/change.html",headers:[{level:3,title:"Options",slug:"options"},{level:3,title:"Examples",slug:"examples"},{level:3,title:"Prompt walkthrough",slug:"prompt-walkthrough"}]},{title:"publish",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/publish.html",relativePath:"cli/publish.md",key:"v-25ef3a5f",path:"/cli/publish.html",headers:[{level:3,title:"Options",slug:"options"},{level:3,title:"Algorithm",slug:"algorithm"},{level:3,title:"Example CI workflow",slug:"example-ci-workflow"},{level:3,title:"Recovering from failed publish",slug:"recovering-from-failed-publish"}]},{title:"check",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/check.html",relativePath:"cli/check.md",key:"v-c82b0b82",path:"/cli/check.html",headers:[{level:3,title:"Options",slug:"options"},{level:3,title:"Where should check be run?",slug:"where-should-check-be-run"}]},{title:"sync",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/sync.html",relativePath:"cli/sync.md",key:"v-69d4dc92",path:"/cli/sync.html",headers:[{level:3,title:"Options",slug:"options"}]},{title:"Bump Algorithm",frontmatter:{tags:["bump"],category:"doc"},regularPath:"/concepts/bump-algorithm.html",relativePath:"concepts/bump-algorithm.md",key:"v-a3c5b642",path:"/concepts/bump-algorithm.html",headers:[{level:3,title:"Dependent version bumping",slug:"dependent-version-bumping"},{level:3,title:"Grouped bumping",slug:"grouped-bumping"}]},{title:"Common Options",frontmatter:{title:"Common Options",tags:["cli"],category:"doc"},regularPath:"/cli/options.html",relativePath:"cli/options.md",key:"v-48bf0382",path:"/cli/options.html",headers:[{level:2,title:"General options",slug:"general-options"},{level:2,title:"change options",slug:"change-options"},{level:2,title:"Bumping and publishing options",slug:"bumping-and-publishing-options"}]},{title:"Change Files",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/concepts/change-files.html",relativePath:"concepts/change-files.md",key:"v-15e3261f",path:"/concepts/change-files.html",headers:[{level:2,title:"What is a change file?",slug:"what-is-a-change-file"},{level:2,title:"Generating a change file",slug:"generating-a-change-file"},{level:2,title:"Validating change files",slug:"validating-change-files"}]},{title:"Version Groups",frontmatter:{tags:["groups","lock step"],category:"doc"},regularPath:"/concepts/groups.html",relativePath:"concepts/groups.md",key:"v-d10bd742",path:"/concepts/groups.html",headers:[{level:3,title:"Configuring groups",slug:"configuring-groups"}]},{title:"Configuration",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/overview/configuration.html",relativePath:"overview/configuration.md",key:"v-83bed76a",path:"/overview/configuration.html",headers:[{level:2,title:"Configuration files",slug:"configuration-files"},{level:3,title:"beachball.config.js",slug:"beachball-config-js"},{level:2,title:"Options",slug:"options"}]},{title:"Getting Started",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/overview/getting-started.html",relativePath:"overview/getting-started.md",key:"v-5bcc1347",path:"/overview/getting-started.html",headers:[{level:2,title:"Why Beachball?",slug:"why-beachball"},{level:2,title:"Beachball workflow",slug:"beachball-workflow"},{level:2,title:"Next steps",slug:"next-steps"}]},{title:"Installation",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/overview/installation.html",relativePath:"overview/installation.md",key:"v-1643c9df",path:"/overview/installation.html",headers:[{level:2,title:"CLI setup",slug:"cli-setup"},{level:3,title:"Automatic setup",slug:"automatic-setup"},{level:3,title:"Manual setup",slug:"manual-setup"},{level:2,title:"Local development workflow",slug:"local-development-workflow"},{level:2,title:"CI integration",slug:"ci-integration"}]},{title:"CI Integration",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/concepts/ci-integration.html",relativePath:"concepts/ci-integration.md",key:"v-48398402",path:"/concepts/ci-integration.html",headers:[{level:2,title:"Authentication",slug:"authentication"},{level:3,title:"Generating tokens",slug:"generating-tokens"},{level:3,title:"Storing tokens",slug:"storing-tokens"},{level:2,title:"Setting options for publishing",slug:"setting-options-for-publishing"},{level:2,title:"Publishing",slug:"publishing"},{level:3,title:"GitHub repo + GitHub Actions",slug:"github-repo-github-actions"},{level:3,title:"GitHub repo + Azure Pipelines",slug:"github-repo-azure-pipelines"},{level:3,title:"Azure Repos + Azure Pipelines",slug:"azure-repos-azure-pipelines"}]}],themeConfig:{nav:[{text:"Home",link:"/"},{text:"Getting Started",link:"/overview/getting-started"},{text:"Github",link:"https://github.com/microsoft/beachball"}],sidebar:[{title:"Overview",collapsable:!1,children:["/overview/installation","/overview/getting-started","/overview/configuration"]},{title:"Concepts",collapsable:!1,children:["/concepts/bump-algorithm","/concepts/change-files","/concepts/ci-integration","/concepts/groups"]},{title:"Command Line Args",collapsable:!1,children:["/cli/options","/cli/bump","/cli/change","/cli/check","/cli/publish","/cli/sync"]}]}};n(236);Gn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,308))),Gn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,302))),Gn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,303)));n(237);var Ts={props:{color:{required:!1,default:"rgb(66, 185, 131)"}}},Ls=(n(238),Object(js.a)(Ts,(function(){return(0,this._self._c)("div",{staticClass:"spinner",style:{background:this.color}})}),[],!1,null,"1bbcb91a",null).exports);const Rs={name:"Mermaid",props:{id:{type:String,required:!1,default:()=>"diagram_"+Date.now()},graph:{type:String,required:!1}},data:()=>({svg:void 0}),computed:{graphData(){return this.graph?this.graph:this.$slots.default[0].text}},render(t){return void 0===this.svg?t("Loading"):t("div",{class:["mermaid-diagram"],domProps:{innerHTML:this.svg,style:"width: 100%"}})},mounted(){n.e(36).then(n.t.bind(null,298,7)).then(t=>{t.initialize({startOnLoad:!0,gantt:{barHeight:20,fontSize:12,useWidth:960}}),t.render(this.id,this.graphData,t=>{this.svg=t})})},components:{Loading:Ls}};var Ms=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component(Rs.name,Rs)}],Is=[];class Ds extends class{constructor(){this.store=new Gn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Gn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ds.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:cs,getAsyncComponent:us,getVueComponent:ls});var Ns={install(t){const e=new Ds;t.$vuepress=e,t.prototype.$vuepress=e}};function Us(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Fs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ps("pageKey",e),Gn.component(e)||Gn.component(e,ss(e)),Gn.component(e)?t(e):t("")}},zs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Bs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Vs=(n(239),n(240),Object(js.a)(Bs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),qs={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Gn.config.productionTip=!1,Gn.use(Ha),Gn.use(Ns),Gn.mixin(function(t,e,n=Gn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Gn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Us(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Us(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Us(t,o)?r(o):Us(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ms.filter(t=>"function"==typeof t).map(e=>e({Vue:Gn,options:r,router:n,siteData:As,isServer:t})))}catch(t){console.error(t)}return{app:new Gn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Is.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file +var r=Object.freeze({}),o=Array.isArray;function i(t){return null==t}function a(t){return null!=t}function s(t){return!0===t}function c(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function u(t){return"function"==typeof t}function l(t){return null!==t&&"object"==typeof t}var f=Object.prototype.toString;function p(t){return"[object Object]"===f.call(t)}function h(t){return"[object RegExp]"===f.call(t)}function d(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,g,2):String(t)}function g(t,e){return e&&e.__v_isRef?e.value:e}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(r,1)}}var x=Object.prototype.hasOwnProperty;function O(t,e){return x.call(t,e)}function C(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var $=/-(\w)/g,k=C((function(t){return t.replace($,(function(t,e){return e?e.toUpperCase():""}))})),S=C((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),j=/\B([A-Z])/g,E=C((function(t){return t.replace(j,"-$1").toLowerCase()}));var P=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function A(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function T(t,e){for(var n in e)t[n]=e[n];return t}function L(t){for(var e={},n=0;n0,Q=X&&X.indexOf("edge/")>0;X&&X.indexOf("android");var tt=X&&/iphone|ipad|ipod|ios/.test(X);X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X);var et,nt=X&&X.match(/firefox\/(\d+)/),rt={}.watch,ot=!1;if(J)try{var it={};Object.defineProperty(it,"passive",{get:function(){ot=!0}}),window.addEventListener("test-passive",null,it)}catch(t){}var at=function(){return void 0===et&&(et=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),et},st=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ct(t){return"function"==typeof t&&/native code/.test(t.toString())}var ut,lt="undefined"!=typeof Symbol&&ct(Symbol)&&"undefined"!=typeof Reflect&&ct(Reflect.ownKeys);ut="undefined"!=typeof Set&&ct(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=null;function pt(t){void 0===t&&(t=null),t||ft&&ft._scope.off(),ft=t,t&&t._scope.on()}var ht=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new ht;return e.text=t,e.isComment=!0,e};function vt(t){return new ht(void 0,void 0,void 0,String(t))}function mt(t){var e=new ht(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var gt=0,yt=[],bt=function(){function t(){this._pending=!1,this.id=gt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,yt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Xt((u=t(u,"".concat(n||"","_").concat(r)))[0])&&Xt(f)&&(p[l]=vt(f.text+u[0].text),u.shift()),p.push.apply(p,u)):c(u)?Xt(f)?p[l]=vt(f.text+u):""!==u&&p.push(vt(u)):Xt(u)&&Xt(f)?p[l]=vt(f.text+u.text):(s(e._isVList)&&a(u.tag)&&i(u.key)&&a(n)&&(u.key="__vlist".concat(n,"_").concat(r,"__")),p.push(u)));return p}(t):void 0}function Xt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Yt(t,e){var n,r,i,s,c=null;if(o(t)||"string"==typeof t)for(c=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,c=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&o&&o!==r&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},e)e[u]&&"$"!==u[0]&&(i[u]=me(t,n,u,e[u]))}else i={};for(var l in n)l in i||(i[l]=ge(n,l));return e&&Object.isExtensible(e)&&(e._normalized=i),W(i,"$stable",s),W(i,"$key",c),W(i,"$hasNormal",a),i}function me(t,e,n,r){var i=function(){var e=ft;pt(t);var n=arguments.length?r.apply(null,arguments):r({}),i=(n=n&&"object"==typeof n&&!o(n)?[n]:Jt(n))&&n[0];return pt(e),n&&(!i||1===n.length&&i.isComment&&!de(i))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:i,enumerable:!0,configurable:!0}),i}function ge(t,e){return function(){return t[e]}}function ye(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};W(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||we(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:P(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Ft(t,e,n)}))}}}function be(t,e,n,r,o){var i=!1;for(var a in e)a in t?e[a]!==n[a]&&(i=!0):(i=!0,_e(t,a,r,o));for(var a in t)a in e||(i=!0,delete t[a]);return i}function _e(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function we(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var xe=null;function Oe(t,e){return(t.__esModule||lt&&"Module"===t[Symbol.toStringTag])&&(t=t.default),l(t)?e.extend(t):t}function Ce(t){if(o(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(un=function(){return ln.now()})}var fn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){var t,e;for(cn=un(),an=!0,en.sort(fn),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,Ue(pn))}}function dn(t,e){if(t){for(var n=Object.create(null),r=lt?Reflect.ownKeys(t):Object.keys(t),o=0;o-1)if(i&&!O(o,"default"))a=!1;else if(""===a||a===E(t)){var c=In(String,o.type);(c<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!h(t)&&t.test(e)}function Yn(t,e){var n=t.cache,r=t.keys,o=t._vnode,i=t.$vnode;for(var a in n){var s=n[a];if(s){var c=s.name;c&&!e(c)&&Zn(n,a,r,o)}}i.componentOptions.children=void 0}function Zn(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,w(n,e)}Gn.prototype._init=function(t){var e=this;e._uid=Hn++,e._isVue=!0,e.__v_skip=!0,e._scope=new Bt(!0),e._scope.parent=void 0,e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=Pn(Wn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Je(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,o=n&&n.context;t.$slots=pe(e._renderChildren,o),t.$scopedSlots=n?ve(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,o){return $e(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return $e(t,e,n,r,o,!0)};var i=n&&n.data;Tt(t,"$attrs",i&&i.attrs||r,null,!0),Tt(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate",void 0,!1),function(t){var e=dn(t.$options.inject,t);e&&(jt(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),jt(!0))}(e),Un(e),function(t){var e=t.$options.provide;if(e){var n=u(e)?e.call(t):e;if(!l(n))return;for(var r=Vt(t),o=lt?Reflect.ownKeys(n):Object.keys(n),i=0;i1?A(n):n;for(var r=A(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Zn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Zn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Yn(t,(function(t){return Xn(e,t)}))})),this.$watch("exclude",(function(e){Yn(t,(function(t){return!Xn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Ce(t),n=e&&e.componentOptions;if(n){var r=Jn(n),o=this.include,i=this.exclude;if(o&&(!r||!Xn(o,r))||i&&r&&Xn(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,w(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return V}};Object.defineProperty(t,"config",e),t.util={warn:On,extend:T,mergeOptions:Pn,defineReactive:Tt},t.set=Lt,t.delete=Rt,t.nextTick=Ue,t.observable=function(t){return At(t),t},t.options=Object.create(null),z.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=A(arguments,1);return n.unshift(this),u(t.install)?t.install.apply(t,n):u(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Pn(this.options,t),this}}(t),Kn(t),function(t){z.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&u(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Gn),Object.defineProperty(Gn.prototype,"$isServer",{get:at}),Object.defineProperty(Gn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Gn,"FunctionalRenderContext",{value:vn}),Gn.version="2.7.16";var er=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),or=b("events,caret,typing,plaintext-only"),ir=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},cr=function(t){return sr(t)?t.slice(6,t.length):""},ur=function(t){return null==t||!1===t};function lr(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=fr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=fr(e,n.data));return function(t,e){if(a(t)||a(e))return pr(t,hr(e));return""}(e.staticClass,e.class)}function fr(t,e){return{staticClass:pr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function pr(t,e){return t?e?t+" "+e:t:e||""}function hr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,o=t.length;r-1?Dr(t,e,n):ir(e)?ur(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):rr(e)?t.setAttribute(e,function(t,e){return ur(e)||"false"===e?"false":"contenteditable"===t&&or(e)?e:"true"}(e,n)):sr(e)?ur(n)?t.removeAttributeNS(ar,cr(e)):t.setAttributeNS(ar,e,n):Dr(t,e,n)}function Dr(t,e,n){if(ur(n))t.removeAttribute(e);else{if(Y&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Nr={create:Mr,update:Mr};function Ur(t,e){var n=e.elm,r=e.data,o=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(o)||i(o.staticClass)&&i(o.class)))){var s=lr(e),c=n._transitionClasses;a(c)&&(s=pr(s,hr(c))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Fr,zr={create:Ur,update:Ur};function Br(t,e,n){var r=Fr;return function o(){var i=e.apply(null,arguments);null!==i&&Hr(t,o,n,r)}}var Vr=Ae&&!(nt&&Number(nt[1])<=53);function qr(t,e,n,r){if(Vr){var o=cn,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Fr.addEventListener(t,e,ot?{capture:n,passive:r}:n)}function Hr(t,e,n,r){(r||Fr).removeEventListener(t,e._wrapper||e,n)}function Wr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Fr=e.elm||t.elm,function(t){if(a(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Wt(n,r,qr,Hr,Br,e.context),Fr=void 0}}var Gr,Kr={create:Wr,update:Wr,destroy:function(t){return Wr(t,Cr)}};function Jr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,o=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(n in(a(u.__ob__)||s(u._v_attr_proxy))&&(u=e.data.domProps=T({},u)),c)n in u||(o[n]="");for(n in u){if(r=u[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===c[n])continue;1===o.childNodes.length&&o.removeChild(o.childNodes[0])}if("value"===n&&"PROGRESS"!==o.tagName){o._value=r;var l=i(r)?"":String(r);Xr(o,l)&&(o.value=l)}else if("innerHTML"===n&&mr(o.tagName)&&i(o.innerHTML)){(Gr=Gr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Gr.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;f.firstChild;)o.appendChild(f.firstChild)}else if(r!==c[n])try{o[n]=r}catch(t){}}}}function Xr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Yr={create:Jr,update:Jr},Zr=C((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Qr(t){var e=to(t.style);return t.staticStyle?T(t.staticStyle,e):e}function to(t){return Array.isArray(t)?L(t):"string"==typeof t?Zr(t):t}var eo,no=/^--/,ro=/\s*!important$/,oo=function(t,e,n){if(no.test(e))t.style.setProperty(e,n);else if(ro.test(n))t.style.setProperty(E(e),n.replace(ro,""),"important");else{var r=ao(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(uo).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function fo(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(uo).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function po(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,ho(t.name||"v")),T(e,t),e}return"string"==typeof t?ho(t):void 0}}var ho=C((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),vo=J&&!Z,mo="transition",go="transitionend",yo="animation",bo="animationend";vo&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(mo="WebkitTransition",go="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(yo="WebkitAnimation",bo="webkitAnimationEnd"));var _o=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function wo(t){_o((function(){_o(t)}))}function xo(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),lo(t,e))}function Oo(t,e){t._transitionClasses&&w(t._transitionClasses,e),fo(t,e)}function Co(t,e,n){var r=ko(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s="transition"===o?go:bo,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n="transition",l=a,f=i.length):"animation"===e?u>0&&(n="animation",l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?"transition":"animation":null)?"transition"===n?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:"transition"===n&&$o.test(r[mo+"Property"])}}function So(t,e){for(;t.length1}function Lo(t,e){!0!==e.data.show&&Eo(e)}var Ro=function(t){var e,n,r={},u=t.modules,l=t.nodeOps;for(e=0;e<$r.length;++e)for(r[$r[e]]=[],n=0;nd?_(t,i(n[g+1])?null:n[g+1].elm,n,h,g,r):h>g&&x(e,f,d)}(f,v,g,n,u):a(g)?(a(t.text)&&l.setTextContent(f,""),_(f,null,g,0,g.length-1,n)):a(v)?x(v,0,v.length-1):a(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),a(d)&&a(h=d.hook)&&a(h=h.postpatch)&&h(t,e)}}}function k(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==i&&(a.selected=i);else if(D(Uo(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function No(t,e){return e.every((function(e){return!D(e,t)}))}function Uo(t){return"_value"in t?t._value:t.value}function Fo(t){t.target.composing=!0}function zo(t){t.target.composing&&(t.target.composing=!1,Bo(t.target,"input"))}function Bo(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Vo(t){return!t.componentInstance||t.data&&t.data.transition?t:Vo(t.componentInstance._vnode)}var qo={model:Mo,show:{bind:function(t,e,n){var r=e.value,o=(n=Vo(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Eo(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=Vo(n)).data&&n.data.transition?(n.data.show=!0,r?Eo(n,(function(){t.style.display=t.__vOriginalDisplay})):Po(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}}},Ho={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Wo(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Wo(Ce(e.children)):t}function Go(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[k(r)]=o[r];return e}function Ko(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Jo=function(t){return t.tag||de(t)},Xo=function(t){return"show"===t.name},Yo={name:"transition",props:Ho,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Jo)).length){0;var r=this.mode;0;var o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var i=Wo(o);if(!i)return o;if(this._leaving)return Ko(t,o);var a="__transition-".concat(this._uid,"-");i.key=null==i.key?i.isComment?a+"comment":a+i.tag:c(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var s=(i.data||(i.data={})).transition=Go(this),u=this._vnode,l=Wo(u);if(i.data.directives&&i.data.directives.some(Xo)&&(i.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(i,l)&&!de(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=T({},s);if("out-in"===r)return this._leaving=!0,Gt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ko(t,o);if("in-out"===r){if(de(i))return u;var p,h=function(){p()};Gt(s,"afterEnter",h),Gt(s,"enterCancelled",h),Gt(f,"delayLeave",(function(t){p=t}))}}return o}}},Zo=T({tag:String,moveClass:String},Ho);function Qo(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ti(t){t.data.newPos=t.elm.getBoundingClientRect()}function ei(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform="translate(".concat(r,"px,").concat(o,"px)"),i.transitionDuration="0s"}}delete Zo.mode;var ni={Transition:Yo,TransitionGroup:{props:Zo,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ye(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Go(this),s=0;s-1?yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:yr[t]=/HTMLUnknownElement/.test(e.toString())},T(Gn.options.directives,qo),T(Gn.options.components,ni),Gn.prototype.__patch__=J?Ro:R,Gn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new He(t,r,R,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),u=e&&e.path||"/",l=c.path?Oi(c.path,u,n||o.append):u,f=function(t,e,n){void 0===e&&(e={});var r,o=n||li;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(ui):ui(a)}return r}(c.query,o.query,r&&r.options.parseQuery),p=o.hash||c.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:l,query:f,hash:p}}var qi,Hi=function(){},Wi={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},u=n.options.linkActiveClass,l=n.options.linkExactActiveClass,f=null==u?"router-link-active":u,p=null==l?"router-link-exact-active":l,h=null==this.activeClass?f:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?hi(null,Vi(a.redirectedFrom),null,n):a;c[d]=yi(r,v,this.exactPath),c[h]=this.exact||this.exactPath?c[d]:function(t,e){return 0===t.path.replace(pi,"/").indexOf(e.path.replace(pi,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=c[d]?this.ariaCurrentValue:null,g=function(t){Gi(t)&&(e.replace?n.replace(i,Hi):n.push(i,Hi))},y={click:Gi};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:c[h],isExactActive:c[d]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var w=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=Bi(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var h=0;h-1}function Ca(t,e){return Oa(t)&&t._isRouter&&(null==e||t.type===e)}function $a(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}function ka(t){return function(e,n,r){var o=!1,i=0,a=null;Sa(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=Pa((function(e){var o;((o=e).__esModule||Ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:qi.extend(e),n.components[s]=e,--i<=0&&r()})),l=Pa((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Oa(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function Sa(t,e){return ja(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function ja(t){return Array.prototype.concat.apply([],t)}var Ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Pa(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Aa=function(t,e){this.router=t,this.base=function(t){if(!t)if(Ki){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=vi,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ta(t,e,n,r){var o=Sa(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=qi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return ja(r?o.reverse():o)}function La(t,e){if(e)return function(){return t.apply(e,arguments)}}Aa.prototype.listen=function(t){this.cb=t},Aa.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Aa.prototype.onError=function(t){this.errorCbs.push(t)},Aa.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(Ca(t,ya.redirected)&&i===vi||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Aa.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i,a,s=function(t){!Ca(t)&&Oa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},c=t.matched.length-1,u=o.matched.length-1;if(yi(t,o)&&c===u&&t.matched[c]===o.matched[u])return this.ensureURL(),t.hash&&aa(this.router,o,t,!1),s(((a=wa(i=o,t,ya.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",a));var l=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=va&&n;r&&this.listeners.push(ia());var o=function(){var n=t.current,o=Ma(t.base);t.current===vi&&o===t._startLocation||t.transitionTo(o,(function(t){r&&aa(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ma(Ci(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){ga(Ci(r.base+t.fullPath)),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ma(this.base)!==this.current.fullPath){var e=Ci(this.base+this.current.fullPath);t?ma(e):ga(e)}},e.prototype.getCurrentLocation=function(){return Ma(this.base)},e}(Aa);function Ma(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(Ci(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Ia=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ma(t);if(!/^\/#/.test(e))return window.location.replace(Ci(t+"/#"+e)),!0}(this.base)||Da()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=va&&e;n&&this.listeners.push(ia());var r=function(){var e=t.current;Da()&&t.transitionTo(Na(),(function(r){n&&aa(t.router,r,e,!0),va||za(r.fullPath)}))},o=va?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Fa(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){za(t.fullPath),aa(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Na()!==e&&(t?Fa(e):za(e))},e.prototype.getCurrentLocation=function(){return Na()},e}(Aa);function Da(){var t=Na();return"/"===t.charAt(0)||(za("/"+t),!1)}function Na(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ua(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Fa(t){va?ma(Ua(t)):window.location.hash=t}function za(t){va?ga(Ua(t)):window.location.replace(Ua(t))}var Ba=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Ca(t,ya.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Aa),Va=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Yi(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!va&&!1!==t.fallback,this.fallback&&(e="hash"),Ki||(e="abstract"),this.mode=e,e){case"history":this.history=new Ra(this,t.base);break;case"hash":this.history=new Ia(this,t.base,this.fallback);break;case"abstract":this.history=new Ba(this,t.base);break;default:0}},qa={currentRoute:{configurable:!0}};Va.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qa.currentRoute.get=function(){return this.history&&this.history.current},Va.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Ra||n instanceof Ia){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;va&&o&&"fullPath"in t&&aa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Va.prototype.beforeEach=function(t){return Wa(this.beforeHooks,t)},Va.prototype.beforeResolve=function(t){return Wa(this.resolveHooks,t)},Va.prototype.afterEach=function(t){return Wa(this.afterHooks,t)},Va.prototype.onReady=function(t,e){this.history.onReady(t,e)},Va.prototype.onError=function(t){this.history.onError(t)},Va.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Va.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Va.prototype.go=function(t){this.history.go(t)},Va.prototype.back=function(){this.go(-1)},Va.prototype.forward=function(){this.go(1)},Va.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Va.prototype.resolve=function(t,e,n){var r=Vi(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?Ci(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Va.prototype.getRoutes=function(){return this.matcher.getRoutes()},Va.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Va.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==vi&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Va.prototype,qa);var Ha=Va;function Wa(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Va.install=function t(e){if(!t.installed||qi!==e){t.installed=!0,qi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",wi),e.component("RouterLink",Wi);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Va.version="3.6.5",Va.isNavigationFailure=Ca,Va.NavigationFailureType=ya,Va.START_LOCATION=vi,Ki&&window.Vue&&window.Vue.use(Va);n(98);n(125),n(91);var Ga={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,301)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,257)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,245)),"components/Home":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,283)),"components/NavLink":()=>n.e(21).then(n.bind(null,244)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(12)]).then(n.bind(null,268)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,297)),"components/Page":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,284)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,270)),"components/PageNav":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,271)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,285)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,286)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,269)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(18)]).then(n.bind(null,258)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,256)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,308)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,302)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,303)),"layouts/404":()=>n.e(7).then(n.bind(null,304)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,305)),NotFound:()=>n.e(7).then(n.bind(null,304)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,305))},Ka={"v-b3815688":()=>n.e(22).then(n.bind(null,309)),"v-618fa90d":()=>n.e(24).then(n.bind(null,310)),"v-25ef3a5f":()=>n.e(27).then(n.bind(null,311)),"v-c82b0b82":()=>n.e(25).then(n.bind(null,312)),"v-48bf0382":()=>n.e(26).then(n.bind(null,313)),"v-69d4dc92":()=>n.e(28).then(n.bind(null,314)),"v-15e3261f":()=>n.e(30).then(n.bind(null,315)),"v-a3c5b642":()=>n.e(29).then(n.bind(null,306)),"v-48398402":()=>n.e(31).then(n.bind(null,316)),"v-d10bd742":()=>n.e(32).then(n.bind(null,317)),"v-83bed76a":()=>n.e(33).then(n.bind(null,318)),"v-5bcc1347":()=>n.e(34).then(n.bind(null,307)),"v-2546927e":()=>n.e(23).then(n.bind(null,319)),"v-1643c9df":()=>n.e(35).then(n.bind(null,320))};function Ja(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Xa=/-(\w)/g,Ya=Ja(t=>t.replace(Xa,(t,e)=>e?e.toUpperCase():"")),Za=/\B([A-Z])/g,Qa=Ja(t=>t.replace(Za,"-$1").toLowerCase()),ts=Ja(t=>t.charAt(0).toUpperCase()+t.slice(1));function es(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ts(Ya(e))):t(ts(e))||t(Qa(e))}const ns=Object.assign({},Ga,Ka),rs=t=>ns[t],os=t=>Ka[t],is=t=>Ga[t],as=t=>Gn.component(t);function ss(t){return es(os,t)}function cs(t){return es(is,t)}function us(t){return es(rs,t)}function ls(t){return es(as,t)}function fs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!ls(t)&&us(t)){const e=await us(t)();Gn.component(t,e.default)}}))}function ps(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var hs=n(88),ds=n.n(hs),vs=n(89),ms=n.n(vs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ms()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=_s(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ds()([{name:"description",content:this.$description}],t,this.siteMeta,ws)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){_s(null,this.currentMetaTags),ys()}};function ys(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bs(t=""){return t?``:""}function _s(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function ws(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var xs=n(90),Os={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(xs)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Cs=n(22),$s=n.n(Cs),ks=[gs,Os,{mounted(){$s.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Gn.component(t.name)||$s.a.start(),n()}),this.$router.afterEach(()=>{$s.a.done(),this.isSidebarOpen=!1})}}],Ss={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ps("layout",t),Gn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},js=n(10),Es=Object(js.a)(Ss,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Es,"mixins",ks);const Ps=[{name:"v-b3815688",path:"/",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-b3815688").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-618fa90d",path:"/cli/change.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-618fa90d").then(n)}},{name:"v-25ef3a5f",path:"/cli/publish.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-25ef3a5f").then(n)}},{name:"v-c82b0b82",path:"/cli/check.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-c82b0b82").then(n)}},{name:"v-48bf0382",path:"/cli/options.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-48bf0382").then(n)}},{name:"v-69d4dc92",path:"/cli/sync.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-69d4dc92").then(n)}},{name:"v-15e3261f",path:"/concepts/change-files.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-15e3261f").then(n)}},{name:"v-a3c5b642",path:"/concepts/bump-algorithm.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-a3c5b642").then(n)}},{name:"v-48398402",path:"/concepts/ci-integration.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-48398402").then(n)}},{name:"v-d10bd742",path:"/concepts/groups.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-d10bd742").then(n)}},{name:"v-83bed76a",path:"/overview/configuration.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-83bed76a").then(n)}},{name:"v-5bcc1347",path:"/overview/getting-started.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-5bcc1347").then(n)}},{name:"v-2546927e",path:"/cli/bump.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-2546927e").then(n)}},{name:"v-1643c9df",path:"/overview/installation.html",component:Es,beforeEnter:(t,e,n)=>{fs("Layout","v-1643c9df").then(n)}},{path:"*",component:Es}],As={title:"beachball",description:"The Sunniest Semantic Version Bumper",base:"/beachball/",headTags:[],pages:[{title:"Home",frontmatter:{home:!0,heroText:"The Sunniest Semantic Version Bumper",tagline:"Makes automating npm publishing a breeze",actionText:"Get Started →",actionLink:"/overview/getting-started",features:[{title:"Synchronized in git and npm",details:"keep your git and npm versions in sync in CI and local workflows"},{title:"Generates Changelogs",details:"same command will generate changelogs for your users"},{title:"Automated Version Bumps",details:"one command line to bump package(s) in your repo with semver"},{title:"Single or Monorepo",details:"compatible out of the box for single repo or monorepos"},{title:"Pre-Publish Validation Checks",details:"double and triple check git repo and npm registry before publish"},{title:"Zero Config Versioning",details:"no config is required to get started, do more in one line"}],footer:"MIT Licensed | Copyright © 2019-present Microsoft"},regularPath:"/",relativePath:"README.md",key:"v-b3815688",path:"/"},{title:"change",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/change.html",relativePath:"cli/change.md",key:"v-618fa90d",path:"/cli/change.html",headers:[{level:3,title:"Options",slug:"options"},{level:3,title:"Examples",slug:"examples"},{level:3,title:"Prompt walkthrough",slug:"prompt-walkthrough"}]},{title:"publish",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/publish.html",relativePath:"cli/publish.md",key:"v-25ef3a5f",path:"/cli/publish.html",headers:[{level:3,title:"Options",slug:"options"},{level:3,title:"Algorithm",slug:"algorithm"},{level:3,title:"Example CI workflow",slug:"example-ci-workflow"},{level:3,title:"Recovering from failed publish",slug:"recovering-from-failed-publish"}]},{title:"check",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/check.html",relativePath:"cli/check.md",key:"v-c82b0b82",path:"/cli/check.html",headers:[{level:3,title:"Options",slug:"options"},{level:3,title:"Where should check be run?",slug:"where-should-check-be-run"}]},{title:"Common Options",frontmatter:{title:"Common Options",tags:["cli"],category:"doc"},regularPath:"/cli/options.html",relativePath:"cli/options.md",key:"v-48bf0382",path:"/cli/options.html",headers:[{level:2,title:"General options",slug:"general-options"},{level:2,title:"change options",slug:"change-options"},{level:2,title:"Bumping and publishing options",slug:"bumping-and-publishing-options"}]},{title:"sync",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/sync.html",relativePath:"cli/sync.md",key:"v-69d4dc92",path:"/cli/sync.html",headers:[{level:3,title:"Options",slug:"options"}]},{title:"Change Files",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/concepts/change-files.html",relativePath:"concepts/change-files.md",key:"v-15e3261f",path:"/concepts/change-files.html",headers:[{level:2,title:"What is a change file?",slug:"what-is-a-change-file"},{level:2,title:"Generating a change file",slug:"generating-a-change-file"},{level:2,title:"Validating change files",slug:"validating-change-files"}]},{title:"Bump Algorithm",frontmatter:{tags:["bump"],category:"doc"},regularPath:"/concepts/bump-algorithm.html",relativePath:"concepts/bump-algorithm.md",key:"v-a3c5b642",path:"/concepts/bump-algorithm.html",headers:[{level:3,title:"Dependent version bumping",slug:"dependent-version-bumping"},{level:3,title:"Grouped bumping",slug:"grouped-bumping"}]},{title:"CI Integration",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/concepts/ci-integration.html",relativePath:"concepts/ci-integration.md",key:"v-48398402",path:"/concepts/ci-integration.html",headers:[{level:2,title:"Authentication",slug:"authentication"},{level:3,title:"Generating tokens",slug:"generating-tokens"},{level:3,title:"Storing tokens",slug:"storing-tokens"},{level:2,title:"Setting options for publishing",slug:"setting-options-for-publishing"},{level:2,title:"Publishing",slug:"publishing"},{level:3,title:"GitHub repo + GitHub Actions",slug:"github-repo-github-actions"},{level:3,title:"GitHub repo + Azure Pipelines",slug:"github-repo-azure-pipelines"},{level:3,title:"Azure Repos + Azure Pipelines",slug:"azure-repos-azure-pipelines"}]},{title:"Version Groups",frontmatter:{tags:["groups","lock step"],category:"doc"},regularPath:"/concepts/groups.html",relativePath:"concepts/groups.md",key:"v-d10bd742",path:"/concepts/groups.html",headers:[{level:3,title:"Configuring groups",slug:"configuring-groups"}]},{title:"Configuration",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/overview/configuration.html",relativePath:"overview/configuration.md",key:"v-83bed76a",path:"/overview/configuration.html",headers:[{level:2,title:"Configuration files",slug:"configuration-files"},{level:3,title:"beachball.config.js",slug:"beachball-config-js"},{level:2,title:"Options",slug:"options"}]},{title:"Getting Started",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/overview/getting-started.html",relativePath:"overview/getting-started.md",key:"v-5bcc1347",path:"/overview/getting-started.html",headers:[{level:2,title:"Why Beachball?",slug:"why-beachball"},{level:2,title:"Beachball workflow",slug:"beachball-workflow"},{level:2,title:"Next steps",slug:"next-steps"}]},{title:"bump",frontmatter:{tags:["cli"],category:"doc"},regularPath:"/cli/bump.html",relativePath:"cli/bump.md",key:"v-2546927e",path:"/cli/bump.html",headers:[{level:3,title:"Options",slug:"options"}]},{title:"Installation",frontmatter:{tags:["overview"],category:"doc"},regularPath:"/overview/installation.html",relativePath:"overview/installation.md",key:"v-1643c9df",path:"/overview/installation.html",headers:[{level:2,title:"CLI setup",slug:"cli-setup"},{level:3,title:"Automatic setup",slug:"automatic-setup"},{level:3,title:"Manual setup",slug:"manual-setup"},{level:2,title:"Local development workflow",slug:"local-development-workflow"},{level:2,title:"CI integration",slug:"ci-integration"}]}],themeConfig:{nav:[{text:"Home",link:"/"},{text:"Getting Started",link:"/overview/getting-started"},{text:"Github",link:"https://github.com/microsoft/beachball"}],sidebar:[{title:"Overview",collapsable:!1,children:["/overview/installation","/overview/getting-started","/overview/configuration"]},{title:"Concepts",collapsable:!1,children:["/concepts/bump-algorithm","/concepts/change-files","/concepts/ci-integration","/concepts/groups"]},{title:"Command Line Args",collapsable:!1,children:["/cli/options","/cli/bump","/cli/change","/cli/check","/cli/publish","/cli/sync"]}]}};n(236);Gn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,308))),Gn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,303))),Gn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,302)));n(237);var Ts={props:{color:{required:!1,default:"rgb(66, 185, 131)"}}},Ls=(n(238),Object(js.a)(Ts,(function(){return(0,this._self._c)("div",{staticClass:"spinner",style:{background:this.color}})}),[],!1,null,"1bbcb91a",null).exports);const Rs={name:"Mermaid",props:{id:{type:String,required:!1,default:()=>"diagram_"+Date.now()},graph:{type:String,required:!1}},data:()=>({svg:void 0}),computed:{graphData(){return this.graph?this.graph:this.$slots.default[0].text}},render(t){return void 0===this.svg?t("Loading"):t("div",{class:["mermaid-diagram"],domProps:{innerHTML:this.svg,style:"width: 100%"}})},mounted(){n.e(36).then(n.t.bind(null,298,7)).then(t=>{t.initialize({startOnLoad:!0,gantt:{barHeight:20,fontSize:12,useWidth:960}}),t.render(this.id,this.graphData,t=>{this.svg=t})})},components:{Loading:Ls}};var Ms=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({Vue:t})=>{t.component(Rs.name,Rs)}],Is=[];class Ds extends class{constructor(){this.store=new Gn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Gn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ds.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:cs,getAsyncComponent:us,getVueComponent:ls});var Ns={install(t){const e=new Ds;t.$vuepress=e,t.prototype.$vuepress=e}};function Us(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Fs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ps("pageKey",e),Gn.component(e)||Gn.component(e,ss(e)),Gn.component(e)?t(e):t("")}},zs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Bs={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Vs=(n(239),n(240),Object(js.a)(Bs,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),qs={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Gn.config.productionTip=!1,Gn.use(Ha),Gn.use(Ns),Gn.mixin(function(t,e,n=Gn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Gn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Us(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Us(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Us(t,o)?r(o):Us(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ms.filter(t=>"function"==typeof t).map(e=>e({Vue:Gn,options:r,router:n,siteData:As,isServer:t})))}catch(t){console.error(t)}return{app:new Gn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Is.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/cli/bump.html b/cli/bump.html index 4de6ea0ff..88ec729a9 100644 --- a/cli/bump.html +++ b/cli/bump.html @@ -8,7 +8,7 @@ - + @@ -34,6 +34,6 @@ →

- + diff --git a/cli/change.html b/cli/change.html index 6cfb818f9..6c1a79a07 100644 --- a/cli/change.html +++ b/cli/change.html @@ -8,7 +8,7 @@ - + @@ -57,6 +57,6 @@ →

- + diff --git a/cli/check.html b/cli/check.html index 79eec15d7..bdce6709d 100644 --- a/cli/check.html +++ b/cli/check.html @@ -8,7 +8,7 @@ - + @@ -34,6 +34,6 @@ →

- + diff --git a/cli/options.html b/cli/options.html index 1c6dd847e..567b35bfc 100644 --- a/cli/options.html +++ b/cli/options.html @@ -8,7 +8,7 @@ - + @@ -33,6 +33,6 @@ →

- + diff --git a/cli/publish.html b/cli/publish.html index 4e0613c56..d72f76920 100644 --- a/cli/publish.html +++ b/cli/publish.html @@ -8,7 +8,7 @@ - + @@ -35,6 +35,6 @@ →

- + diff --git a/cli/sync.html b/cli/sync.html index 8b273773e..636f46b1b 100644 --- a/cli/sync.html +++ b/cli/sync.html @@ -8,7 +8,7 @@ - + @@ -29,6 +29,6 @@

- + diff --git a/concepts/bump-algorithm.html b/concepts/bump-algorithm.html index ccc96b1f0..708dd7bfd 100644 --- a/concepts/bump-algorithm.html +++ b/concepts/bump-algorithm.html @@ -8,7 +8,7 @@ - + @@ -42,6 +42,6 @@ →

- + diff --git a/concepts/change-files.html b/concepts/change-files.html index bdc05c8e5..3ac2c970a 100644 --- a/concepts/change-files.html +++ b/concepts/change-files.html @@ -8,7 +8,7 @@ - + @@ -58,6 +58,6 @@ →

- + diff --git a/concepts/ci-integration.html b/concepts/ci-integration.html index caad2cdd8..3ecf6bfe2 100644 --- a/concepts/ci-integration.html +++ b/concepts/ci-integration.html @@ -8,7 +8,7 @@ - + @@ -119,6 +119,6 @@ →

- + diff --git a/concepts/groups.html b/concepts/groups.html index 520f68903..cb62b8aac 100644 --- a/concepts/groups.html +++ b/concepts/groups.html @@ -8,7 +8,7 @@ - + @@ -46,6 +46,6 @@ →

- + diff --git a/index.html b/index.html index 1aa4b9dde..893dea9be 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - + @@ -33,6 +33,6 @@

Synchronized in git and npm

keep your git and npm versions in sync in CI and local workflows

Generates Changelogs

same command will generate changelogs for your users

Automated Version Bumps

one command line to bump package(s) in your repo with semver

Single or Monorepo

compatible out of the box for single repo or monorepos

Pre-Publish Validation Checks

double and triple check git repo and npm registry before publish

Zero Config Versioning

no config is required to get started, do more in one line

- + diff --git a/overview/configuration.html b/overview/configuration.html index 924f5afed..fb3cdce86 100644 --- a/overview/configuration.html +++ b/overview/configuration.html @@ -8,7 +8,7 @@ - + @@ -48,6 +48,6 @@ →

- + diff --git a/overview/getting-started.html b/overview/getting-started.html index 269a55467..8d8fd3d37 100644 --- a/overview/getting-started.html +++ b/overview/getting-started.html @@ -8,7 +8,7 @@ - + @@ -33,6 +33,6 @@ →

- + diff --git a/overview/installation.html b/overview/installation.html index 3755baeb2..b50e2ed46 100644 --- a/overview/installation.html +++ b/overview/installation.html @@ -8,7 +8,7 @@ - + @@ -44,6 +44,6 @@ →

- +