Skip to content

Latest commit

 

History

History
285 lines (207 loc) · 12.1 KB

.verb.md

File metadata and controls

285 lines (207 loc) · 12.1 KB

{%= name %} [![npm version][npmv-img]][npmv-url] github release ![License][license-img]

{%= description %}

Please consider following this project's author, Charlike Mike Reagent, and ⭐ the project to show your ❤️ and support.

Code style CircleCI linux build CodeCov coverage status DavidDM dependency status Renovate App Status Make A Pull Request Semantically Released

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.

Become a Patron Conventional Commits [![NPM Downloads Weekly][downloads-weekly-img]][npmv-url] [![NPM Downloads Monthly][downloads-monthly-img]][npmv-url] [![NPM Downloads Total][downloads-total-img]][npmv-url] Share Love Tweet

Project is semantically & automatically released on CircleCI with [new-release][] and its New Release GitHub App.

Table of Contents

Install

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 %}

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() {
  // 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);

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'];

  // 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);

back to top

{% if (verb.related && verb.related.list && verb.related.list.length) { %}

See Also

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 {% } %}

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? 💵 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. ✨

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

  1. Any significant modifications must be subject to a pull request to get feedback from other contributors.
  2. Pull requests to get feedback are encouraged for any other trivial contributions, but are not required.
  3. 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.


Charlike Mike Reagent

💻 📖 💬 👀 🔍

Consider showing your support to them. 💖

License

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 %}