Miss any of our Open RFC calls?Watch the recordings here! »

fit-commit-js

0.3.2 • Public • Published

Build Status Dependency Status Code Climate

Fit commit js

A node version of fit-commit by Mike Foley

It creates a git commit hook that will be run each time you do a commit for your repo, it will validate that the commit message follows the guidelines you've set up for your project.

Table of contents

Why to validate commits and reasons behind each rule

We all want always to become better developers, in order to do so, we need to learn new things every day. One of the strategies to learning and using new ways to work, is to understand the reasons behind them.

In order to get more insights behind why it is important to validate commit messages, and the whys behind each of the rules in this package, check out the wiki in github

Installation and Configuration

To install it run:

$ npm i fit-commit-js

Then you need to install the commit hook in your repo by doing:

$./node_modules/fit-commit-js/bin/fit-commit-js.js install

Then create your fitcomitjsrc.{yml, yaml, json} with your settings, and place it at the root of your project.

You can also add a section in your package.json called: "fitcommitjsConfig", and add there your settings.

Available Validators

  • Line length Validates that the line length of the subject and content of the commit message is less or equal than the number you configure for it.

Default value: 150

  • Empty lines Validates that the lines you specify are empty.

Default value: 1 (the line after the subject)

  • Tags Validates that your commit message contains within its content a tag categorizing the type of commit.

Default Value: '' ie: feature, chore, bugfix, etc.

  • Ticket code Validates that the commit message contains a ticket number

Default Value: ''

  • Tense of the subject Validates that tense of the subject is an imperative verb. It checks that the first word of the subject is not within the black list of verbs listed below.

Default Value: N/A Checks against black list of words

  • WIP (Work in progress) Ensures that work in progress is not merged into specified branch. It ensures that the commit message does not have the next words within its content:
    'wip', 'rw', 'todo'

Default Value: N/A

  • Capitalized subject Ensures that the subject is a capitalized sentence.

Default Value: N/A

  • Subject with a period Ensures that the subject ends with period

Default Value: N/A

Sample of configs

Yaml

---
validators:
  lineLength:
    enabled: true
    maxLineLength: 72
    subjectMaxLength: 50
  ticketCode:
    enabled: true
    ticketCodeText: 'FITCOMMITJS-'
    oneTicketPerCommit: false
  emptyLines:
    enabled: true
    emptyLines: 1,3
  tags:
    enabled: true
    tags: bugfix, chore, feature
    lineOfTheTag: 4
  subjectTense:
    enabled: true
  subjectPeriod:
    enabled: true
  capitalizedSubject:
    enabled: true
  wip:
    enabled: true
    branch: master

Json

...
  "fitcommitjsConfig" : {
    "validators" : {
      "lineLength" : {
        "enabled" : true,
        "maxLineLength" : 72,
        "subjectMaxLength" : 50
      },
      "ticketCode" : {
        "enabled" : true,
        "ticketCodeText" : "FITCOMMITJS-",
        "oneTicketPerCommit" : false
      },
      "emptyLines" : {
        "enabled" : true,
        "emptyLines" : 13
      },
      "tags" : {
        "enabled" : true,
        "tags" : "bugfix, chore, feature",
        "lineOfTheTag" : 4
      },
      "subjectTense" : {
        "enabled" : true
      },
      "subjectPeriod" : {
        "enabled" : true
      },
      "capitalizedSubject" : {
        "enabled" : true
      },
      "wip" : {
        "enabled" : true,
        "branch" : "master"
      }
    }
  }
...

Black list of words for the subject

'adds', 'adding', 'added', 'allows', 'allowing', 'allowed', 'amends', 'amending', 'amended', 'bumps', 'bumping', 'bumped', 'calculates', 'calculating', 'calculated', 'changes', 'changing', 'changed', 'cleans', 'cleaning', 'cleaned', 'commits', 'committing', 'committed', 'corrects', 'correcting', 'corrected', 'creates', 'creating', 'created', 'darkens', 'darkening', 'darkened', 'disables', 'disabling', 'disabled', 'displays', 'displaying', 'displayed', 'drys', 'drying', 'dryed', 'ends', 'ending', 'ended', 'enforces', 'enforcing', 'enforced', 'enqueues', 'enqueuing', 'enqueued', 'extracts', 'extracting', 'extracted', 'finishes', 'finishing', 'finished', 'fixes', 'fixing', 'fixed', 'formats', 'formatting', 'formatted', 'guards', 'guarding', 'guarded', 'handles', 'handling', 'handled', 'hides', 'hiding', 'hid', 'increases', 'increasing', 'increased', 'ignores', 'ignoring', 'ignored', 'implements', 'implementing', 'implemented', 'improves', 'improving', 'improved', 'keeps', 'keeping', 'kept', 'kills', 'killing', 'killed', 'makes', 'making', 'made', 'merges', 'merging', 'merged', 'moves', 'moving', 'moved', 'permits', 'permitting', 'permitted', 'prevents', 'preventing', 'prevented', 'pushes', 'pushing', 'pushed', 'rebases', 'rebasing', 'rebased', 'refactors', 'refactoring', 'refactored', 'removes', 'removing', 'removed', 'renames', 'renaming', 'renamed', 'reorders', 'reordering', 'reordered', 'requires', 'requiring', 'required', 'restores', 'restoring', 'restored', 'sends', 'sending', 'sent', 'sets', 'setting', 'separates', 'separating', 'separated', 'shows', 'showing', 'showed', 'skips', 'skipping', 'skipped', 'sorts', 'sorting', 'speeds', 'speeding', 'sped', 'starts', 'starting', 'started', 'supports', 'supporting', 'supported', 'takes', 'taking', 'took', 'tests', 'testing', 'tested', 'truncates', 'truncating', 'truncated', 'updates', 'updating', 'updated', 'uses', 'using', 'used'

Guidelines to contribute

  • Use the ES2015 features supported by node
  • TDD with mocha, chai and sinon
  • Functional programming with ramda
  • Use javascript guidelines from Airbnb
  • Allow spaces inside "(),{} and []"

Supported config files

  • .fitcommitjsrc.json
  • .fitcommitjsrc.{yml,yaml}
  • .package.json with a key: fitcommitjsConfig

Install

npm i fit-commit-js

DownloadsWeekly Downloads

562

Version

0.3.2

License

GPL-2.0

Unpacked Size

86.7 kB

Total Files

68

Last publish

Collaborators

  • avatar