detect-next-version

Calculates next version, based on given commit message and following Conventional Commits
Please consider following this project's author, Charlike Mike Reagent, and :star: the project to show your :heart: 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.

Project is semantically & automatically released on CircleCI with new-release and its New Release GitHub App.
Table of Contents
(TOC generated by verb using markdown-toc)
Install
This project requires Node.js ^8.10.0 || >=10.13.0. Install it using
yarn or npm.
We highly recommend to use Yarn when you think to contribute to this project.
$ yarn add detect-next-version
Monorepo support
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() {
const cwd = process.cwd();
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);
console.log(itemOne.path);
console.log(itemOne.increment);
console.log(itemOne.lastVersion);
console.log(itemOne.nextVersion);
console.log(itemOne.cwd);
console.log(itemTwo.name);
console.log(itemTwo.path);
console.log(itemTwo.increment);
console.log(itemTwo.lastVersion);
console.log(itemTwo.nextVersion);
console.log(itemTwo.cwd);
}
main().catch(console.error);
API
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 of string
, Array<string>
or Array<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'];
const [result] = await detector(commits, { name: 'my-npm-package' });
console.log(result.increment);
console.log(result.pkg);
console.log(result.lastVersion);
console.log(result.nextVersion);
console.log(result.patch[0].header.type);
console.log(result.patch[0].header.scope);
console.log(result.patch[0].header.subject);
console.log(result.patch[0].header.toString());
}
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');
const [result] = await detector([commitOne, commitTwo], {
name: '@my-org/my-awesomepkg',
});
console.log(result.increment);
}
main().catch(console.error);
back to top
See Also
Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your existance!
back to top
Contributing
Follow the Guidelines
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.
Support the project
Become a Partner or Sponsor? :dollar: Check the Partner, Sponsor or Omega-level tiers! :tada: You can get your company logo, link & name on this file. It's also rendered on package page in npmjs.com and yarnpkg.com sites too! :rocket:
Not financial support? Okey! Pull requests, stars and all kind of contributions are always
welcome. :sparkles:
OPEN Open Source
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.
Wonderful Contributors
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.
Consider showing your support to them. :sparkling_heart:
License
Copyright (c) 2017-present, Charlike Mike Reagent <mameto2011@gmail.com>
& contributors.
Released under the Apache-2.0 License.