{%= name %} [![npm version][npmv-img]][npmv-url] ![License][license-img]
{%= description %}
Please consider following this project's author, Charlike Mike Reagent, and ⭐ the project to show your ❤️ and support.
If you have any how-to kind of questions, please read the Contributing Guide and Code of Conduct documents.
For bugs reports and feature requests, please create an issue or ping
@tunnckoCore at Twitter.
[![NPM Downloads Weekly][downloads-weekly-img]][npmv-url] [![NPM Downloads Monthly][downloads-monthly-img]][npmv-url] [![NPM Downloads Total][downloads-total-img]][npmv-url]
Project is semantically & automatically released on CircleCI with [new-release][] and its New Release GitHub App.
This project requires Node.js {%= engines.node %}. Install it using
yarn or npm.
We highly recommend to use Yarn when you think to contribute to this project.
$ yarn add {%= name %}
For making it work on monorepo setups, you should pass options.packages
- an array
of package names that are changes and a options.cwd
- the root of the monorepo.
Usually this can be extracted from commit message or the response of lerna changed
.
import detectNextVersion from 'detect-next-version';
async function main() {
// e.g. /home/charlike/develop/some-monorepo
const cwd = process.cwd();
// try using `git-commits-since` for getting all commits
// it returns an object with `rawCommits` property
const commits = ['feat: foo bar', 'chore(ok): qux okey'];
const packages = ['@tunnckocore/qq5', 'foo-bar-baz-qux'];
const results = await detectNextVersion(commits, { packages, cwd });
console.log(results);
const [itemOne, itemTwo] = results;
console.log(itemOne.name); // => '@tunnckocore/qq5'
console.log(itemOne.path); // => '@tunnckocore/qq5'
console.log(itemOne.increment); // => 'minor'
console.log(itemOne.lastVersion); // => '0.1.0'
console.log(itemOne.nextVersion); // => '0.2.0'
console.log(itemOne.cwd); // => /home/charlike/develop/some-monorepo
console.log(itemTwo.name); // => 'foo-bar-baz-qux'
console.log(itemTwo.path); // => 'packages/foo-bar-baz-qux'
console.log(itemTwo.increment); // => 'minor'
console.log(itemTwo.lastVersion); // => '1.0.4'
console.log(itemTwo.nextVersion); // => '1.1.0'
console.log(itemTwo.cwd); // => /home/charlike/develop/some-monorepo
}
main().catch(console.error);
Generated using docks.
Calculates next version of given package with name
,
based given commitMessages
which should follow
the Conventional Commits Specification.
Options are passed directly to @tunnckocore/package-json and
[recommended-bump][] packages. Also because the recommended-bump, you can
pass options.plugins
which will be passed to [parse-commit-message][]
commit message parser. So follow their docs and see the tests here for
example usage. If all commit messages are of type that is not patch|fix|minor|feat|major
or containing BREAKING CHANGE:
label (e.g. the chore
type), then the
returned result won't have nextVersion
and increment
will be false
.
ProTip: See parse-commit-message types documentation!
Params
commits
{string|} directly passed to [recommended-bump][] May be one ofstring
,Array<string>
orArray<Commit>
[options]
{object} optional, passed to above mentioned packages.
Returns
Array<object>
an array of objects where each is basically the return of [recommended-bump][] plus{ pkg, name, cwd, path, lastVersion, nextVersion? }
.
Examples
type Commit = {
header: Header;
body?: string | null;
footer?: string | null;
increment?: string | boolean;
isBreaking?: boolean;
mentions?: Array<Mention>;
};
import detector from 'detect-next-version';
async function main() {
const commits = ['chore(ci): some build tweaks', 'fix(cli): foo bar'];
// consider `my-npm-package` is version 0.1.0
const [result] = await detector(commits, { name: 'my-npm-package' });
console.log(result.increment); // => 'patch'
console.log(result.pkg); // => package's latest package.json metadata
console.log(result.lastVersion); // => '0.1.0'
console.log(result.nextVersion); // => '0.1.1'
console.log(result.patch[0].header.type); // => 'fix'
console.log(result.patch[0].header.scope); // => 'cli'
console.log(result.patch[0].header.subject); // => 'foobar'
console.log(result.patch[0].header.toString()); // => 'fix(cli): foobar'
}
main().catch(console.error);
import { parse } from 'parse-commit-message';
import detector from 'detect-next-version';
async function main() {
const commitOne = parse('fix: foo bar');
const commitTwo = parse('feat: some feature subject');
// always an array, but we can destruct it here,
// because we know that it has only one item
const [result] = await detector([commitOne, commitTwo], {
name: '@my-org/my-awesomepkg',
});
console.log(result.increment); // => 'minor'
}
main().catch(console.error);
{% if (verb.related && verb.related.list && verb.related.list.length) { %}
Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your existance!
{%= related(verb.related.list, { words: 10 }) %}
back to top {% } %}
Please read the Contributing Guide and Code of Conduct documents for advices.
For bugs reports and feature requests, please create an issue or ping
@tunnckoCore at Twitter.
Become a Partner or Sponsor? 💵 Check the Partner, Sponsor or Omega-level tiers! 🎉 You can get your company logo, link & name on this file. It's also rendered on package page in [npmjs.com][npmv-url] and [yarnpkg.com](https://yarnpkg.com/en/package/{%= name %}) sites too! 🚀
Not financial support? Okey! Pull requests, stars and all kind of contributions are always welcome. ✨
This project is following OPEN Open Source model
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is built on collective efforts and it's not strongly guarded by its founders.
There are a few basic ground-rules for its contributors
- Any significant modifications must be subject to a pull request to get feedback from other contributors.
- Pull requests to get feedback are encouraged for any other trivial contributions, but are not required.
- Contributors should attempt to adhere to the prevailing code-style and development workflow.
Thanks to the hard work of these wonderful people this project is alive! It follows the
all-contributors specification.
Don't hesitate to add yourself to that list if you have made any contribution! ;) See how,
here.
Charlike Mike Reagent 💻 📖 💬 👀 🔍 |
---|
Consider showing your support to them. 💖
Copyright (c) 2017-present, Charlike Mike Reagent <[email protected]>
& contributors.
Released under the Apache-2.0 License.
[npmv-url]: https://www.npmjs.com/package/{%= name %} [npmv-img]: https://badgen.net/npm/v/{%= name %}?icon=npm
[license-img]: https://badgen.net/npm/license/{%= name %}
[downloads-weekly-img]: https://badgen.net/npm/dw/{%= name %} [downloads-monthly-img]: https://badgen.net/npm/dm/{%= name %} [downloads-total-img]: https://badgen.net/npm/dt/{%= name %}